diff --git a/.gitignore b/.gitignore index dbeedc38f..48a9ce23f 100644 --- a/.gitignore +++ b/.gitignore @@ -333,10 +333,22 @@ tags ### Hardhat ### cache artifacts +!/op-bindings/hardhat/testdata/artifacts/ ### Devnet .devnet +packages/contracts/deployments/devnetL1 ### Misc ### # Ignore all binary folders bin/ + +# Ignore local fuzzing results +**/testdata/fuzz/ + +coverage.out + +# Ignore bedrock go bindings local output files +op-bindings/bin + +__pycache__ diff --git a/Makefile b/Makefile index ca6198388..1a9afb997 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,5 @@ +COMPOSEFLAGS=-d + VERSION := $(shell git describe --tags --abbrev=0 --match v* 2> /dev/null || echo 'v0.0.0') GIT_COMMIT := $(shell git rev-parse --short=8 HEAD) @@ -33,17 +35,41 @@ lint: .PHONY: lint bindings: - make -C ./op-bindings -.PHONY: op-bindings + make -C ./kroma-bindings +.PHONY: bindings contracts-snapshot: @(cd ./packages/contracts && yarn gas-snapshot && yarn storage-snapshot) .PHONY: gas-snapshot -devnet-up: - @bash ./ops-devnet/devnet-up.sh +mod-tidy: + # Below GOPRIVATE line allows mod-tidy to be run immediately after + # releasing new versions. This bypasses the Go modules proxy, which + # can take a while to index new versions. + # + # See https://proxy.golang.org/ for more info. + export GOPRIVATE="github.com/kroma-network" && go mod tidy +.PHONY: mod-tidy + +pre-devnet: + @if ! [ -x "$(command -v geth)" ]; then \ + make install-geth; \ + fi +.PHONY: pre-devnet + +devnet-up: pre-devnet + ./ops/scripts/newer-file.sh .devnet/allocs-l1.json ./packages/contracts \ + || make devnet-allocs + PYTHONPATH=./kroma-devnet python3 ./kroma-devnet/main.py --monorepo-dir=. .PHONY: devnet-up +# alias for devnet-up +devnet-up-deploy: devnet-up + +devnet-test: pre-devnet + PYTHONPATH=./kroma-devnet python3 ./kroma-devnet/main.py --monorepo-dir=. --test +.PHONY: devnet-test + devnet-down: @(cd ./ops-devnet && GENESIS_TIMESTAMP=$(shell date +%s) docker compose stop) .PHONY: devnet-down @@ -56,9 +82,19 @@ devnet-clean: docker volume ls --filter name=ops-devnet --format='{{.Name}}' | xargs -r docker volume rm .PHONY: devnet-clean +devnet-allocs: pre-devnet + PYTHONPATH=./kroma-devnet python3 ./kroma-devnet/main.py --monorepo-dir=. --allocs + +devnet-logs: + @(cd ./ops-devnet && docker compose logs -f) +.PHONY: devnet-logs + update-geth: @ETH_GETH=$$(go list -m -f '{{.Path}}@{{.Version}}' github.com/ethereum/go-ethereum); \ KROMA_GETH=$$(go list -m -f '{{.Path}}@{{.Version}}' github.com/kroma-network/go-ethereum@dev); \ go mod edit -replace $$ETH_GETH=$$KROMA_GETH @go mod tidy .PHONY: update-geth + +install-geth: + go install github.com/ethereum/go-ethereum/cmd/geth@v1.12.0 diff --git a/go.mod b/go.mod index 64d28cd2e..6a532819f 100644 --- a/go.mod +++ b/go.mod @@ -21,18 +21,20 @@ require ( github.com/kroma-network/zktrie v0.5.1-0.20230420142222-950ce7a8ce84 github.com/libp2p/go-libp2p v0.31.0 github.com/libp2p/go-libp2p-mplex v0.9.0 - github.com/libp2p/go-libp2p-pubsub v0.9.0 + github.com/libp2p/go-libp2p-pubsub v0.9.3 github.com/libp2p/go-libp2p-testing v0.12.0 + github.com/mattn/go-isatty v0.0.19 github.com/multiformats/go-base32 v0.1.0 github.com/multiformats/go-multiaddr v0.11.0 github.com/multiformats/go-multiaddr-dns v0.3.1 github.com/olekukonko/tablewriter v0.0.5 + github.com/onsi/gomega v1.28.0 github.com/prometheus/client_golang v1.17.0 github.com/stretchr/testify v1.8.4 github.com/urfave/cli/v2 v2.25.7 golang.org/x/exp v0.0.0-20230905200255-921286631fa9 golang.org/x/sync v0.3.0 - golang.org/x/term v0.12.0 + golang.org/x/term v0.15.0 golang.org/x/time v0.3.0 ) @@ -56,6 +58,7 @@ require ( github.com/containerd/cgroups v1.1.0 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect + github.com/crate-crypto/go-ipa v0.0.0-20230601170251-1830d0757c80 // indirect github.com/crate-crypto/go-kzg-4844 v0.3.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect @@ -66,12 +69,13 @@ require ( github.com/docker/go-units v0.5.0 // indirect github.com/dop251/goja v0.0.0-20230806174421-c933cf95e127 // indirect github.com/elastic/gosigar v0.14.2 // indirect - github.com/emirpasic/gods v1.18.1 // indirect github.com/ethereum/c-kzg-4844 v0.3.1 // indirect + github.com/fatih/color v1.7.0 // indirect github.com/fjl/memsize v0.0.1 // indirect github.com/flynn/noise v1.0.0 // indirect github.com/francoispqt/gojay v1.2.13 // indirect github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 // indirect + github.com/gballet/go-verkle v0.0.0-20230607174250-df487255f46b // indirect github.com/getsentry/sentry-go v0.18.0 // indirect github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect @@ -94,16 +98,17 @@ require ( github.com/holiman/billy v0.0.0-20230718173358-1c7e68d277a7 // indirect github.com/holiman/bloomfilter/v2 v2.0.3 // indirect github.com/huin/goupnp v1.3.0 // indirect - github.com/iden3/go-iden3-crypto v0.0.13 // indirect + github.com/iden3/go-iden3-crypto v0.0.15 // indirect github.com/influxdata/influxdb-client-go/v2 v2.4.0 // indirect github.com/influxdata/influxdb1-client v0.0.0-20220302092344-a9ab5670611c // indirect github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 // indirect github.com/ipfs/go-cid v0.4.1 // indirect - github.com/ipfs/go-log v1.0.5 // indirect github.com/ipfs/go-log/v2 v2.5.1 // indirect github.com/jackpal/go-nat-pmp v1.0.2 // indirect github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect github.com/jbenet/goprocess v0.1.4 // indirect + github.com/jedisct1/go-minisign v0.0.0-20230811132847-661be99b8267 // indirect + github.com/karalabe/usb v0.0.3-0.20230711191512-61db3e06439c // indirect github.com/klauspost/compress v1.16.7 // indirect github.com/klauspost/cpuid/v2 v2.2.5 // indirect github.com/koron/go-ssdp v0.0.4 // indirect @@ -121,7 +126,6 @@ require ( github.com/libp2p/go-yamux/v4 v4.0.1 // indirect github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.19 // indirect github.com/mattn/go-runewidth v0.0.14 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/miekg/dns v1.1.55 // indirect @@ -139,6 +143,8 @@ require ( github.com/multiformats/go-multihash v0.2.3 // indirect github.com/multiformats/go-multistream v0.4.1 // indirect github.com/multiformats/go-varint v0.0.7 // indirect + github.com/naoina/go-stringutil v0.1.0 // indirect + github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 // indirect github.com/onsi/ginkgo/v2 v2.12.0 // indirect github.com/opencontainers/runtime-spec v1.1.0 // indirect github.com/opentracing/opentracing-go v1.2.0 // indirect @@ -154,7 +160,7 @@ require ( github.com/quic-go/quic-go v0.38.1 // indirect github.com/quic-go/webtransport-go v0.5.3 // indirect github.com/raulk/go-watchdog v1.3.0 // indirect - github.com/rivo/uniseg v0.3.4 // indirect + github.com/rivo/uniseg v0.4.3 // indirect github.com/rogpeppe/go-internal v1.10.0 // indirect github.com/rs/cors v1.9.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect @@ -169,15 +175,16 @@ require ( github.com/tyler-smith/go-bip39 v1.1.0 // indirect github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect + go.uber.org/automaxprocs v1.5.2 // indirect go.uber.org/dig v1.17.0 // indirect go.uber.org/fx v1.20.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.25.0 // indirect - golang.org/x/crypto v0.13.0 // indirect + golang.org/x/crypto v0.16.0 // indirect golang.org/x/mod v0.12.0 // indirect golang.org/x/net v0.15.0 // indirect - golang.org/x/sys v0.12.0 // indirect - golang.org/x/text v0.13.0 // indirect + golang.org/x/sys v0.15.0 // indirect + golang.org/x/text v0.14.0 // indirect golang.org/x/tools v0.13.0 // indirect google.golang.org/protobuf v1.31.0 // indirect gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect diff --git a/go.sum b/go.sum index 9a5c09fb3..024a9b27b 100644 --- a/go.sum +++ b/go.sum @@ -112,6 +112,8 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:ma github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/crate-crypto/go-ipa v0.0.0-20230601170251-1830d0757c80 h1:DuBDHVjgGMPki7bAyh91+3cF1Vh34sAEdH8JQgbc2R0= +github.com/crate-crypto/go-ipa v0.0.0-20230601170251-1830d0757c80/go.mod h1:gzbVz57IDJgQ9rLQwfSk696JGWof8ftznEL9GoAv3NI= github.com/crate-crypto/go-kzg-4844 v0.3.0 h1:UBlWE0CgyFqqzTI+IFyCzA7A3Zw4iip6uzRv5NIXG0A= github.com/crate-crypto/go-kzg-4844 v0.3.0/go.mod h1:SBP7ikXEgDnUPONgm33HtuDZEDtWa3L4QtN1ocJSEQ4= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= @@ -122,7 +124,6 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c/go.mod h1:6UhI8N9EjYm1c2odKpFpAYeR8dsBeM7PtzQhRgxRr9U= -github.com/dchest/blake512 v1.0.0/go.mod h1:FV1x7xPPLWukZlpDpWQ88rF/SFwZ5qbskrzhLMB92JI= github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI= github.com/deckarep/golang-set/v2 v2.1.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= @@ -161,8 +162,6 @@ github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZi github.com/elastic/gosigar v0.12.0/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= github.com/elastic/gosigar v0.14.2 h1:Dg80n8cr90OZ7x+bAax/QjoW/XqTI11RmA79ZwIm9/4= github.com/elastic/gosigar v0.14.2/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= -github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= -github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= @@ -173,6 +172,8 @@ github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3/go.mod h1:QziizLAiF0Kqy github.com/ethereum/c-kzg-4844 v0.3.1 h1:sR65+68+WdnMKxseNWxSJuAv2tsUrihTpVBTfM/U5Zg= github.com/ethereum/c-kzg-4844 v0.3.1/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= +github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/fjl/memsize v0.0.1 h1:+zhkb+dhUgx0/e+M8sF0QqiouvMQUiKR+QYvdxIOKcQ= github.com/fjl/memsize v0.0.1/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= @@ -189,6 +190,8 @@ github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbS github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 h1:f6D9Hr8xV8uYKlyuj8XIruxlh9WjVjdh1gIicAS7ays= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= +github.com/gballet/go-verkle v0.0.0-20230607174250-df487255f46b h1:vMT47RYsrftsHSTQhqXwC3BYflo38OLC3Y4LtXtLyU0= +github.com/gballet/go-verkle v0.0.0-20230607174250-df487255f46b/go.mod h1:CDncRYVRSDqwakm282WEkjfaAj1hxU/v5RXxk5nXOiI= github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/getsentry/sentry-go v0.12.0/go.mod h1:NSap0JBYWzHND8oMbyi0+XZhUalc1TBdRL1M71JZW2c= @@ -328,8 +331,8 @@ github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFck github.com/hydrogen18/memlistener v0.0.0-20200120041712-dcc25e7acd91/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20220319035150-800ac71e25c2/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= -github.com/iden3/go-iden3-crypto v0.0.13 h1:ixWRiaqDULNyIDdOWz2QQJG5t4PpNHkQk2P6GV94cok= -github.com/iden3/go-iden3-crypto v0.0.13/go.mod h1:swXIv0HFbJKobbQBtsB50G7IHr6PbTowutSew/iBEoo= +github.com/iden3/go-iden3-crypto v0.0.15 h1:4MJYlrot1l31Fzlo2sF56u7EVFeHHJkxGXXZCtESgK4= +github.com/iden3/go-iden3-crypto v0.0.15/go.mod h1:dLpM4vEPJ3nDHzhWFXDjzkn1qHoBeOT/3UEhXsEsP3E= github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/influxdata/influxdb-client-go/v2 v2.4.0 h1:HGBfZYStlx3Kqvsv1h2pJixbCl/jhnFtxpKFAv9Tu5k= @@ -351,9 +354,6 @@ github.com/ipfs/go-ds-badger v0.3.0/go.mod h1:1ke6mXNqeV8K3y5Ak2bAA0osoTfmxUdupV github.com/ipfs/go-ds-leveldb v0.5.0 h1:s++MEBbD3ZKc9/8/njrn4flZLnCuY9I79v94gBUNumo= github.com/ipfs/go-ds-leveldb v0.5.0/go.mod h1:d3XG9RUDzQ6V4SHi8+Xgj9j1XuEk1z82lquxrVbml/Q= github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= -github.com/ipfs/go-log v1.0.5 h1:2dOuUCB1Z7uoczMWgAyDck5JLb72zHzrMnGnCNNbvY8= -github.com/ipfs/go-log v1.0.5/go.mod h1:j0b8ZoR+7+R99LD9jZ6+AJsrzkPbSXbZfGakb5JPtIo= -github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g= github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY= github.com/ipfs/go-log/v2 v2.5.1/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= @@ -368,6 +368,8 @@ github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABo github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o= github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= +github.com/jedisct1/go-minisign v0.0.0-20230811132847-661be99b8267 h1:TMtDYDHKYY15rFihtRfck/bfFqNfvcabqvXAFQfAUpY= +github.com/jedisct1/go-minisign v0.0.0-20230811132847-661be99b8267/go.mod h1:h1nSAbGFqGVzn6Jyl1R/iCcBUHN4g+gW1u9CoBTrb9E= github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= @@ -379,6 +381,8 @@ github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfV github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= +github.com/karalabe/usb v0.0.3-0.20230711191512-61db3e06439c h1:AqsttAyEyIEsNz5WLRwuRwjiT5CMDUfLk6cFJDVPebs= +github.com/karalabe/usb v0.0.3-0.20230711191512-61db3e06439c/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/kataras/golog v0.0.10/go.mod h1:yJ8YKCmyL+nWjERB90Qwn+bdyBZsaQwU3bTVFgkFIp8= github.com/kataras/iris/v12 v12.1.8/go.mod h1:LMYy4VlP67TQ3Zgriz8RE2h2kMZV2SgMYbq3UhfoFmE= github.com/kataras/neffos v0.0.14/go.mod h1:8lqADm8PnbeFfL7CLXh1WHw53dG27MC3pgi2R1rmoTE= @@ -431,8 +435,8 @@ github.com/libp2p/go-libp2p-asn-util v0.3.0 h1:gMDcMyYiZKkocGXDQ5nsUQyquC9+H+iLE github.com/libp2p/go-libp2p-asn-util v0.3.0/go.mod h1:B1mcOrKUE35Xq/ASTmQ4tN3LNzVVaMNmq2NACuqyB9w= github.com/libp2p/go-libp2p-mplex v0.9.0 h1:R58pDRAmuBXkYugbSSXR9wrTX3+1pFM1xP2bLuodIq8= github.com/libp2p/go-libp2p-mplex v0.9.0/go.mod h1:ro1i4kuwiFT+uMPbIDIFkcLs1KRbNp0QwnUXM+P64Og= -github.com/libp2p/go-libp2p-pubsub v0.9.0 h1:mcLb4WzwhUG4OKb0rp1/bYMd/DYhvMyzJheQH3LMd1s= -github.com/libp2p/go-libp2p-pubsub v0.9.0/go.mod h1:OEsj0Cc/BpkqikXRTrVspWU/Hx7bMZwHP+6vNMd+c7I= +github.com/libp2p/go-libp2p-pubsub v0.9.3 h1:ihcz9oIBMaCK9kcx+yHWm3mLAFBMAUsM4ux42aikDxo= +github.com/libp2p/go-libp2p-pubsub v0.9.3/go.mod h1:RYA7aM9jIic5VV47WXu4GkcRxRhrdElWf8xtyli+Dzc= github.com/libp2p/go-libp2p-testing v0.12.0 h1:EPvBb4kKMWO29qP4mZGyhVzUyR25dvfUIK5WDu6iPUA= github.com/libp2p/go-libp2p-testing v0.12.0/go.mod h1:KcGDRXyN7sQCllucn1cOOS+Dmm7ujhfEyXQL5lvkcPg= github.com/libp2p/go-mplex v0.7.0 h1:BDhFZdlk5tbr0oyFq/xv/NPGfjbnrsDam1EvutpBDbY= @@ -535,6 +539,10 @@ github.com/multiformats/go-multistream v0.4.1/go.mod h1:Mz5eykRVAjJWckE2U78c6xqd github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8= github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU= +github.com/naoina/go-stringutil v0.1.0 h1:rCUeRUHjBjGTSHl0VC00jUPLz8/F9dDzYI70Hzifhks= +github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= +github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 h1:shk/vn9oCoOTmwcouEdwIeOtOGA/ELRUw/GwvxwfT+0= +github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= @@ -563,8 +571,8 @@ github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7J github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= -github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= -github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= +github.com/onsi/gomega v1.28.0 h1:i2rg/p9n/UqIDAMFUJ6qIUUMcsqOuUHgbpbu235Vr1c= +github.com/onsi/gomega v1.28.0/go.mod h1:A1H2JE76sI14WIP57LMKj7FVfCHx3g3BcZVjJG8bjX8= github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.1.0 h1:HHUyrt9mwHUjtasSbXSMvs4cyFxh+Bll4AjJ9odEGpg= github.com/opencontainers/runtime-spec v1.1.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= @@ -585,6 +593,8 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= +github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= @@ -609,8 +619,8 @@ github.com/quic-go/webtransport-go v0.5.3/go.mod h1:OhmmgJIzTTqXK5xvtuX0oBpLV2Gk github.com/raulk/go-watchdog v1.3.0 h1:oUmdlHxdkXRJlwfG0O9omj8ukerm8MEQavSiDTEtBsk= github.com/raulk/go-watchdog v1.3.0/go.mod h1:fIvOnLbF0b0ZwkB9YU4mOW9Did//4vPZtDqv66NfsMU= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.3.4 h1:3Z3Eu6FGHZWSfNKJTOUiPatWwfc7DzJRU04jFUqJODw= -github.com/rivo/uniseg v0.3.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw= +github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= @@ -729,6 +739,8 @@ go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/automaxprocs v1.5.2 h1:2LxUOGiR3O6tw8ui5sZa2LAaHnsviZdVOUZw4fvbnME= +go.uber.org/automaxprocs v1.5.2/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0= go.uber.org/dig v1.17.0 h1:5Chju+tUvcC+N7N6EV08BJz41UZuO3BmHcN4A287ZLI= go.uber.org/dig v1.17.0/go.mod h1:rTxpf7l5I0eBTlE6/9RL+lDybC7WFwY2QH55ZSjy1mU= go.uber.org/fx v1.20.0 h1:ZMC/pnRvhsthOZh9MZjMq5U8Or3mA9zBSPaLnzs3ihQ= @@ -741,7 +753,6 @@ go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9i go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= go.uber.org/zap v1.25.0 h1:4Hvk6GtkucQ790dqmj7l1eEnRdKm3k3ZUrUMS2d5+5c= go.uber.org/zap v1.25.0/go.mod h1:JIAUzQIH94IC4fOJQm7gMmBJP5k7wQfdcnYdPoEXJYk= @@ -763,9 +774,8 @@ golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= -golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= +golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= @@ -811,7 +821,6 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= @@ -831,6 +840,7 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -871,6 +881,7 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211020174200-9d6173849985/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -884,13 +895,13 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU= -golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= +golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= +golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= @@ -899,8 +910,8 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= diff --git a/kroma-bindings/Makefile b/kroma-bindings/Makefile new file mode 100644 index 000000000..a41fe5832 --- /dev/null +++ b/kroma-bindings/Makefile @@ -0,0 +1,42 @@ +SHELL := /usr/bin/env bash + +pkg := bindings +monorepo-base := $(shell dirname $(realpath .)) +contracts-dir := $(monorepo-base)/packages/contracts + +all: version mkdir bindings + +version: + forge --version + abigen --version + +compile: + cd $(contracts-dir) && \ + forge clean && \ + pnpm build + +bindings: compile bindings-build + +bindings-build: + go run ./gen/main.go \ + -forge-artifacts $(contracts-dir)/forge-artifacts \ + -out ./bindings \ + -contracts ./artifacts.json \ + -package $(pkg) \ + -monorepo-base $(monorepo-base) + +lint: + golangci-lint run -E goimports,sqlclosecheck,bodyclose,asciicheck,misspell,errorlint --timeout 5m -e "errors.As" -e "errors.Is" ./... + +mkdir: + mkdir -p $(pkg) + +clean-contracts: + cd $(contracts-dir) && \ + pnpm clean + +clean: + rm -rf $(pkg) + +test: + go test ./... diff --git a/kroma-bindings/README.md b/kroma-bindings/README.md new file mode 100644 index 000000000..997236681 --- /dev/null +++ b/kroma-bindings/README.md @@ -0,0 +1,36 @@ +# kroma-bindings + +This package contains built go bindings of the smart contracts. It must be +updated after any changes to the smart contracts to ensure that the bindings are +up to date. + +The bindings include the bytecode for each contract so that go based tests +can deploy the contracts. There are also `more` files that include the deployed +bytecode as well as the storage layout. These are used to dynamically set +bytecode and storage slots in state. + +## Usage + +```bash +make +``` + +## Dependencies + +- `abigen` version 1.10.25 +- `make` + +To check the version of `abigen`, run the command `abigen --version`. + +## abigen + +The `abigen` tool is part of `go-ethereum` and can be used to build go bindings +for smart contracts. It can be installed with go using the commands: + +```bash +$ go get -u github.com/ethereum/go-ethereum +$ cd $GOPATH/src/github.com/ethereum/go-ethereum/ +$ make devtools +``` + +The geth docs for `abigen` can be found [here](https://geth.ethereum.org/docs/dapp/native-bindings). diff --git a/kroma-bindings/artifacts.json b/kroma-bindings/artifacts.json new file mode 100644 index 000000000..ab8253db0 --- /dev/null +++ b/kroma-bindings/artifacts.json @@ -0,0 +1,38 @@ +[ + "Colosseum", + "CrossDomainMessenger", + "ERC20", + "ERC721", + "GasPriceOracle", + "GovernanceToken", + "KromaMintableERC20", + "KromaMintableERC20Factory", + "KromaMintableERC721", + "KromaMintableERC721Factory", + "KromaPortal", + "L1Block", + "L1CrossDomainMessenger", + "L1ERC721Bridge", + "L1FeeVault", + "L1StandardBridge", + "L2CrossDomainMessenger", + "L2ERC721Bridge", + "L2OutputOracle", + "L2StandardBridge", + "L2ToL1MessagePasser", + "ProtocolVault", + "Proxy", + "ProxyAdmin", + "SecurityCouncil", + "SecurityCouncilToken", + "StandardBridge", + "SystemConfig", + "TimeLock", + "UpgradeGovernor", + "ValidatorPool", + "ValidatorRewardVault", + "WETH9", + "ZKMerkleTrie", + "ZKTrieHasher", + "ZKVerifier" +] diff --git a/op-bindings/bindings/colosseum.go b/kroma-bindings/bindings/colosseum.go similarity index 100% rename from op-bindings/bindings/colosseum.go rename to kroma-bindings/bindings/colosseum.go diff --git a/op-bindings/bindings/colosseum_more.go b/kroma-bindings/bindings/colosseum_more.go similarity index 96% rename from op-bindings/bindings/colosseum_more.go rename to kroma-bindings/bindings/colosseum_more.go index 4af20a76f..445aca150 100644 --- a/op-bindings/bindings/colosseum_more.go +++ b/kroma-bindings/bindings/colosseum_more.go @@ -9,7 +9,7 @@ import ( "github.com/ethereum-optimism/optimism/op-bindings/solc" ) -const ColosseumStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L1/Colosseum.sol:Colosseum\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/L1/Colosseum.sol:Colosseum\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/L1/Colosseum.sol:Colosseum\",\"label\":\"segmentsLengths\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_mapping(t_uint256,t_uint256)\"},{\"astId\":1003,\"contract\":\"contracts/L1/Colosseum.sol:Colosseum\",\"label\":\"challenges\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_mapping(t_uint256,t_mapping(t_address,t_struct(Challenge)1005_storage))\"},{\"astId\":1004,\"contract\":\"contracts/L1/Colosseum.sol:Colosseum\",\"label\":\"verifiedPublicInputs\",\"offset\":0,\"slot\":\"3\",\"type\":\"t_mapping(t_bytes32,t_bool)\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_bytes32)dyn_storage\":{\"encoding\":\"dynamic_array\",\"label\":\"bytes32[]\",\"numberOfBytes\":\"32\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_address,t_struct(Challenge)1005_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e struct Types.Challenge)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_struct(Challenge)1005_storage\"},\"t_mapping(t_bytes32,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_bool\"},\"t_mapping(t_uint256,t_mapping(t_address,t_struct(Challenge)1005_storage))\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e mapping(address =\u003e struct Types.Challenge))\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_mapping(t_address,t_struct(Challenge)1005_storage)\"},\"t_mapping(t_uint256,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_uint256\"},\"t_struct(Challenge)1005_storage\":{\"encoding\":\"inplace\",\"label\":\"struct Types.Challenge\",\"numberOfBytes\":\"160\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint64\":{\"encoding\":\"inplace\",\"label\":\"uint64\",\"numberOfBytes\":\"8\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" +const ColosseumStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L1/Colosseum.sol:Colosseum\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/L1/Colosseum.sol:Colosseum\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/L1/Colosseum.sol:Colosseum\",\"label\":\"segmentsLengths\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_mapping(t_uint256,t_uint256)\"},{\"astId\":1003,\"contract\":\"contracts/L1/Colosseum.sol:Colosseum\",\"label\":\"challenges\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_mapping(t_uint256,t_mapping(t_address,t_struct(Challenge)1005_storage))\"},{\"astId\":1004,\"contract\":\"contracts/L1/Colosseum.sol:Colosseum\",\"label\":\"verifiedPublicInputs\",\"offset\":0,\"slot\":\"3\",\"type\":\"t_mapping(t_bytes32,t_bool)\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_bytes32)dyn_storage\":{\"encoding\":\"dynamic_array\",\"label\":\"bytes32[]\",\"numberOfBytes\":\"32\",\"base\":\"t_bytes32\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_address,t_struct(Challenge)1005_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e struct Types.Challenge)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_struct(Challenge)1005_storage\"},\"t_mapping(t_bytes32,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_bool\"},\"t_mapping(t_uint256,t_mapping(t_address,t_struct(Challenge)1005_storage))\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e mapping(address =\u003e struct Types.Challenge))\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_mapping(t_address,t_struct(Challenge)1005_storage)\"},\"t_mapping(t_uint256,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_uint256\"},\"t_struct(Challenge)1005_storage\":{\"encoding\":\"inplace\",\"label\":\"struct Types.Challenge\",\"numberOfBytes\":\"160\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint64\":{\"encoding\":\"inplace\",\"label\":\"uint64\",\"numberOfBytes\":\"8\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" var ColosseumStorageLayout = new(solc.StorageLayout) diff --git a/kroma-bindings/bindings/crossdomainmessenger.go b/kroma-bindings/bindings/crossdomainmessenger.go new file mode 100644 index 000000000..da1c1cd4d --- /dev/null +++ b/kroma-bindings/bindings/crossdomainmessenger.go @@ -0,0 +1,1535 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// CrossDomainMessengerMetaData contains all meta data concerning the CrossDomainMessenger contract. +var CrossDomainMessengerMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"FailedRelayedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"RelayedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"messageNonce\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"}],\"name\":\"SentMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSAGE_VERSION\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_MESSENGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_CALL_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_RESERVED_GAS\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"}],\"name\":\"baseGas\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"failedMessages\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"relayMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"}],\"name\":\"sendMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"successfulMessages\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"xDomainMessageSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", +} + +// CrossDomainMessengerABI is the input ABI used to generate the binding from. +// Deprecated: Use CrossDomainMessengerMetaData.ABI instead. +var CrossDomainMessengerABI = CrossDomainMessengerMetaData.ABI + +// CrossDomainMessenger is an auto generated Go binding around an Ethereum contract. +type CrossDomainMessenger struct { + CrossDomainMessengerCaller // Read-only binding to the contract + CrossDomainMessengerTransactor // Write-only binding to the contract + CrossDomainMessengerFilterer // Log filterer for contract events +} + +// CrossDomainMessengerCaller is an auto generated read-only Go binding around an Ethereum contract. +type CrossDomainMessengerCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// CrossDomainMessengerTransactor is an auto generated write-only Go binding around an Ethereum contract. +type CrossDomainMessengerTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// CrossDomainMessengerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type CrossDomainMessengerFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// CrossDomainMessengerSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type CrossDomainMessengerSession struct { + Contract *CrossDomainMessenger // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// CrossDomainMessengerCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type CrossDomainMessengerCallerSession struct { + Contract *CrossDomainMessengerCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// CrossDomainMessengerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type CrossDomainMessengerTransactorSession struct { + Contract *CrossDomainMessengerTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// CrossDomainMessengerRaw is an auto generated low-level Go binding around an Ethereum contract. +type CrossDomainMessengerRaw struct { + Contract *CrossDomainMessenger // Generic contract binding to access the raw methods on +} + +// CrossDomainMessengerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type CrossDomainMessengerCallerRaw struct { + Contract *CrossDomainMessengerCaller // Generic read-only contract binding to access the raw methods on +} + +// CrossDomainMessengerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type CrossDomainMessengerTransactorRaw struct { + Contract *CrossDomainMessengerTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewCrossDomainMessenger creates a new instance of CrossDomainMessenger, bound to a specific deployed contract. +func NewCrossDomainMessenger(address common.Address, backend bind.ContractBackend) (*CrossDomainMessenger, error) { + contract, err := bindCrossDomainMessenger(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &CrossDomainMessenger{CrossDomainMessengerCaller: CrossDomainMessengerCaller{contract: contract}, CrossDomainMessengerTransactor: CrossDomainMessengerTransactor{contract: contract}, CrossDomainMessengerFilterer: CrossDomainMessengerFilterer{contract: contract}}, nil +} + +// NewCrossDomainMessengerCaller creates a new read-only instance of CrossDomainMessenger, bound to a specific deployed contract. +func NewCrossDomainMessengerCaller(address common.Address, caller bind.ContractCaller) (*CrossDomainMessengerCaller, error) { + contract, err := bindCrossDomainMessenger(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &CrossDomainMessengerCaller{contract: contract}, nil +} + +// NewCrossDomainMessengerTransactor creates a new write-only instance of CrossDomainMessenger, bound to a specific deployed contract. +func NewCrossDomainMessengerTransactor(address common.Address, transactor bind.ContractTransactor) (*CrossDomainMessengerTransactor, error) { + contract, err := bindCrossDomainMessenger(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &CrossDomainMessengerTransactor{contract: contract}, nil +} + +// NewCrossDomainMessengerFilterer creates a new log filterer instance of CrossDomainMessenger, bound to a specific deployed contract. +func NewCrossDomainMessengerFilterer(address common.Address, filterer bind.ContractFilterer) (*CrossDomainMessengerFilterer, error) { + contract, err := bindCrossDomainMessenger(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &CrossDomainMessengerFilterer{contract: contract}, nil +} + +// bindCrossDomainMessenger binds a generic wrapper to an already deployed contract. +func bindCrossDomainMessenger(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := CrossDomainMessengerMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_CrossDomainMessenger *CrossDomainMessengerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _CrossDomainMessenger.Contract.CrossDomainMessengerCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_CrossDomainMessenger *CrossDomainMessengerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CrossDomainMessenger.Contract.CrossDomainMessengerTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_CrossDomainMessenger *CrossDomainMessengerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _CrossDomainMessenger.Contract.CrossDomainMessengerTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_CrossDomainMessenger *CrossDomainMessengerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _CrossDomainMessenger.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_CrossDomainMessenger *CrossDomainMessengerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CrossDomainMessenger.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_CrossDomainMessenger *CrossDomainMessengerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _CrossDomainMessenger.Contract.contract.Transact(opts, method, params...) +} + +// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. +// +// Solidity: function MESSAGE_VERSION() view returns(uint16) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) MESSAGEVERSION(opts *bind.CallOpts) (uint16, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "MESSAGE_VERSION") + + if err != nil { + return *new(uint16), err + } + + out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) + + return out0, err + +} + +// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. +// +// Solidity: function MESSAGE_VERSION() view returns(uint16) +func (_CrossDomainMessenger *CrossDomainMessengerSession) MESSAGEVERSION() (uint16, error) { + return _CrossDomainMessenger.Contract.MESSAGEVERSION(&_CrossDomainMessenger.CallOpts) +} + +// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. +// +// Solidity: function MESSAGE_VERSION() view returns(uint16) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) MESSAGEVERSION() (uint16, error) { + return _CrossDomainMessenger.Contract.MESSAGEVERSION(&_CrossDomainMessenger.CallOpts) +} + +// MINGASCALLDATAOVERHEAD is a free data retrieval call binding the contract method 0x028f85f7. +// +// Solidity: function MIN_GAS_CALLDATA_OVERHEAD() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) MINGASCALLDATAOVERHEAD(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "MIN_GAS_CALLDATA_OVERHEAD") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// MINGASCALLDATAOVERHEAD is a free data retrieval call binding the contract method 0x028f85f7. +// +// Solidity: function MIN_GAS_CALLDATA_OVERHEAD() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerSession) MINGASCALLDATAOVERHEAD() (uint64, error) { + return _CrossDomainMessenger.Contract.MINGASCALLDATAOVERHEAD(&_CrossDomainMessenger.CallOpts) +} + +// MINGASCALLDATAOVERHEAD is a free data retrieval call binding the contract method 0x028f85f7. +// +// Solidity: function MIN_GAS_CALLDATA_OVERHEAD() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) MINGASCALLDATAOVERHEAD() (uint64, error) { + return _CrossDomainMessenger.Contract.MINGASCALLDATAOVERHEAD(&_CrossDomainMessenger.CallOpts) +} + +// MINGASDYNAMICOVERHEADDENOMINATOR is a free data retrieval call binding the contract method 0x0c568498. +// +// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) MINGASDYNAMICOVERHEADDENOMINATOR(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// MINGASDYNAMICOVERHEADDENOMINATOR is a free data retrieval call binding the contract method 0x0c568498. +// +// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerSession) MINGASDYNAMICOVERHEADDENOMINATOR() (uint64, error) { + return _CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADDENOMINATOR(&_CrossDomainMessenger.CallOpts) +} + +// MINGASDYNAMICOVERHEADDENOMINATOR is a free data retrieval call binding the contract method 0x0c568498. +// +// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) MINGASDYNAMICOVERHEADDENOMINATOR() (uint64, error) { + return _CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADDENOMINATOR(&_CrossDomainMessenger.CallOpts) +} + +// MINGASDYNAMICOVERHEADNUMERATOR is a free data retrieval call binding the contract method 0x2828d7e8. +// +// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) MINGASDYNAMICOVERHEADNUMERATOR(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// MINGASDYNAMICOVERHEADNUMERATOR is a free data retrieval call binding the contract method 0x2828d7e8. +// +// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerSession) MINGASDYNAMICOVERHEADNUMERATOR() (uint64, error) { + return _CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADNUMERATOR(&_CrossDomainMessenger.CallOpts) +} + +// MINGASDYNAMICOVERHEADNUMERATOR is a free data retrieval call binding the contract method 0x2828d7e8. +// +// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) MINGASDYNAMICOVERHEADNUMERATOR() (uint64, error) { + return _CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADNUMERATOR(&_CrossDomainMessenger.CallOpts) +} + +// OTHERMESSENGER is a free data retrieval call binding the contract method 0x9fce812c. +// +// Solidity: function OTHER_MESSENGER() view returns(address) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) OTHERMESSENGER(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "OTHER_MESSENGER") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OTHERMESSENGER is a free data retrieval call binding the contract method 0x9fce812c. +// +// Solidity: function OTHER_MESSENGER() view returns(address) +func (_CrossDomainMessenger *CrossDomainMessengerSession) OTHERMESSENGER() (common.Address, error) { + return _CrossDomainMessenger.Contract.OTHERMESSENGER(&_CrossDomainMessenger.CallOpts) +} + +// OTHERMESSENGER is a free data retrieval call binding the contract method 0x9fce812c. +// +// Solidity: function OTHER_MESSENGER() view returns(address) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) OTHERMESSENGER() (common.Address, error) { + return _CrossDomainMessenger.Contract.OTHERMESSENGER(&_CrossDomainMessenger.CallOpts) +} + +// RELAYCALLOVERHEAD is a free data retrieval call binding the contract method 0x4c1d6a69. +// +// Solidity: function RELAY_CALL_OVERHEAD() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) RELAYCALLOVERHEAD(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "RELAY_CALL_OVERHEAD") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// RELAYCALLOVERHEAD is a free data retrieval call binding the contract method 0x4c1d6a69. +// +// Solidity: function RELAY_CALL_OVERHEAD() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerSession) RELAYCALLOVERHEAD() (uint64, error) { + return _CrossDomainMessenger.Contract.RELAYCALLOVERHEAD(&_CrossDomainMessenger.CallOpts) +} + +// RELAYCALLOVERHEAD is a free data retrieval call binding the contract method 0x4c1d6a69. +// +// Solidity: function RELAY_CALL_OVERHEAD() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) RELAYCALLOVERHEAD() (uint64, error) { + return _CrossDomainMessenger.Contract.RELAYCALLOVERHEAD(&_CrossDomainMessenger.CallOpts) +} + +// RELAYCONSTANTOVERHEAD is a free data retrieval call binding the contract method 0x83a74074. +// +// Solidity: function RELAY_CONSTANT_OVERHEAD() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) RELAYCONSTANTOVERHEAD(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "RELAY_CONSTANT_OVERHEAD") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// RELAYCONSTANTOVERHEAD is a free data retrieval call binding the contract method 0x83a74074. +// +// Solidity: function RELAY_CONSTANT_OVERHEAD() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerSession) RELAYCONSTANTOVERHEAD() (uint64, error) { + return _CrossDomainMessenger.Contract.RELAYCONSTANTOVERHEAD(&_CrossDomainMessenger.CallOpts) +} + +// RELAYCONSTANTOVERHEAD is a free data retrieval call binding the contract method 0x83a74074. +// +// Solidity: function RELAY_CONSTANT_OVERHEAD() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) RELAYCONSTANTOVERHEAD() (uint64, error) { + return _CrossDomainMessenger.Contract.RELAYCONSTANTOVERHEAD(&_CrossDomainMessenger.CallOpts) +} + +// RELAYGASCHECKBUFFER is a free data retrieval call binding the contract method 0x5644cfdf. +// +// Solidity: function RELAY_GAS_CHECK_BUFFER() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) RELAYGASCHECKBUFFER(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "RELAY_GAS_CHECK_BUFFER") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// RELAYGASCHECKBUFFER is a free data retrieval call binding the contract method 0x5644cfdf. +// +// Solidity: function RELAY_GAS_CHECK_BUFFER() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerSession) RELAYGASCHECKBUFFER() (uint64, error) { + return _CrossDomainMessenger.Contract.RELAYGASCHECKBUFFER(&_CrossDomainMessenger.CallOpts) +} + +// RELAYGASCHECKBUFFER is a free data retrieval call binding the contract method 0x5644cfdf. +// +// Solidity: function RELAY_GAS_CHECK_BUFFER() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) RELAYGASCHECKBUFFER() (uint64, error) { + return _CrossDomainMessenger.Contract.RELAYGASCHECKBUFFER(&_CrossDomainMessenger.CallOpts) +} + +// RELAYRESERVEDGAS is a free data retrieval call binding the contract method 0x8cbeeef2. +// +// Solidity: function RELAY_RESERVED_GAS() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) RELAYRESERVEDGAS(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "RELAY_RESERVED_GAS") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// RELAYRESERVEDGAS is a free data retrieval call binding the contract method 0x8cbeeef2. +// +// Solidity: function RELAY_RESERVED_GAS() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerSession) RELAYRESERVEDGAS() (uint64, error) { + return _CrossDomainMessenger.Contract.RELAYRESERVEDGAS(&_CrossDomainMessenger.CallOpts) +} + +// RELAYRESERVEDGAS is a free data retrieval call binding the contract method 0x8cbeeef2. +// +// Solidity: function RELAY_RESERVED_GAS() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) RELAYRESERVEDGAS() (uint64, error) { + return _CrossDomainMessenger.Contract.RELAYRESERVEDGAS(&_CrossDomainMessenger.CallOpts) +} + +// BaseGas is a free data retrieval call binding the contract method 0xb28ade25. +// +// Solidity: function baseGas(bytes _message, uint32 _minGasLimit) pure returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) BaseGas(opts *bind.CallOpts, _message []byte, _minGasLimit uint32) (uint64, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "baseGas", _message, _minGasLimit) + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// BaseGas is a free data retrieval call binding the contract method 0xb28ade25. +// +// Solidity: function baseGas(bytes _message, uint32 _minGasLimit) pure returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerSession) BaseGas(_message []byte, _minGasLimit uint32) (uint64, error) { + return _CrossDomainMessenger.Contract.BaseGas(&_CrossDomainMessenger.CallOpts, _message, _minGasLimit) +} + +// BaseGas is a free data retrieval call binding the contract method 0xb28ade25. +// +// Solidity: function baseGas(bytes _message, uint32 _minGasLimit) pure returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) BaseGas(_message []byte, _minGasLimit uint32) (uint64, error) { + return _CrossDomainMessenger.Contract.BaseGas(&_CrossDomainMessenger.CallOpts, _message, _minGasLimit) +} + +// FailedMessages is a free data retrieval call binding the contract method 0xa4e7f8bd. +// +// Solidity: function failedMessages(bytes32 ) view returns(bool) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) FailedMessages(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "failedMessages", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// FailedMessages is a free data retrieval call binding the contract method 0xa4e7f8bd. +// +// Solidity: function failedMessages(bytes32 ) view returns(bool) +func (_CrossDomainMessenger *CrossDomainMessengerSession) FailedMessages(arg0 [32]byte) (bool, error) { + return _CrossDomainMessenger.Contract.FailedMessages(&_CrossDomainMessenger.CallOpts, arg0) +} + +// FailedMessages is a free data retrieval call binding the contract method 0xa4e7f8bd. +// +// Solidity: function failedMessages(bytes32 ) view returns(bool) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) FailedMessages(arg0 [32]byte) (bool, error) { + return _CrossDomainMessenger.Contract.FailedMessages(&_CrossDomainMessenger.CallOpts, arg0) +} + +// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. +// +// Solidity: function messageNonce() view returns(uint256) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) MessageNonce(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "messageNonce") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. +// +// Solidity: function messageNonce() view returns(uint256) +func (_CrossDomainMessenger *CrossDomainMessengerSession) MessageNonce() (*big.Int, error) { + return _CrossDomainMessenger.Contract.MessageNonce(&_CrossDomainMessenger.CallOpts) +} + +// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. +// +// Solidity: function messageNonce() view returns(uint256) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) MessageNonce() (*big.Int, error) { + return _CrossDomainMessenger.Contract.MessageNonce(&_CrossDomainMessenger.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) Paused(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "paused") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_CrossDomainMessenger *CrossDomainMessengerSession) Paused() (bool, error) { + return _CrossDomainMessenger.Contract.Paused(&_CrossDomainMessenger.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) Paused() (bool, error) { + return _CrossDomainMessenger.Contract.Paused(&_CrossDomainMessenger.CallOpts) +} + +// SuccessfulMessages is a free data retrieval call binding the contract method 0xb1b1b209. +// +// Solidity: function successfulMessages(bytes32 ) view returns(bool) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) SuccessfulMessages(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "successfulMessages", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// SuccessfulMessages is a free data retrieval call binding the contract method 0xb1b1b209. +// +// Solidity: function successfulMessages(bytes32 ) view returns(bool) +func (_CrossDomainMessenger *CrossDomainMessengerSession) SuccessfulMessages(arg0 [32]byte) (bool, error) { + return _CrossDomainMessenger.Contract.SuccessfulMessages(&_CrossDomainMessenger.CallOpts, arg0) +} + +// SuccessfulMessages is a free data retrieval call binding the contract method 0xb1b1b209. +// +// Solidity: function successfulMessages(bytes32 ) view returns(bool) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) SuccessfulMessages(arg0 [32]byte) (bool, error) { + return _CrossDomainMessenger.Contract.SuccessfulMessages(&_CrossDomainMessenger.CallOpts, arg0) +} + +// XDomainMessageSender is a free data retrieval call binding the contract method 0x6e296e45. +// +// Solidity: function xDomainMessageSender() view returns(address) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) XDomainMessageSender(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "xDomainMessageSender") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// XDomainMessageSender is a free data retrieval call binding the contract method 0x6e296e45. +// +// Solidity: function xDomainMessageSender() view returns(address) +func (_CrossDomainMessenger *CrossDomainMessengerSession) XDomainMessageSender() (common.Address, error) { + return _CrossDomainMessenger.Contract.XDomainMessageSender(&_CrossDomainMessenger.CallOpts) +} + +// XDomainMessageSender is a free data retrieval call binding the contract method 0x6e296e45. +// +// Solidity: function xDomainMessageSender() view returns(address) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) XDomainMessageSender() (common.Address, error) { + return _CrossDomainMessenger.Contract.XDomainMessageSender(&_CrossDomainMessenger.CallOpts) +} + +// RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. +// +// Solidity: function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes _message) payable returns() +func (_CrossDomainMessenger *CrossDomainMessengerTransactor) RelayMessage(opts *bind.TransactOpts, _nonce *big.Int, _sender common.Address, _target common.Address, _value *big.Int, _minGasLimit *big.Int, _message []byte) (*types.Transaction, error) { + return _CrossDomainMessenger.contract.Transact(opts, "relayMessage", _nonce, _sender, _target, _value, _minGasLimit, _message) +} + +// RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. +// +// Solidity: function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes _message) payable returns() +func (_CrossDomainMessenger *CrossDomainMessengerSession) RelayMessage(_nonce *big.Int, _sender common.Address, _target common.Address, _value *big.Int, _minGasLimit *big.Int, _message []byte) (*types.Transaction, error) { + return _CrossDomainMessenger.Contract.RelayMessage(&_CrossDomainMessenger.TransactOpts, _nonce, _sender, _target, _value, _minGasLimit, _message) +} + +// RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. +// +// Solidity: function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes _message) payable returns() +func (_CrossDomainMessenger *CrossDomainMessengerTransactorSession) RelayMessage(_nonce *big.Int, _sender common.Address, _target common.Address, _value *big.Int, _minGasLimit *big.Int, _message []byte) (*types.Transaction, error) { + return _CrossDomainMessenger.Contract.RelayMessage(&_CrossDomainMessenger.TransactOpts, _nonce, _sender, _target, _value, _minGasLimit, _message) +} + +// SendMessage is a paid mutator transaction binding the contract method 0x3dbb202b. +// +// Solidity: function sendMessage(address _target, bytes _message, uint32 _minGasLimit) payable returns() +func (_CrossDomainMessenger *CrossDomainMessengerTransactor) SendMessage(opts *bind.TransactOpts, _target common.Address, _message []byte, _minGasLimit uint32) (*types.Transaction, error) { + return _CrossDomainMessenger.contract.Transact(opts, "sendMessage", _target, _message, _minGasLimit) +} + +// SendMessage is a paid mutator transaction binding the contract method 0x3dbb202b. +// +// Solidity: function sendMessage(address _target, bytes _message, uint32 _minGasLimit) payable returns() +func (_CrossDomainMessenger *CrossDomainMessengerSession) SendMessage(_target common.Address, _message []byte, _minGasLimit uint32) (*types.Transaction, error) { + return _CrossDomainMessenger.Contract.SendMessage(&_CrossDomainMessenger.TransactOpts, _target, _message, _minGasLimit) +} + +// SendMessage is a paid mutator transaction binding the contract method 0x3dbb202b. +// +// Solidity: function sendMessage(address _target, bytes _message, uint32 _minGasLimit) payable returns() +func (_CrossDomainMessenger *CrossDomainMessengerTransactorSession) SendMessage(_target common.Address, _message []byte, _minGasLimit uint32) (*types.Transaction, error) { + return _CrossDomainMessenger.Contract.SendMessage(&_CrossDomainMessenger.TransactOpts, _target, _message, _minGasLimit) +} + +// CrossDomainMessengerFailedRelayedMessageIterator is returned from FilterFailedRelayedMessage and is used to iterate over the raw logs and unpacked data for FailedRelayedMessage events raised by the CrossDomainMessenger contract. +type CrossDomainMessengerFailedRelayedMessageIterator struct { + Event *CrossDomainMessengerFailedRelayedMessage // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *CrossDomainMessengerFailedRelayedMessageIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(CrossDomainMessengerFailedRelayedMessage) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(CrossDomainMessengerFailedRelayedMessage) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *CrossDomainMessengerFailedRelayedMessageIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *CrossDomainMessengerFailedRelayedMessageIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// CrossDomainMessengerFailedRelayedMessage represents a FailedRelayedMessage event raised by the CrossDomainMessenger contract. +type CrossDomainMessengerFailedRelayedMessage struct { + MsgHash [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterFailedRelayedMessage is a free log retrieval operation binding the contract event 0x99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f. +// +// Solidity: event FailedRelayedMessage(bytes32 indexed msgHash) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) FilterFailedRelayedMessage(opts *bind.FilterOpts, msgHash [][32]byte) (*CrossDomainMessengerFailedRelayedMessageIterator, error) { + + var msgHashRule []interface{} + for _, msgHashItem := range msgHash { + msgHashRule = append(msgHashRule, msgHashItem) + } + + logs, sub, err := _CrossDomainMessenger.contract.FilterLogs(opts, "FailedRelayedMessage", msgHashRule) + if err != nil { + return nil, err + } + return &CrossDomainMessengerFailedRelayedMessageIterator{contract: _CrossDomainMessenger.contract, event: "FailedRelayedMessage", logs: logs, sub: sub}, nil +} + +// WatchFailedRelayedMessage is a free log subscription operation binding the contract event 0x99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f. +// +// Solidity: event FailedRelayedMessage(bytes32 indexed msgHash) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) WatchFailedRelayedMessage(opts *bind.WatchOpts, sink chan<- *CrossDomainMessengerFailedRelayedMessage, msgHash [][32]byte) (event.Subscription, error) { + + var msgHashRule []interface{} + for _, msgHashItem := range msgHash { + msgHashRule = append(msgHashRule, msgHashItem) + } + + logs, sub, err := _CrossDomainMessenger.contract.WatchLogs(opts, "FailedRelayedMessage", msgHashRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(CrossDomainMessengerFailedRelayedMessage) + if err := _CrossDomainMessenger.contract.UnpackLog(event, "FailedRelayedMessage", 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 +} + +// ParseFailedRelayedMessage is a log parse operation binding the contract event 0x99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f. +// +// Solidity: event FailedRelayedMessage(bytes32 indexed msgHash) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) ParseFailedRelayedMessage(log types.Log) (*CrossDomainMessengerFailedRelayedMessage, error) { + event := new(CrossDomainMessengerFailedRelayedMessage) + if err := _CrossDomainMessenger.contract.UnpackLog(event, "FailedRelayedMessage", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// CrossDomainMessengerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the CrossDomainMessenger contract. +type CrossDomainMessengerInitializedIterator struct { + Event *CrossDomainMessengerInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *CrossDomainMessengerInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(CrossDomainMessengerInitialized) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(CrossDomainMessengerInitialized) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *CrossDomainMessengerInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *CrossDomainMessengerInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// CrossDomainMessengerInitialized represents a Initialized event raised by the CrossDomainMessenger contract. +type CrossDomainMessengerInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) FilterInitialized(opts *bind.FilterOpts) (*CrossDomainMessengerInitializedIterator, error) { + + logs, sub, err := _CrossDomainMessenger.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &CrossDomainMessengerInitializedIterator{contract: _CrossDomainMessenger.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *CrossDomainMessengerInitialized) (event.Subscription, error) { + + logs, sub, err := _CrossDomainMessenger.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: + // New log arrived, parse the event and forward to the user + event := new(CrossDomainMessengerInitialized) + if err := _CrossDomainMessenger.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 +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) ParseInitialized(log types.Log) (*CrossDomainMessengerInitialized, error) { + event := new(CrossDomainMessengerInitialized) + if err := _CrossDomainMessenger.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// CrossDomainMessengerPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the CrossDomainMessenger contract. +type CrossDomainMessengerPausedIterator struct { + Event *CrossDomainMessengerPaused // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *CrossDomainMessengerPausedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(CrossDomainMessengerPaused) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(CrossDomainMessengerPaused) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *CrossDomainMessengerPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *CrossDomainMessengerPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// CrossDomainMessengerPaused represents a Paused event raised by the CrossDomainMessenger contract. +type CrossDomainMessengerPaused struct { + Account common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPaused is a free log retrieval operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) FilterPaused(opts *bind.FilterOpts) (*CrossDomainMessengerPausedIterator, error) { + + logs, sub, err := _CrossDomainMessenger.contract.FilterLogs(opts, "Paused") + if err != nil { + return nil, err + } + return &CrossDomainMessengerPausedIterator{contract: _CrossDomainMessenger.contract, event: "Paused", logs: logs, sub: sub}, nil +} + +// WatchPaused is a free log subscription operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *CrossDomainMessengerPaused) (event.Subscription, error) { + + logs, sub, err := _CrossDomainMessenger.contract.WatchLogs(opts, "Paused") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(CrossDomainMessengerPaused) + if err := _CrossDomainMessenger.contract.UnpackLog(event, "Paused", 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 +} + +// ParsePaused is a log parse operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) ParsePaused(log types.Log) (*CrossDomainMessengerPaused, error) { + event := new(CrossDomainMessengerPaused) + if err := _CrossDomainMessenger.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// CrossDomainMessengerRelayedMessageIterator is returned from FilterRelayedMessage and is used to iterate over the raw logs and unpacked data for RelayedMessage events raised by the CrossDomainMessenger contract. +type CrossDomainMessengerRelayedMessageIterator struct { + Event *CrossDomainMessengerRelayedMessage // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *CrossDomainMessengerRelayedMessageIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(CrossDomainMessengerRelayedMessage) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(CrossDomainMessengerRelayedMessage) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *CrossDomainMessengerRelayedMessageIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *CrossDomainMessengerRelayedMessageIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// CrossDomainMessengerRelayedMessage represents a RelayedMessage event raised by the CrossDomainMessenger contract. +type CrossDomainMessengerRelayedMessage struct { + MsgHash [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRelayedMessage is a free log retrieval operation binding the contract event 0x4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c. +// +// Solidity: event RelayedMessage(bytes32 indexed msgHash) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) FilterRelayedMessage(opts *bind.FilterOpts, msgHash [][32]byte) (*CrossDomainMessengerRelayedMessageIterator, error) { + + var msgHashRule []interface{} + for _, msgHashItem := range msgHash { + msgHashRule = append(msgHashRule, msgHashItem) + } + + logs, sub, err := _CrossDomainMessenger.contract.FilterLogs(opts, "RelayedMessage", msgHashRule) + if err != nil { + return nil, err + } + return &CrossDomainMessengerRelayedMessageIterator{contract: _CrossDomainMessenger.contract, event: "RelayedMessage", logs: logs, sub: sub}, nil +} + +// WatchRelayedMessage is a free log subscription operation binding the contract event 0x4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c. +// +// Solidity: event RelayedMessage(bytes32 indexed msgHash) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) WatchRelayedMessage(opts *bind.WatchOpts, sink chan<- *CrossDomainMessengerRelayedMessage, msgHash [][32]byte) (event.Subscription, error) { + + var msgHashRule []interface{} + for _, msgHashItem := range msgHash { + msgHashRule = append(msgHashRule, msgHashItem) + } + + logs, sub, err := _CrossDomainMessenger.contract.WatchLogs(opts, "RelayedMessage", msgHashRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(CrossDomainMessengerRelayedMessage) + if err := _CrossDomainMessenger.contract.UnpackLog(event, "RelayedMessage", 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 +} + +// ParseRelayedMessage is a log parse operation binding the contract event 0x4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c. +// +// Solidity: event RelayedMessage(bytes32 indexed msgHash) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) ParseRelayedMessage(log types.Log) (*CrossDomainMessengerRelayedMessage, error) { + event := new(CrossDomainMessengerRelayedMessage) + if err := _CrossDomainMessenger.contract.UnpackLog(event, "RelayedMessage", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// CrossDomainMessengerSentMessageIterator is returned from FilterSentMessage and is used to iterate over the raw logs and unpacked data for SentMessage events raised by the CrossDomainMessenger contract. +type CrossDomainMessengerSentMessageIterator struct { + Event *CrossDomainMessengerSentMessage // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *CrossDomainMessengerSentMessageIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(CrossDomainMessengerSentMessage) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(CrossDomainMessengerSentMessage) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *CrossDomainMessengerSentMessageIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *CrossDomainMessengerSentMessageIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// CrossDomainMessengerSentMessage represents a SentMessage event raised by the CrossDomainMessenger contract. +type CrossDomainMessengerSentMessage struct { + Target common.Address + Sender common.Address + Value *big.Int + Message []byte + MessageNonce *big.Int + GasLimit *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSentMessage is a free log retrieval operation binding the contract event 0xdd28cef75ff18fb538e43317144469f339702f973eace2bc808f2acc37db310e. +// +// Solidity: event SentMessage(address indexed target, address indexed sender, uint256 value, bytes message, uint256 messageNonce, uint256 gasLimit) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) FilterSentMessage(opts *bind.FilterOpts, target []common.Address, sender []common.Address) (*CrossDomainMessengerSentMessageIterator, error) { + + var targetRule []interface{} + for _, targetItem := range target { + targetRule = append(targetRule, targetItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _CrossDomainMessenger.contract.FilterLogs(opts, "SentMessage", targetRule, senderRule) + if err != nil { + return nil, err + } + return &CrossDomainMessengerSentMessageIterator{contract: _CrossDomainMessenger.contract, event: "SentMessage", logs: logs, sub: sub}, nil +} + +// WatchSentMessage is a free log subscription operation binding the contract event 0xdd28cef75ff18fb538e43317144469f339702f973eace2bc808f2acc37db310e. +// +// Solidity: event SentMessage(address indexed target, address indexed sender, uint256 value, bytes message, uint256 messageNonce, uint256 gasLimit) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) WatchSentMessage(opts *bind.WatchOpts, sink chan<- *CrossDomainMessengerSentMessage, target []common.Address, sender []common.Address) (event.Subscription, error) { + + var targetRule []interface{} + for _, targetItem := range target { + targetRule = append(targetRule, targetItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _CrossDomainMessenger.contract.WatchLogs(opts, "SentMessage", targetRule, senderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(CrossDomainMessengerSentMessage) + if err := _CrossDomainMessenger.contract.UnpackLog(event, "SentMessage", 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 +} + +// ParseSentMessage is a log parse operation binding the contract event 0xdd28cef75ff18fb538e43317144469f339702f973eace2bc808f2acc37db310e. +// +// Solidity: event SentMessage(address indexed target, address indexed sender, uint256 value, bytes message, uint256 messageNonce, uint256 gasLimit) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) ParseSentMessage(log types.Log) (*CrossDomainMessengerSentMessage, error) { + event := new(CrossDomainMessengerSentMessage) + if err := _CrossDomainMessenger.contract.UnpackLog(event, "SentMessage", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// CrossDomainMessengerUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the CrossDomainMessenger contract. +type CrossDomainMessengerUnpausedIterator struct { + Event *CrossDomainMessengerUnpaused // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *CrossDomainMessengerUnpausedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(CrossDomainMessengerUnpaused) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(CrossDomainMessengerUnpaused) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *CrossDomainMessengerUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *CrossDomainMessengerUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// CrossDomainMessengerUnpaused represents a Unpaused event raised by the CrossDomainMessenger contract. +type CrossDomainMessengerUnpaused struct { + Account common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUnpaused is a free log retrieval operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) FilterUnpaused(opts *bind.FilterOpts) (*CrossDomainMessengerUnpausedIterator, error) { + + logs, sub, err := _CrossDomainMessenger.contract.FilterLogs(opts, "Unpaused") + if err != nil { + return nil, err + } + return &CrossDomainMessengerUnpausedIterator{contract: _CrossDomainMessenger.contract, event: "Unpaused", logs: logs, sub: sub}, nil +} + +// WatchUnpaused is a free log subscription operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *CrossDomainMessengerUnpaused) (event.Subscription, error) { + + logs, sub, err := _CrossDomainMessenger.contract.WatchLogs(opts, "Unpaused") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(CrossDomainMessengerUnpaused) + if err := _CrossDomainMessenger.contract.UnpackLog(event, "Unpaused", 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 +} + +// ParseUnpaused is a log parse operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) ParseUnpaused(log types.Log) (*CrossDomainMessengerUnpaused, error) { + event := new(CrossDomainMessengerUnpaused) + if err := _CrossDomainMessenger.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/kroma-bindings/bindings/crossdomainmessenger_more.go b/kroma-bindings/bindings/crossdomainmessenger_more.go new file mode 100644 index 000000000..e751e3ad6 --- /dev/null +++ b/kroma-bindings/bindings/crossdomainmessenger_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const CrossDomainMessengerStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/universal/CrossDomainMessenger.sol:CrossDomainMessenger\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/universal/CrossDomainMessenger.sol:CrossDomainMessenger\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/universal/CrossDomainMessenger.sol:CrossDomainMessenger\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)50_storage\"},{\"astId\":1003,\"contract\":\"contracts/universal/CrossDomainMessenger.sol:CrossDomainMessenger\",\"label\":\"_paused\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_bool\"},{\"astId\":1004,\"contract\":\"contracts/universal/CrossDomainMessenger.sol:CrossDomainMessenger\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_array(t_uint256)49_storage\"},{\"astId\":1005,\"contract\":\"contracts/universal/CrossDomainMessenger.sol:CrossDomainMessenger\",\"label\":\"successfulMessages\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1006,\"contract\":\"contracts/universal/CrossDomainMessenger.sol:CrossDomainMessenger\",\"label\":\"xDomainMsgSender\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_address\"},{\"astId\":1007,\"contract\":\"contracts/universal/CrossDomainMessenger.sol:CrossDomainMessenger\",\"label\":\"msgNonce\",\"offset\":0,\"slot\":\"103\",\"type\":\"t_uint240\"},{\"astId\":1008,\"contract\":\"contracts/universal/CrossDomainMessenger.sol:CrossDomainMessenger\",\"label\":\"failedMessages\",\"offset\":0,\"slot\":\"104\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1009,\"contract\":\"contracts/universal/CrossDomainMessenger.sol:CrossDomainMessenger\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"105\",\"type\":\"t_array(t_uint256)45_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)45_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[45]\",\"numberOfBytes\":\"1440\",\"base\":\"t_uint256\"},\"t_array(t_uint256)49_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\",\"base\":\"t_uint256\"},\"t_array(t_uint256)50_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\",\"base\":\"t_uint256\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_bytes32,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_bool\"},\"t_uint240\":{\"encoding\":\"inplace\",\"label\":\"uint240\",\"numberOfBytes\":\"30\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" + +var CrossDomainMessengerStorageLayout = new(solc.StorageLayout) + +var CrossDomainMessengerDeployedBin = "0x" + +func init() { + if err := json.Unmarshal([]byte(CrossDomainMessengerStorageLayoutJSON), CrossDomainMessengerStorageLayout); err != nil { + panic(err) + } + + layouts["CrossDomainMessenger"] = CrossDomainMessengerStorageLayout + deployedBytecodes["CrossDomainMessenger"] = CrossDomainMessengerDeployedBin +} diff --git a/kroma-bindings/bindings/erc20.go b/kroma-bindings/bindings/erc20.go new file mode 100644 index 000000000..9422372d7 --- /dev/null +++ b/kroma-bindings/bindings/erc20.go @@ -0,0 +1,802 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// ERC20MetaData contains all meta data concerning the ERC20 contract. +var ERC20MetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60806040523480156200001157600080fd5b5060405162000df838038062000df8833981016040819052620000349162000127565b600362000042838262000220565b50600462000051828262000220565b505050620002ec565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200008257600080fd5b81516001600160401b03808211156200009f576200009f6200005a565b604051601f8301601f19908116603f01168101908282118183101715620000ca57620000ca6200005a565b81604052838152602092508683858801011115620000e757600080fd5b600091505b838210156200010b5785820183015181830184015290820190620000ec565b838211156200011d5760008385830101525b9695505050505050565b600080604083850312156200013b57600080fd5b82516001600160401b03808211156200015357600080fd5b620001618683870162000070565b935060208501519150808211156200017857600080fd5b50620001878582860162000070565b9150509250929050565b600181811c90821680620001a657607f821691505b602082108103620001c757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021b57600081815260208120601f850160051c81016020861015620001f65750805b601f850160051c820191505b81811015620002175782815560010162000202565b5050505b505050565b81516001600160401b038111156200023c576200023c6200005a565b62000254816200024d845462000191565b84620001cd565b602080601f8311600181146200028c5760008415620002735750858301515b600019600386901b1c1916600185901b17855562000217565b600085815260208120601f198616915b82811015620002bd578886015182559484019460019091019084016200029c565b5085821015620002dc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610afc80620002fc6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80633950935111610081578063a457c2d71161005b578063a457c2d714610194578063a9059cbb146101a7578063dd62ed3e146101ba57600080fd5b8063395093511461014357806370a082311461015657806395d89b411461018c57600080fd5b806318160ddd116100b257806318160ddd1461010f57806323b872dd14610121578063313ce5671461013457600080fd5b806306fdde03146100ce578063095ea7b3146100ec575b600080fd5b6100d6610200565b6040516100e39190610906565b60405180910390f35b6100ff6100fa3660046109a2565b610292565b60405190151581526020016100e3565b6002545b6040519081526020016100e3565b6100ff61012f3660046109cc565b6102aa565b604051601281526020016100e3565b6100ff6101513660046109a2565b6102ce565b610113610164366004610a08565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100d661031a565b6100ff6101a23660046109a2565b610329565b6100ff6101b53660046109a2565b6103ff565b6101136101c8366004610a2a565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461020f90610a5d565b80601f016020809104026020016040519081016040528092919081815260200182805461023b90610a5d565b80156102885780601f1061025d57610100808354040283529160200191610288565b820191906000526020600020905b81548152906001019060200180831161026b57829003601f168201915b5050505050905090565b6000336102a081858561040d565b5060019392505050565b6000336102b88582856105c0565b6102c3858585610697565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906102a09082908690610315908790610ab0565b61040d565b60606004805461020f90610a5d565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156103f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6102c3828686840361040d565b6000336102a0818585610697565b73ffffffffffffffffffffffffffffffffffffffff83166104af576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff8216610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146106915781811015610684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103e9565b610691848484840361040d565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831661073a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff82166107dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610691565b600060208083528351808285015260005b8181101561093357858101830151858201604001528201610917565b81811115610945576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461099d57600080fd5b919050565b600080604083850312156109b557600080fd5b6109be83610979565b946020939093013593505050565b6000806000606084860312156109e157600080fd5b6109ea84610979565b92506109f860208501610979565b9150604084013590509250925092565b600060208284031215610a1a57600080fd5b610a2382610979565b9392505050565b60008060408385031215610a3d57600080fd5b610a4683610979565b9150610a5460208401610979565b90509250929050565b600181811c90821680610a7157607f821691505b602082108103610aaa577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008219821115610aea577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fea164736f6c634300080f000a", +} + +// ERC20ABI is the input ABI used to generate the binding from. +// Deprecated: Use ERC20MetaData.ABI instead. +var ERC20ABI = ERC20MetaData.ABI + +// ERC20Bin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ERC20MetaData.Bin instead. +var ERC20Bin = ERC20MetaData.Bin + +// DeployERC20 deploys a new Ethereum contract, binding an instance of ERC20 to it. +func DeployERC20(auth *bind.TransactOpts, backend bind.ContractBackend, name_ string, symbol_ string) (common.Address, *types.Transaction, *ERC20, error) { + parsed, err := ERC20MetaData.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(ERC20Bin), backend, name_, symbol_) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ERC20{ERC20Caller: ERC20Caller{contract: contract}, ERC20Transactor: ERC20Transactor{contract: contract}, ERC20Filterer: ERC20Filterer{contract: contract}}, nil +} + +// ERC20 is an auto generated Go binding around an Ethereum contract. +type ERC20 struct { + ERC20Caller // Read-only binding to the contract + ERC20Transactor // Write-only binding to the contract + ERC20Filterer // Log filterer for contract events +} + +// ERC20Caller is an auto generated read-only Go binding around an Ethereum contract. +type ERC20Caller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ERC20Transactor is an auto generated write-only Go binding around an Ethereum contract. +type ERC20Transactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ERC20Filterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ERC20Filterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ERC20Session is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ERC20Session struct { + Contract *ERC20 // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ERC20CallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ERC20CallerSession struct { + Contract *ERC20Caller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ERC20TransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ERC20TransactorSession struct { + Contract *ERC20Transactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ERC20Raw is an auto generated low-level Go binding around an Ethereum contract. +type ERC20Raw struct { + Contract *ERC20 // Generic contract binding to access the raw methods on +} + +// ERC20CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ERC20CallerRaw struct { + Contract *ERC20Caller // Generic read-only contract binding to access the raw methods on +} + +// ERC20TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ERC20TransactorRaw struct { + Contract *ERC20Transactor // Generic write-only contract binding to access the raw methods on +} + +// NewERC20 creates a new instance of ERC20, bound to a specific deployed contract. +func NewERC20(address common.Address, backend bind.ContractBackend) (*ERC20, error) { + contract, err := bindERC20(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ERC20{ERC20Caller: ERC20Caller{contract: contract}, ERC20Transactor: ERC20Transactor{contract: contract}, ERC20Filterer: ERC20Filterer{contract: contract}}, nil +} + +// NewERC20Caller creates a new read-only instance of ERC20, bound to a specific deployed contract. +func NewERC20Caller(address common.Address, caller bind.ContractCaller) (*ERC20Caller, error) { + contract, err := bindERC20(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ERC20Caller{contract: contract}, nil +} + +// NewERC20Transactor creates a new write-only instance of ERC20, bound to a specific deployed contract. +func NewERC20Transactor(address common.Address, transactor bind.ContractTransactor) (*ERC20Transactor, error) { + contract, err := bindERC20(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ERC20Transactor{contract: contract}, nil +} + +// NewERC20Filterer creates a new log filterer instance of ERC20, bound to a specific deployed contract. +func NewERC20Filterer(address common.Address, filterer bind.ContractFilterer) (*ERC20Filterer, error) { + contract, err := bindERC20(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ERC20Filterer{contract: contract}, nil +} + +// bindERC20 binds a generic wrapper to an already deployed contract. +func bindERC20(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ERC20MetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ERC20 *ERC20Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ERC20.Contract.ERC20Caller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ERC20 *ERC20Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20.Contract.ERC20Transactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ERC20 *ERC20Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ERC20.Contract.ERC20Transactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ERC20 *ERC20CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ERC20.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ERC20 *ERC20TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ERC20 *ERC20TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ERC20.Contract.contract.Transact(opts, method, params...) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_ERC20 *ERC20Caller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) { + var out []interface{} + err := _ERC20.contract.Call(opts, &out, "allowance", owner, spender) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_ERC20 *ERC20Session) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _ERC20.Contract.Allowance(&_ERC20.CallOpts, owner, spender) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_ERC20 *ERC20CallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _ERC20.Contract.Allowance(&_ERC20.CallOpts, owner, spender) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_ERC20 *ERC20Caller) BalanceOf(opts *bind.CallOpts, account common.Address) (*big.Int, error) { + var out []interface{} + err := _ERC20.contract.Call(opts, &out, "balanceOf", account) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_ERC20 *ERC20Session) BalanceOf(account common.Address) (*big.Int, error) { + return _ERC20.Contract.BalanceOf(&_ERC20.CallOpts, account) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_ERC20 *ERC20CallerSession) BalanceOf(account common.Address) (*big.Int, error) { + return _ERC20.Contract.BalanceOf(&_ERC20.CallOpts, account) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_ERC20 *ERC20Caller) Decimals(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _ERC20.contract.Call(opts, &out, "decimals") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_ERC20 *ERC20Session) Decimals() (uint8, error) { + return _ERC20.Contract.Decimals(&_ERC20.CallOpts) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_ERC20 *ERC20CallerSession) Decimals() (uint8, error) { + return _ERC20.Contract.Decimals(&_ERC20.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_ERC20 *ERC20Caller) Name(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ERC20.contract.Call(opts, &out, "name") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_ERC20 *ERC20Session) Name() (string, error) { + return _ERC20.Contract.Name(&_ERC20.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_ERC20 *ERC20CallerSession) Name() (string, error) { + return _ERC20.Contract.Name(&_ERC20.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_ERC20 *ERC20Caller) Symbol(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ERC20.contract.Call(opts, &out, "symbol") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_ERC20 *ERC20Session) Symbol() (string, error) { + return _ERC20.Contract.Symbol(&_ERC20.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_ERC20 *ERC20CallerSession) Symbol() (string, error) { + return _ERC20.Contract.Symbol(&_ERC20.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_ERC20 *ERC20Caller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ERC20.contract.Call(opts, &out, "totalSupply") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_ERC20 *ERC20Session) TotalSupply() (*big.Int, error) { + return _ERC20.Contract.TotalSupply(&_ERC20.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_ERC20 *ERC20CallerSession) TotalSupply() (*big.Int, error) { + return _ERC20.Contract.TotalSupply(&_ERC20.CallOpts) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_ERC20 *ERC20Transactor) Approve(opts *bind.TransactOpts, spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _ERC20.contract.Transact(opts, "approve", spender, amount) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_ERC20 *ERC20Session) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _ERC20.Contract.Approve(&_ERC20.TransactOpts, spender, amount) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_ERC20 *ERC20TransactorSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _ERC20.Contract.Approve(&_ERC20.TransactOpts, spender, amount) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) +func (_ERC20 *ERC20Transactor) DecreaseAllowance(opts *bind.TransactOpts, spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _ERC20.contract.Transact(opts, "decreaseAllowance", spender, subtractedValue) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) +func (_ERC20 *ERC20Session) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _ERC20.Contract.DecreaseAllowance(&_ERC20.TransactOpts, spender, subtractedValue) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) +func (_ERC20 *ERC20TransactorSession) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _ERC20.Contract.DecreaseAllowance(&_ERC20.TransactOpts, spender, subtractedValue) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_ERC20 *ERC20Transactor) IncreaseAllowance(opts *bind.TransactOpts, spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _ERC20.contract.Transact(opts, "increaseAllowance", spender, addedValue) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_ERC20 *ERC20Session) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _ERC20.Contract.IncreaseAllowance(&_ERC20.TransactOpts, spender, addedValue) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_ERC20 *ERC20TransactorSession) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _ERC20.Contract.IncreaseAllowance(&_ERC20.TransactOpts, spender, addedValue) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_ERC20 *ERC20Transactor) Transfer(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _ERC20.contract.Transact(opts, "transfer", to, amount) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_ERC20 *ERC20Session) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _ERC20.Contract.Transfer(&_ERC20.TransactOpts, to, amount) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_ERC20 *ERC20TransactorSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _ERC20.Contract.Transfer(&_ERC20.TransactOpts, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_ERC20 *ERC20Transactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _ERC20.contract.Transact(opts, "transferFrom", from, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_ERC20 *ERC20Session) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _ERC20.Contract.TransferFrom(&_ERC20.TransactOpts, from, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_ERC20 *ERC20TransactorSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _ERC20.Contract.TransferFrom(&_ERC20.TransactOpts, from, to, amount) +} + +// ERC20ApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the ERC20 contract. +type ERC20ApprovalIterator struct { + Event *ERC20Approval // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20ApprovalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20Approval) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20Approval) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20ApprovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20ApprovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20Approval represents a Approval event raised by the ERC20 contract. +type ERC20Approval struct { + Owner common.Address + Spender common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_ERC20 *ERC20Filterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*ERC20ApprovalIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _ERC20.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return &ERC20ApprovalIterator{contract: _ERC20.contract, event: "Approval", logs: logs, sub: sub}, nil +} + +// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_ERC20 *ERC20Filterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *ERC20Approval, owner []common.Address, spender []common.Address) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _ERC20.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20Approval) + if err := _ERC20.contract.UnpackLog(event, "Approval", 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 +} + +// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_ERC20 *ERC20Filterer) ParseApproval(log types.Log) (*ERC20Approval, error) { + event := new(ERC20Approval) + if err := _ERC20.contract.UnpackLog(event, "Approval", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC20TransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the ERC20 contract. +type ERC20TransferIterator struct { + Event *ERC20Transfer // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20TransferIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20Transfer) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20Transfer) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20TransferIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20TransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20Transfer represents a Transfer event raised by the ERC20 contract. +type ERC20Transfer struct { + From common.Address + To common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_ERC20 *ERC20Filterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ERC20TransferIterator, 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 := _ERC20.contract.FilterLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return &ERC20TransferIterator{contract: _ERC20.contract, event: "Transfer", logs: logs, sub: sub}, nil +} + +// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_ERC20 *ERC20Filterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *ERC20Transfer, 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 := _ERC20.contract.WatchLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20Transfer) + if err := _ERC20.contract.UnpackLog(event, "Transfer", 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 +} + +// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_ERC20 *ERC20Filterer) ParseTransfer(log types.Log) (*ERC20Transfer, error) { + event := new(ERC20Transfer) + if err := _ERC20.contract.UnpackLog(event, "Transfer", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/kroma-bindings/bindings/erc20_more.go b/kroma-bindings/bindings/erc20_more.go new file mode 100644 index 000000000..d077ab215 --- /dev/null +++ b/kroma-bindings/bindings/erc20_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const ERC20StorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20\",\"label\":\"_balances\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_mapping(t_address,t_uint256)\"},{\"astId\":1001,\"contract\":\"node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20\",\"label\":\"_allowances\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_mapping(t_address,t_mapping(t_address,t_uint256))\"},{\"astId\":1002,\"contract\":\"node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20\",\"label\":\"_totalSupply\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_uint256\"},{\"astId\":1003,\"contract\":\"node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20\",\"label\":\"_name\",\"offset\":0,\"slot\":\"3\",\"type\":\"t_string_storage\"},{\"astId\":1004,\"contract\":\"node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20\",\"label\":\"_symbol\",\"offset\":0,\"slot\":\"4\",\"type\":\"t_string_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_mapping(t_address,t_mapping(t_address,t_uint256))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(address =\u003e uint256))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_address,t_uint256)\"},\"t_mapping(t_address,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint256\"},\"t_string_storage\":{\"encoding\":\"bytes\",\"label\":\"string\",\"numberOfBytes\":\"32\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"}}}" + +var ERC20StorageLayout = new(solc.StorageLayout) + +var ERC20DeployedBin = "0x608060405234801561001057600080fd5b50600436106100c95760003560e01c80633950935111610081578063a457c2d71161005b578063a457c2d714610194578063a9059cbb146101a7578063dd62ed3e146101ba57600080fd5b8063395093511461014357806370a082311461015657806395d89b411461018c57600080fd5b806318160ddd116100b257806318160ddd1461010f57806323b872dd14610121578063313ce5671461013457600080fd5b806306fdde03146100ce578063095ea7b3146100ec575b600080fd5b6100d6610200565b6040516100e39190610906565b60405180910390f35b6100ff6100fa3660046109a2565b610292565b60405190151581526020016100e3565b6002545b6040519081526020016100e3565b6100ff61012f3660046109cc565b6102aa565b604051601281526020016100e3565b6100ff6101513660046109a2565b6102ce565b610113610164366004610a08565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100d661031a565b6100ff6101a23660046109a2565b610329565b6100ff6101b53660046109a2565b6103ff565b6101136101c8366004610a2a565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461020f90610a5d565b80601f016020809104026020016040519081016040528092919081815260200182805461023b90610a5d565b80156102885780601f1061025d57610100808354040283529160200191610288565b820191906000526020600020905b81548152906001019060200180831161026b57829003601f168201915b5050505050905090565b6000336102a081858561040d565b5060019392505050565b6000336102b88582856105c0565b6102c3858585610697565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906102a09082908690610315908790610ab0565b61040d565b60606004805461020f90610a5d565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156103f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6102c3828686840361040d565b6000336102a0818585610697565b73ffffffffffffffffffffffffffffffffffffffff83166104af576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff8216610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146106915781811015610684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103e9565b610691848484840361040d565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831661073a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff82166107dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610691565b600060208083528351808285015260005b8181101561093357858101830151858201604001528201610917565b81811115610945576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461099d57600080fd5b919050565b600080604083850312156109b557600080fd5b6109be83610979565b946020939093013593505050565b6000806000606084860312156109e157600080fd5b6109ea84610979565b92506109f860208501610979565b9150604084013590509250925092565b600060208284031215610a1a57600080fd5b610a2382610979565b9392505050565b60008060408385031215610a3d57600080fd5b610a4683610979565b9150610a5460208401610979565b90509250929050565b600181811c90821680610a7157607f821691505b602082108103610aaa577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008219821115610aea577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(ERC20StorageLayoutJSON), ERC20StorageLayout); err != nil { + panic(err) + } + + layouts["ERC20"] = ERC20StorageLayout + deployedBytecodes["ERC20"] = ERC20DeployedBin +} diff --git a/kroma-bindings/bindings/erc721.go b/kroma-bindings/bindings/erc721.go new file mode 100644 index 000000000..919498a07 --- /dev/null +++ b/kroma-bindings/bindings/erc721.go @@ -0,0 +1,1034 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// ERC721MetaData contains all meta data concerning the ERC721 contract. +var ERC721MetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60806040523480156200001157600080fd5b50604051620018f8380380620018f8833981016040819052620000349162000127565b600062000042838262000220565b50600162000051828262000220565b505050620002ec565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200008257600080fd5b81516001600160401b03808211156200009f576200009f6200005a565b604051601f8301601f19908116603f01168101908282118183101715620000ca57620000ca6200005a565b81604052838152602092508683858801011115620000e757600080fd5b600091505b838210156200010b5785820183015181830184015290820190620000ec565b838211156200011d5760008385830101525b9695505050505050565b600080604083850312156200013b57600080fd5b82516001600160401b03808211156200015357600080fd5b620001618683870162000070565b935060208501519150808211156200017857600080fd5b50620001878582860162000070565b9150509250929050565b600181811c90821680620001a657607f821691505b602082108103620001c757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021b57600081815260208120601f850160051c81016020861015620001f65750805b601f850160051c820191505b81811015620002175782815560010162000202565b5050505b505050565b81516001600160401b038111156200023c576200023c6200005a565b62000254816200024d845462000191565b84620001cd565b602080601f8311600181146200028c5760008415620002735750858301515b600019600386901b1c1916600185901b17855562000217565b600085815260208120601f198616915b82811015620002bd578886015182559484019460019091019084016200029c565b5085821015620002dc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6115fc80620002fc6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80636352211e1161008c578063a22cb46511610066578063a22cb465146101d0578063b88d4fde146101e3578063c87b56dd146101f6578063e985e9c51461020957600080fd5b80636352211e1461019457806370a08231146101a757806395d89b41146101c857600080fd5b8063095ea7b3116100bd578063095ea7b31461015957806323b872dd1461016e57806342842e0e1461018157600080fd5b806301ffc9a7146100e457806306fdde031461010c578063081812fc14610121575b600080fd5b6100f76100f2366004611206565b610252565b60405190151581526020015b60405180910390f35b610114610337565b6040516101039190611299565b61013461012f3660046112ac565b6103c9565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610103565b61016c6101673660046112ee565b6103fd565b005b61016c61017c366004611318565b61055a565b61016c61018f366004611318565b6105e1565b6101346101a23660046112ac565b6105fc565b6101ba6101b5366004611354565b61066e565b604051908152602001610103565b610114610722565b61016c6101de36600461136f565b610731565b61016c6101f13660046113da565b610740565b6101146102043660046112ac565b6107ce565b6100f76102173660046114d4565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806102e557507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061033157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461034690611507565b80601f016020809104026020016040519081016040528092919081815260200182805461037290611507565b80156103bf5780601f10610394576101008083540402835291602001916103bf565b820191906000526020600020905b8154815290600101906020018083116103a257829003601f168201915b5050505050905090565b60006103d482610842565b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6000610408826105fc565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036104b05760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff821614806104d957506104d98133610217565b61054b5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016104a7565b61055583836108b6565b505050565b6105643382610956565b6105d65760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016104a7565b610555838383610a16565b61055583838360405180602001604052806000815250610740565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16806103315760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016104a7565b600073ffffffffffffffffffffffffffffffffffffffff82166106f95760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e6572000000000000000000000000000000000000000000000060648201526084016104a7565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b60606001805461034690611507565b61073c338383610cc3565b5050565b61074a3383610956565b6107bc5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016104a7565b6107c884848484610dd6565b50505050565b60606107d982610842565b60006107f060408051602081019091526000815290565b90506000815111610810576040518060200160405280600081525061083b565b8061081a84610e5f565b60405160200161082b92919061155a565b6040516020818303038152906040525b9392505050565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff166108b35760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016104a7565b50565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190610910826105fc565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610962836105fc565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806109d0575073ffffffffffffffffffffffffffffffffffffffff80821660009081526005602090815260408083209388168352929052205460ff165b80610a0e57508373ffffffffffffffffffffffffffffffffffffffff166109f6846103c9565b73ffffffffffffffffffffffffffffffffffffffff16145b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16610a36826105fc565b73ffffffffffffffffffffffffffffffffffffffff1614610abf5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016104a7565b73ffffffffffffffffffffffffffffffffffffffff8216610b475760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016104a7565b8273ffffffffffffffffffffffffffffffffffffffff16610b67826105fc565b73ffffffffffffffffffffffffffffffffffffffff1614610bf05760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016104a7565b600081815260046020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff8781168086526003855283862080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d3e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016104a7565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b610de1848484610a16565b610ded84848484610f1d565b6107c85760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016104a7565b60606000610e6c836110f6565b600101905060008167ffffffffffffffff811115610e8c57610e8c6113ab565b6040519080825280601f01601f191660200182016040528015610eb6576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084610ec057509392505050565b600073ffffffffffffffffffffffffffffffffffffffff84163b156110eb576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290610f94903390899088908890600401611589565b6020604051808303816000875af1925050508015610fed575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610fea918101906115d2565b60015b6110a0573d80801561101b576040519150601f19603f3d011682016040523d82523d6000602084013e611020565b606091505b5080516000036110985760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016104a7565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050610a0e565b506001949350505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061113f577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061116b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061118957662386f26fc10000830492506010015b6305f5e10083106111a1576305f5e100830492506008015b61271083106111b557612710830492506004015b606483106111c7576064830492506002015b600a83106103315760010192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146108b357600080fd5b60006020828403121561121857600080fd5b813561083b816111d8565b60005b8381101561123e578181015183820152602001611226565b838111156107c85750506000910152565b60008151808452611267816020860160208601611223565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061083b602083018461124f565b6000602082840312156112be57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112e957600080fd5b919050565b6000806040838503121561130157600080fd5b61130a836112c5565b946020939093013593505050565b60008060006060848603121561132d57600080fd5b611336846112c5565b9250611344602085016112c5565b9150604084013590509250925092565b60006020828403121561136657600080fd5b61083b826112c5565b6000806040838503121561138257600080fd5b61138b836112c5565b9150602083013580151581146113a057600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156113f057600080fd5b6113f9856112c5565b9350611407602086016112c5565b925060408501359150606085013567ffffffffffffffff8082111561142b57600080fd5b818701915087601f83011261143f57600080fd5b813581811115611451576114516113ab565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611497576114976113ab565b816040528281528a60208487010111156114b057600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600080604083850312156114e757600080fd5b6114f0836112c5565b91506114fe602084016112c5565b90509250929050565b600181811c9082168061151b57607f821691505b602082108103611554577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000835161156c818460208801611223565b835190830190611580818360208801611223565b01949350505050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526115c8608083018461124f565b9695505050505050565b6000602082840312156115e457600080fd5b815161083b816111d856fea164736f6c634300080f000a", +} + +// ERC721ABI is the input ABI used to generate the binding from. +// Deprecated: Use ERC721MetaData.ABI instead. +var ERC721ABI = ERC721MetaData.ABI + +// ERC721Bin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ERC721MetaData.Bin instead. +var ERC721Bin = ERC721MetaData.Bin + +// DeployERC721 deploys a new Ethereum contract, binding an instance of ERC721 to it. +func DeployERC721(auth *bind.TransactOpts, backend bind.ContractBackend, name_ string, symbol_ string) (common.Address, *types.Transaction, *ERC721, error) { + parsed, err := ERC721MetaData.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(ERC721Bin), backend, name_, symbol_) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ERC721{ERC721Caller: ERC721Caller{contract: contract}, ERC721Transactor: ERC721Transactor{contract: contract}, ERC721Filterer: ERC721Filterer{contract: contract}}, nil +} + +// ERC721 is an auto generated Go binding around an Ethereum contract. +type ERC721 struct { + ERC721Caller // Read-only binding to the contract + ERC721Transactor // Write-only binding to the contract + ERC721Filterer // Log filterer for contract events +} + +// ERC721Caller is an auto generated read-only Go binding around an Ethereum contract. +type ERC721Caller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ERC721Transactor is an auto generated write-only Go binding around an Ethereum contract. +type ERC721Transactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ERC721Filterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ERC721Filterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ERC721Session is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ERC721Session struct { + Contract *ERC721 // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ERC721CallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ERC721CallerSession struct { + Contract *ERC721Caller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ERC721TransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ERC721TransactorSession struct { + Contract *ERC721Transactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ERC721Raw is an auto generated low-level Go binding around an Ethereum contract. +type ERC721Raw struct { + Contract *ERC721 // Generic contract binding to access the raw methods on +} + +// ERC721CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ERC721CallerRaw struct { + Contract *ERC721Caller // Generic read-only contract binding to access the raw methods on +} + +// ERC721TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ERC721TransactorRaw struct { + Contract *ERC721Transactor // Generic write-only contract binding to access the raw methods on +} + +// NewERC721 creates a new instance of ERC721, bound to a specific deployed contract. +func NewERC721(address common.Address, backend bind.ContractBackend) (*ERC721, error) { + contract, err := bindERC721(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ERC721{ERC721Caller: ERC721Caller{contract: contract}, ERC721Transactor: ERC721Transactor{contract: contract}, ERC721Filterer: ERC721Filterer{contract: contract}}, nil +} + +// NewERC721Caller creates a new read-only instance of ERC721, bound to a specific deployed contract. +func NewERC721Caller(address common.Address, caller bind.ContractCaller) (*ERC721Caller, error) { + contract, err := bindERC721(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ERC721Caller{contract: contract}, nil +} + +// NewERC721Transactor creates a new write-only instance of ERC721, bound to a specific deployed contract. +func NewERC721Transactor(address common.Address, transactor bind.ContractTransactor) (*ERC721Transactor, error) { + contract, err := bindERC721(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ERC721Transactor{contract: contract}, nil +} + +// NewERC721Filterer creates a new log filterer instance of ERC721, bound to a specific deployed contract. +func NewERC721Filterer(address common.Address, filterer bind.ContractFilterer) (*ERC721Filterer, error) { + contract, err := bindERC721(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ERC721Filterer{contract: contract}, nil +} + +// bindERC721 binds a generic wrapper to an already deployed contract. +func bindERC721(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ERC721MetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ERC721 *ERC721Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ERC721.Contract.ERC721Caller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ERC721 *ERC721Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC721.Contract.ERC721Transactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ERC721 *ERC721Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ERC721.Contract.ERC721Transactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ERC721 *ERC721CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ERC721.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ERC721 *ERC721TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC721.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ERC721 *ERC721TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ERC721.Contract.contract.Transact(opts, method, params...) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address owner) view returns(uint256) +func (_ERC721 *ERC721Caller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) { + var out []interface{} + err := _ERC721.contract.Call(opts, &out, "balanceOf", owner) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address owner) view returns(uint256) +func (_ERC721 *ERC721Session) BalanceOf(owner common.Address) (*big.Int, error) { + return _ERC721.Contract.BalanceOf(&_ERC721.CallOpts, owner) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address owner) view returns(uint256) +func (_ERC721 *ERC721CallerSession) BalanceOf(owner common.Address) (*big.Int, error) { + return _ERC721.Contract.BalanceOf(&_ERC721.CallOpts, owner) +} + +// GetApproved is a free data retrieval call binding the contract method 0x081812fc. +// +// Solidity: function getApproved(uint256 tokenId) view returns(address) +func (_ERC721 *ERC721Caller) GetApproved(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) { + var out []interface{} + err := _ERC721.contract.Call(opts, &out, "getApproved", tokenId) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetApproved is a free data retrieval call binding the contract method 0x081812fc. +// +// Solidity: function getApproved(uint256 tokenId) view returns(address) +func (_ERC721 *ERC721Session) GetApproved(tokenId *big.Int) (common.Address, error) { + return _ERC721.Contract.GetApproved(&_ERC721.CallOpts, tokenId) +} + +// GetApproved is a free data retrieval call binding the contract method 0x081812fc. +// +// Solidity: function getApproved(uint256 tokenId) view returns(address) +func (_ERC721 *ERC721CallerSession) GetApproved(tokenId *big.Int) (common.Address, error) { + return _ERC721.Contract.GetApproved(&_ERC721.CallOpts, tokenId) +} + +// IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5. +// +// Solidity: function isApprovedForAll(address owner, address operator) view returns(bool) +func (_ERC721 *ERC721Caller) IsApprovedForAll(opts *bind.CallOpts, owner common.Address, operator common.Address) (bool, error) { + var out []interface{} + err := _ERC721.contract.Call(opts, &out, "isApprovedForAll", owner, operator) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5. +// +// Solidity: function isApprovedForAll(address owner, address operator) view returns(bool) +func (_ERC721 *ERC721Session) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) { + return _ERC721.Contract.IsApprovedForAll(&_ERC721.CallOpts, owner, operator) +} + +// IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5. +// +// Solidity: function isApprovedForAll(address owner, address operator) view returns(bool) +func (_ERC721 *ERC721CallerSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) { + return _ERC721.Contract.IsApprovedForAll(&_ERC721.CallOpts, owner, operator) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_ERC721 *ERC721Caller) Name(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ERC721.contract.Call(opts, &out, "name") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_ERC721 *ERC721Session) Name() (string, error) { + return _ERC721.Contract.Name(&_ERC721.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_ERC721 *ERC721CallerSession) Name() (string, error) { + return _ERC721.Contract.Name(&_ERC721.CallOpts) +} + +// OwnerOf is a free data retrieval call binding the contract method 0x6352211e. +// +// Solidity: function ownerOf(uint256 tokenId) view returns(address) +func (_ERC721 *ERC721Caller) OwnerOf(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) { + var out []interface{} + err := _ERC721.contract.Call(opts, &out, "ownerOf", tokenId) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OwnerOf is a free data retrieval call binding the contract method 0x6352211e. +// +// Solidity: function ownerOf(uint256 tokenId) view returns(address) +func (_ERC721 *ERC721Session) OwnerOf(tokenId *big.Int) (common.Address, error) { + return _ERC721.Contract.OwnerOf(&_ERC721.CallOpts, tokenId) +} + +// OwnerOf is a free data retrieval call binding the contract method 0x6352211e. +// +// Solidity: function ownerOf(uint256 tokenId) view returns(address) +func (_ERC721 *ERC721CallerSession) OwnerOf(tokenId *big.Int) (common.Address, error) { + return _ERC721.Contract.OwnerOf(&_ERC721.CallOpts, tokenId) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_ERC721 *ERC721Caller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _ERC721.contract.Call(opts, &out, "supportsInterface", interfaceId) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_ERC721 *ERC721Session) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _ERC721.Contract.SupportsInterface(&_ERC721.CallOpts, interfaceId) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_ERC721 *ERC721CallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _ERC721.Contract.SupportsInterface(&_ERC721.CallOpts, interfaceId) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_ERC721 *ERC721Caller) Symbol(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ERC721.contract.Call(opts, &out, "symbol") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_ERC721 *ERC721Session) Symbol() (string, error) { + return _ERC721.Contract.Symbol(&_ERC721.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_ERC721 *ERC721CallerSession) Symbol() (string, error) { + return _ERC721.Contract.Symbol(&_ERC721.CallOpts) +} + +// TokenURI is a free data retrieval call binding the contract method 0xc87b56dd. +// +// Solidity: function tokenURI(uint256 tokenId) view returns(string) +func (_ERC721 *ERC721Caller) TokenURI(opts *bind.CallOpts, tokenId *big.Int) (string, error) { + var out []interface{} + err := _ERC721.contract.Call(opts, &out, "tokenURI", tokenId) + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// TokenURI is a free data retrieval call binding the contract method 0xc87b56dd. +// +// Solidity: function tokenURI(uint256 tokenId) view returns(string) +func (_ERC721 *ERC721Session) TokenURI(tokenId *big.Int) (string, error) { + return _ERC721.Contract.TokenURI(&_ERC721.CallOpts, tokenId) +} + +// TokenURI is a free data retrieval call binding the contract method 0xc87b56dd. +// +// Solidity: function tokenURI(uint256 tokenId) view returns(string) +func (_ERC721 *ERC721CallerSession) TokenURI(tokenId *big.Int) (string, error) { + return _ERC721.Contract.TokenURI(&_ERC721.CallOpts, tokenId) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address to, uint256 tokenId) returns() +func (_ERC721 *ERC721Transactor) Approve(opts *bind.TransactOpts, to common.Address, tokenId *big.Int) (*types.Transaction, error) { + return _ERC721.contract.Transact(opts, "approve", to, tokenId) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address to, uint256 tokenId) returns() +func (_ERC721 *ERC721Session) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) { + return _ERC721.Contract.Approve(&_ERC721.TransactOpts, to, tokenId) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address to, uint256 tokenId) returns() +func (_ERC721 *ERC721TransactorSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) { + return _ERC721.Contract.Approve(&_ERC721.TransactOpts, to, tokenId) +} + +// SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e. +// +// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns() +func (_ERC721 *ERC721Transactor) SafeTransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) { + return _ERC721.contract.Transact(opts, "safeTransferFrom", from, to, tokenId) +} + +// SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e. +// +// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns() +func (_ERC721 *ERC721Session) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) { + return _ERC721.Contract.SafeTransferFrom(&_ERC721.TransactOpts, from, to, tokenId) +} + +// SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e. +// +// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns() +func (_ERC721 *ERC721TransactorSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) { + return _ERC721.Contract.SafeTransferFrom(&_ERC721.TransactOpts, from, to, tokenId) +} + +// SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde. +// +// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns() +func (_ERC721 *ERC721Transactor) SafeTransferFrom0(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) { + return _ERC721.contract.Transact(opts, "safeTransferFrom0", from, to, tokenId, data) +} + +// SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde. +// +// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns() +func (_ERC721 *ERC721Session) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) { + return _ERC721.Contract.SafeTransferFrom0(&_ERC721.TransactOpts, from, to, tokenId, data) +} + +// SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde. +// +// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns() +func (_ERC721 *ERC721TransactorSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) { + return _ERC721.Contract.SafeTransferFrom0(&_ERC721.TransactOpts, from, to, tokenId, data) +} + +// SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465. +// +// Solidity: function setApprovalForAll(address operator, bool approved) returns() +func (_ERC721 *ERC721Transactor) SetApprovalForAll(opts *bind.TransactOpts, operator common.Address, approved bool) (*types.Transaction, error) { + return _ERC721.contract.Transact(opts, "setApprovalForAll", operator, approved) +} + +// SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465. +// +// Solidity: function setApprovalForAll(address operator, bool approved) returns() +func (_ERC721 *ERC721Session) SetApprovalForAll(operator common.Address, approved bool) (*types.Transaction, error) { + return _ERC721.Contract.SetApprovalForAll(&_ERC721.TransactOpts, operator, approved) +} + +// SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465. +// +// Solidity: function setApprovalForAll(address operator, bool approved) returns() +func (_ERC721 *ERC721TransactorSession) SetApprovalForAll(operator common.Address, approved bool) (*types.Transaction, error) { + return _ERC721.Contract.SetApprovalForAll(&_ERC721.TransactOpts, operator, approved) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 tokenId) returns() +func (_ERC721 *ERC721Transactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) { + return _ERC721.contract.Transact(opts, "transferFrom", from, to, tokenId) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 tokenId) returns() +func (_ERC721 *ERC721Session) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) { + return _ERC721.Contract.TransferFrom(&_ERC721.TransactOpts, from, to, tokenId) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 tokenId) returns() +func (_ERC721 *ERC721TransactorSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) { + return _ERC721.Contract.TransferFrom(&_ERC721.TransactOpts, from, to, tokenId) +} + +// ERC721ApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the ERC721 contract. +type ERC721ApprovalIterator struct { + Event *ERC721Approval // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC721ApprovalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC721Approval) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC721Approval) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC721ApprovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC721ApprovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC721Approval represents a Approval event raised by the ERC721 contract. +type ERC721Approval struct { + Owner common.Address + Approved common.Address + TokenId *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId) +func (_ERC721 *ERC721Filterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, approved []common.Address, tokenId []*big.Int) (*ERC721ApprovalIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var approvedRule []interface{} + for _, approvedItem := range approved { + approvedRule = append(approvedRule, approvedItem) + } + var tokenIdRule []interface{} + for _, tokenIdItem := range tokenId { + tokenIdRule = append(tokenIdRule, tokenIdItem) + } + + logs, sub, err := _ERC721.contract.FilterLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule) + if err != nil { + return nil, err + } + return &ERC721ApprovalIterator{contract: _ERC721.contract, event: "Approval", logs: logs, sub: sub}, nil +} + +// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId) +func (_ERC721 *ERC721Filterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *ERC721Approval, owner []common.Address, approved []common.Address, tokenId []*big.Int) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var approvedRule []interface{} + for _, approvedItem := range approved { + approvedRule = append(approvedRule, approvedItem) + } + var tokenIdRule []interface{} + for _, tokenIdItem := range tokenId { + tokenIdRule = append(tokenIdRule, tokenIdItem) + } + + logs, sub, err := _ERC721.contract.WatchLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC721Approval) + if err := _ERC721.contract.UnpackLog(event, "Approval", 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 +} + +// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId) +func (_ERC721 *ERC721Filterer) ParseApproval(log types.Log) (*ERC721Approval, error) { + event := new(ERC721Approval) + if err := _ERC721.contract.UnpackLog(event, "Approval", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC721ApprovalForAllIterator is returned from FilterApprovalForAll and is used to iterate over the raw logs and unpacked data for ApprovalForAll events raised by the ERC721 contract. +type ERC721ApprovalForAllIterator struct { + Event *ERC721ApprovalForAll // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC721ApprovalForAllIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC721ApprovalForAll) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC721ApprovalForAll) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC721ApprovalForAllIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC721ApprovalForAllIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC721ApprovalForAll represents a ApprovalForAll event raised by the ERC721 contract. +type ERC721ApprovalForAll struct { + Owner common.Address + Operator common.Address + Approved bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApprovalForAll is a free log retrieval operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31. +// +// Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved) +func (_ERC721 *ERC721Filterer) FilterApprovalForAll(opts *bind.FilterOpts, owner []common.Address, operator []common.Address) (*ERC721ApprovalForAllIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _ERC721.contract.FilterLogs(opts, "ApprovalForAll", ownerRule, operatorRule) + if err != nil { + return nil, err + } + return &ERC721ApprovalForAllIterator{contract: _ERC721.contract, event: "ApprovalForAll", logs: logs, sub: sub}, nil +} + +// WatchApprovalForAll is a free log subscription operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31. +// +// Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved) +func (_ERC721 *ERC721Filterer) WatchApprovalForAll(opts *bind.WatchOpts, sink chan<- *ERC721ApprovalForAll, owner []common.Address, operator []common.Address) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _ERC721.contract.WatchLogs(opts, "ApprovalForAll", ownerRule, operatorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC721ApprovalForAll) + if err := _ERC721.contract.UnpackLog(event, "ApprovalForAll", 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 +} + +// ParseApprovalForAll is a log parse operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31. +// +// Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved) +func (_ERC721 *ERC721Filterer) ParseApprovalForAll(log types.Log) (*ERC721ApprovalForAll, error) { + event := new(ERC721ApprovalForAll) + if err := _ERC721.contract.UnpackLog(event, "ApprovalForAll", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ERC721TransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the ERC721 contract. +type ERC721TransferIterator struct { + Event *ERC721Transfer // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC721TransferIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC721Transfer) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC721Transfer) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC721TransferIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC721TransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC721Transfer represents a Transfer event raised by the ERC721 contract. +type ERC721Transfer struct { + From common.Address + To common.Address + TokenId *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId) +func (_ERC721 *ERC721Filterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address, tokenId []*big.Int) (*ERC721TransferIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var tokenIdRule []interface{} + for _, tokenIdItem := range tokenId { + tokenIdRule = append(tokenIdRule, tokenIdItem) + } + + logs, sub, err := _ERC721.contract.FilterLogs(opts, "Transfer", fromRule, toRule, tokenIdRule) + if err != nil { + return nil, err + } + return &ERC721TransferIterator{contract: _ERC721.contract, event: "Transfer", logs: logs, sub: sub}, nil +} + +// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId) +func (_ERC721 *ERC721Filterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *ERC721Transfer, from []common.Address, to []common.Address, tokenId []*big.Int) (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) + } + var tokenIdRule []interface{} + for _, tokenIdItem := range tokenId { + tokenIdRule = append(tokenIdRule, tokenIdItem) + } + + logs, sub, err := _ERC721.contract.WatchLogs(opts, "Transfer", fromRule, toRule, tokenIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC721Transfer) + if err := _ERC721.contract.UnpackLog(event, "Transfer", 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 +} + +// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId) +func (_ERC721 *ERC721Filterer) ParseTransfer(log types.Log) (*ERC721Transfer, error) { + event := new(ERC721Transfer) + if err := _ERC721.contract.UnpackLog(event, "Transfer", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/kroma-bindings/bindings/erc721_more.go b/kroma-bindings/bindings/erc721_more.go new file mode 100644 index 000000000..39b51faed --- /dev/null +++ b/kroma-bindings/bindings/erc721_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const ERC721StorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"node_modules/@openzeppelin/contracts/token/ERC721/ERC721.sol:ERC721\",\"label\":\"_name\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_string_storage\"},{\"astId\":1001,\"contract\":\"node_modules/@openzeppelin/contracts/token/ERC721/ERC721.sol:ERC721\",\"label\":\"_symbol\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_string_storage\"},{\"astId\":1002,\"contract\":\"node_modules/@openzeppelin/contracts/token/ERC721/ERC721.sol:ERC721\",\"label\":\"_owners\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_mapping(t_uint256,t_address)\"},{\"astId\":1003,\"contract\":\"node_modules/@openzeppelin/contracts/token/ERC721/ERC721.sol:ERC721\",\"label\":\"_balances\",\"offset\":0,\"slot\":\"3\",\"type\":\"t_mapping(t_address,t_uint256)\"},{\"astId\":1004,\"contract\":\"node_modules/@openzeppelin/contracts/token/ERC721/ERC721.sol:ERC721\",\"label\":\"_tokenApprovals\",\"offset\":0,\"slot\":\"4\",\"type\":\"t_mapping(t_uint256,t_address)\"},{\"astId\":1005,\"contract\":\"node_modules/@openzeppelin/contracts/token/ERC721/ERC721.sol:ERC721\",\"label\":\"_operatorApprovals\",\"offset\":0,\"slot\":\"5\",\"type\":\"t_mapping(t_address,t_mapping(t_address,t_bool))\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_mapping(t_address,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_bool\"},\"t_mapping(t_address,t_mapping(t_address,t_bool))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(address =\u003e bool))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_address,t_bool)\"},\"t_mapping(t_address,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint256\"},\"t_mapping(t_uint256,t_address)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e address)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_address\"},\"t_string_storage\":{\"encoding\":\"bytes\",\"label\":\"string\",\"numberOfBytes\":\"32\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"}}}" + +var ERC721StorageLayout = new(solc.StorageLayout) + +var ERC721DeployedBin = "0x608060405234801561001057600080fd5b50600436106100df5760003560e01c80636352211e1161008c578063a22cb46511610066578063a22cb465146101d0578063b88d4fde146101e3578063c87b56dd146101f6578063e985e9c51461020957600080fd5b80636352211e1461019457806370a08231146101a757806395d89b41146101c857600080fd5b8063095ea7b3116100bd578063095ea7b31461015957806323b872dd1461016e57806342842e0e1461018157600080fd5b806301ffc9a7146100e457806306fdde031461010c578063081812fc14610121575b600080fd5b6100f76100f2366004611206565b610252565b60405190151581526020015b60405180910390f35b610114610337565b6040516101039190611299565b61013461012f3660046112ac565b6103c9565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610103565b61016c6101673660046112ee565b6103fd565b005b61016c61017c366004611318565b61055a565b61016c61018f366004611318565b6105e1565b6101346101a23660046112ac565b6105fc565b6101ba6101b5366004611354565b61066e565b604051908152602001610103565b610114610722565b61016c6101de36600461136f565b610731565b61016c6101f13660046113da565b610740565b6101146102043660046112ac565b6107ce565b6100f76102173660046114d4565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806102e557507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061033157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461034690611507565b80601f016020809104026020016040519081016040528092919081815260200182805461037290611507565b80156103bf5780601f10610394576101008083540402835291602001916103bf565b820191906000526020600020905b8154815290600101906020018083116103a257829003601f168201915b5050505050905090565b60006103d482610842565b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6000610408826105fc565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036104b05760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff821614806104d957506104d98133610217565b61054b5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016104a7565b61055583836108b6565b505050565b6105643382610956565b6105d65760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016104a7565b610555838383610a16565b61055583838360405180602001604052806000815250610740565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16806103315760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016104a7565b600073ffffffffffffffffffffffffffffffffffffffff82166106f95760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e6572000000000000000000000000000000000000000000000060648201526084016104a7565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b60606001805461034690611507565b61073c338383610cc3565b5050565b61074a3383610956565b6107bc5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016104a7565b6107c884848484610dd6565b50505050565b60606107d982610842565b60006107f060408051602081019091526000815290565b90506000815111610810576040518060200160405280600081525061083b565b8061081a84610e5f565b60405160200161082b92919061155a565b6040516020818303038152906040525b9392505050565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff166108b35760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016104a7565b50565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190610910826105fc565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610962836105fc565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806109d0575073ffffffffffffffffffffffffffffffffffffffff80821660009081526005602090815260408083209388168352929052205460ff165b80610a0e57508373ffffffffffffffffffffffffffffffffffffffff166109f6846103c9565b73ffffffffffffffffffffffffffffffffffffffff16145b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16610a36826105fc565b73ffffffffffffffffffffffffffffffffffffffff1614610abf5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016104a7565b73ffffffffffffffffffffffffffffffffffffffff8216610b475760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016104a7565b8273ffffffffffffffffffffffffffffffffffffffff16610b67826105fc565b73ffffffffffffffffffffffffffffffffffffffff1614610bf05760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016104a7565b600081815260046020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff8781168086526003855283862080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d3e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016104a7565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b610de1848484610a16565b610ded84848484610f1d565b6107c85760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016104a7565b60606000610e6c836110f6565b600101905060008167ffffffffffffffff811115610e8c57610e8c6113ab565b6040519080825280601f01601f191660200182016040528015610eb6576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084610ec057509392505050565b600073ffffffffffffffffffffffffffffffffffffffff84163b156110eb576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290610f94903390899088908890600401611589565b6020604051808303816000875af1925050508015610fed575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610fea918101906115d2565b60015b6110a0573d80801561101b576040519150601f19603f3d011682016040523d82523d6000602084013e611020565b606091505b5080516000036110985760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016104a7565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050610a0e565b506001949350505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061113f577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061116b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061118957662386f26fc10000830492506010015b6305f5e10083106111a1576305f5e100830492506008015b61271083106111b557612710830492506004015b606483106111c7576064830492506002015b600a83106103315760010192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146108b357600080fd5b60006020828403121561121857600080fd5b813561083b816111d8565b60005b8381101561123e578181015183820152602001611226565b838111156107c85750506000910152565b60008151808452611267816020860160208601611223565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061083b602083018461124f565b6000602082840312156112be57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112e957600080fd5b919050565b6000806040838503121561130157600080fd5b61130a836112c5565b946020939093013593505050565b60008060006060848603121561132d57600080fd5b611336846112c5565b9250611344602085016112c5565b9150604084013590509250925092565b60006020828403121561136657600080fd5b61083b826112c5565b6000806040838503121561138257600080fd5b61138b836112c5565b9150602083013580151581146113a057600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156113f057600080fd5b6113f9856112c5565b9350611407602086016112c5565b925060408501359150606085013567ffffffffffffffff8082111561142b57600080fd5b818701915087601f83011261143f57600080fd5b813581811115611451576114516113ab565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611497576114976113ab565b816040528281528a60208487010111156114b057600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600080604083850312156114e757600080fd5b6114f0836112c5565b91506114fe602084016112c5565b90509250929050565b600181811c9082168061151b57607f821691505b602082108103611554577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000835161156c818460208801611223565b835190830190611580818360208801611223565b01949350505050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526115c8608083018461124f565b9695505050505050565b6000602082840312156115e457600080fd5b815161083b816111d856fea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(ERC721StorageLayoutJSON), ERC721StorageLayout); err != nil { + panic(err) + } + + layouts["ERC721"] = ERC721StorageLayout + deployedBytecodes["ERC721"] = ERC721DeployedBin +} diff --git a/kroma-bindings/bindings/gaspriceoracle.go b/kroma-bindings/bindings/gaspriceoracle.go new file mode 100644 index 000000000..cebe77c87 --- /dev/null +++ b/kroma-bindings/bindings/gaspriceoracle.go @@ -0,0 +1,482 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// GasPriceOracleMetaData contains all meta data concerning the GasPriceOracle contract. +var GasPriceOracleMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"DECIMALS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"getL1Fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"getL1GasUsed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1BaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"overhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60e060405234801561001057600080fd5b5060016080819052600060a081905260c081905280610a1f61004a823960006102c1015260006102980152600061026f0152610a1f6000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c806354fd4d5011610076578063de26c4a11161005b578063de26c4a114610101578063f45e65d814610114578063fe173b97146100fb57600080fd5b806354fd4d50146100e65780636ef25c3a146100fb57600080fd5b80630c18c162146100a85780632e0f2625146100c357806349948e0e146100cb578063519b4bd3146100de575b600080fd5b6100b061011c565b6040519081526020015b60405180910390f35b6100b0600681565b6100b06100d93660046105da565b6101a6565b6100b0610207565b6100ee610268565b6040516100ba91906106d9565b486100b0565b6100b061010f3660046105da565b61030b565b6100b06103a9565b600073420000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16638b239f736040518163ffffffff1660e01b8152600401602060405180830381865afa15801561017d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a1919061072a565b905090565b6000806101b28361030b565b905060006101be610207565b6101c89083610772565b905060006101d86006600a6108cf565b905060006101e46103a9565b6101ee9084610772565b905060006101fc83836108e2565b979650505050505050565b600073420000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16635cf249696040518163ffffffff1660e01b8152600401602060405180830381865afa15801561017d573d6000803e3d6000fd5b60606102937f000000000000000000000000000000000000000000000000000000000000000061040a565b6102bc7f000000000000000000000000000000000000000000000000000000000000000061040a565b6102e57f000000000000000000000000000000000000000000000000000000000000000061040a565b6040516020016102f79392919061091d565b604051602081830303815290604052905090565b80516000908190815b8181101561038e5784818151811061032e5761032e610993565b01602001517fff000000000000000000000000000000000000000000000000000000000000001660000361036e576103676004846109c2565b925061037c565b6103796010846109c2565b92505b80610386816109da565b915050610314565b5061039761011c565b6103a190836109c2565b949350505050565b600073420000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16639e8c49666040518163ffffffff1660e01b8152600401602060405180830381865afa15801561017d573d6000803e3d6000fd5b60606000610417836104c8565b600101905060008167ffffffffffffffff811115610437576104376105ab565b6040519080825280601f01601f191660200182016040528015610461576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461046b57509392505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610511577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061053d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061055b57662386f26fc10000830492506010015b6305f5e1008310610573576305f5e100830492506008015b612710831061058757612710830492506004015b60648310610599576064830492506002015b600a83106105a5576001015b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156105ec57600080fd5b813567ffffffffffffffff8082111561060457600080fd5b818401915084601f83011261061857600080fd5b81358181111561062a5761062a6105ab565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610670576106706105ab565b8160405282815287602084870101111561068957600080fd5b826020860160208301376000928101602001929092525095945050505050565b60005b838110156106c45781810151838201526020016106ac565b838111156106d3576000848401525b50505050565b60208152600082518060208401526106f88160408501602087016106a9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60006020828403121561073c57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156107aa576107aa610743565b500290565b600181815b8085111561080857817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156107ee576107ee610743565b808516156107fb57918102915b93841c93908002906107b4565b509250929050565b60008261081f575060016105a5565b8161082c575060006105a5565b8160018114610842576002811461084c57610868565b60019150506105a5565b60ff84111561085d5761085d610743565b50506001821b6105a5565b5060208310610133831016604e8410600b841016171561088b575081810a6105a5565b61089583836107af565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156108c7576108c7610743565b029392505050565b60006108db8383610810565b9392505050565b600082610918577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000845161092f8184602089016106a9565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161096b816001850160208a016106a9565b600192019182015283516109868160028401602088016106a9565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082198211156109d5576109d5610743565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610a0b57610a0b610743565b506001019056fea164736f6c634300080f000a", +} + +// GasPriceOracleABI is the input ABI used to generate the binding from. +// Deprecated: Use GasPriceOracleMetaData.ABI instead. +var GasPriceOracleABI = GasPriceOracleMetaData.ABI + +// GasPriceOracleBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use GasPriceOracleMetaData.Bin instead. +var GasPriceOracleBin = GasPriceOracleMetaData.Bin + +// DeployGasPriceOracle deploys a new Ethereum contract, binding an instance of GasPriceOracle to it. +func DeployGasPriceOracle(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *GasPriceOracle, error) { + parsed, err := GasPriceOracleMetaData.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(GasPriceOracleBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &GasPriceOracle{GasPriceOracleCaller: GasPriceOracleCaller{contract: contract}, GasPriceOracleTransactor: GasPriceOracleTransactor{contract: contract}, GasPriceOracleFilterer: GasPriceOracleFilterer{contract: contract}}, nil +} + +// GasPriceOracle is an auto generated Go binding around an Ethereum contract. +type GasPriceOracle struct { + GasPriceOracleCaller // Read-only binding to the contract + GasPriceOracleTransactor // Write-only binding to the contract + GasPriceOracleFilterer // Log filterer for contract events +} + +// GasPriceOracleCaller is an auto generated read-only Go binding around an Ethereum contract. +type GasPriceOracleCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// GasPriceOracleTransactor is an auto generated write-only Go binding around an Ethereum contract. +type GasPriceOracleTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// GasPriceOracleFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type GasPriceOracleFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// GasPriceOracleSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type GasPriceOracleSession struct { + Contract *GasPriceOracle // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// GasPriceOracleCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type GasPriceOracleCallerSession struct { + Contract *GasPriceOracleCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// GasPriceOracleTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type GasPriceOracleTransactorSession struct { + Contract *GasPriceOracleTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// GasPriceOracleRaw is an auto generated low-level Go binding around an Ethereum contract. +type GasPriceOracleRaw struct { + Contract *GasPriceOracle // Generic contract binding to access the raw methods on +} + +// GasPriceOracleCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type GasPriceOracleCallerRaw struct { + Contract *GasPriceOracleCaller // Generic read-only contract binding to access the raw methods on +} + +// GasPriceOracleTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type GasPriceOracleTransactorRaw struct { + Contract *GasPriceOracleTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewGasPriceOracle creates a new instance of GasPriceOracle, bound to a specific deployed contract. +func NewGasPriceOracle(address common.Address, backend bind.ContractBackend) (*GasPriceOracle, error) { + contract, err := bindGasPriceOracle(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &GasPriceOracle{GasPriceOracleCaller: GasPriceOracleCaller{contract: contract}, GasPriceOracleTransactor: GasPriceOracleTransactor{contract: contract}, GasPriceOracleFilterer: GasPriceOracleFilterer{contract: contract}}, nil +} + +// NewGasPriceOracleCaller creates a new read-only instance of GasPriceOracle, bound to a specific deployed contract. +func NewGasPriceOracleCaller(address common.Address, caller bind.ContractCaller) (*GasPriceOracleCaller, error) { + contract, err := bindGasPriceOracle(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &GasPriceOracleCaller{contract: contract}, nil +} + +// NewGasPriceOracleTransactor creates a new write-only instance of GasPriceOracle, bound to a specific deployed contract. +func NewGasPriceOracleTransactor(address common.Address, transactor bind.ContractTransactor) (*GasPriceOracleTransactor, error) { + contract, err := bindGasPriceOracle(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &GasPriceOracleTransactor{contract: contract}, nil +} + +// NewGasPriceOracleFilterer creates a new log filterer instance of GasPriceOracle, bound to a specific deployed contract. +func NewGasPriceOracleFilterer(address common.Address, filterer bind.ContractFilterer) (*GasPriceOracleFilterer, error) { + contract, err := bindGasPriceOracle(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &GasPriceOracleFilterer{contract: contract}, nil +} + +// bindGasPriceOracle binds a generic wrapper to an already deployed contract. +func bindGasPriceOracle(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := GasPriceOracleMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_GasPriceOracle *GasPriceOracleRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _GasPriceOracle.Contract.GasPriceOracleCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_GasPriceOracle *GasPriceOracleRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GasPriceOracle.Contract.GasPriceOracleTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_GasPriceOracle *GasPriceOracleRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _GasPriceOracle.Contract.GasPriceOracleTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_GasPriceOracle *GasPriceOracleCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _GasPriceOracle.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_GasPriceOracle *GasPriceOracleTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GasPriceOracle.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_GasPriceOracle *GasPriceOracleTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _GasPriceOracle.Contract.contract.Transact(opts, method, params...) +} + +// DECIMALS is a free data retrieval call binding the contract method 0x2e0f2625. +// +// Solidity: function DECIMALS() view returns(uint256) +func (_GasPriceOracle *GasPriceOracleCaller) DECIMALS(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _GasPriceOracle.contract.Call(opts, &out, "DECIMALS") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// DECIMALS is a free data retrieval call binding the contract method 0x2e0f2625. +// +// Solidity: function DECIMALS() view returns(uint256) +func (_GasPriceOracle *GasPriceOracleSession) DECIMALS() (*big.Int, error) { + return _GasPriceOracle.Contract.DECIMALS(&_GasPriceOracle.CallOpts) +} + +// DECIMALS is a free data retrieval call binding the contract method 0x2e0f2625. +// +// Solidity: function DECIMALS() view returns(uint256) +func (_GasPriceOracle *GasPriceOracleCallerSession) DECIMALS() (*big.Int, error) { + return _GasPriceOracle.Contract.DECIMALS(&_GasPriceOracle.CallOpts) +} + +// BaseFee is a free data retrieval call binding the contract method 0x6ef25c3a. +// +// Solidity: function baseFee() view returns(uint256) +func (_GasPriceOracle *GasPriceOracleCaller) BaseFee(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _GasPriceOracle.contract.Call(opts, &out, "baseFee") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// BaseFee is a free data retrieval call binding the contract method 0x6ef25c3a. +// +// Solidity: function baseFee() view returns(uint256) +func (_GasPriceOracle *GasPriceOracleSession) BaseFee() (*big.Int, error) { + return _GasPriceOracle.Contract.BaseFee(&_GasPriceOracle.CallOpts) +} + +// BaseFee is a free data retrieval call binding the contract method 0x6ef25c3a. +// +// Solidity: function baseFee() view returns(uint256) +func (_GasPriceOracle *GasPriceOracleCallerSession) BaseFee() (*big.Int, error) { + return _GasPriceOracle.Contract.BaseFee(&_GasPriceOracle.CallOpts) +} + +// GasPrice is a free data retrieval call binding the contract method 0xfe173b97. +// +// Solidity: function gasPrice() view returns(uint256) +func (_GasPriceOracle *GasPriceOracleCaller) GasPrice(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _GasPriceOracle.contract.Call(opts, &out, "gasPrice") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GasPrice is a free data retrieval call binding the contract method 0xfe173b97. +// +// Solidity: function gasPrice() view returns(uint256) +func (_GasPriceOracle *GasPriceOracleSession) GasPrice() (*big.Int, error) { + return _GasPriceOracle.Contract.GasPrice(&_GasPriceOracle.CallOpts) +} + +// GasPrice is a free data retrieval call binding the contract method 0xfe173b97. +// +// Solidity: function gasPrice() view returns(uint256) +func (_GasPriceOracle *GasPriceOracleCallerSession) GasPrice() (*big.Int, error) { + return _GasPriceOracle.Contract.GasPrice(&_GasPriceOracle.CallOpts) +} + +// GetL1Fee is a free data retrieval call binding the contract method 0x49948e0e. +// +// Solidity: function getL1Fee(bytes _data) view returns(uint256) +func (_GasPriceOracle *GasPriceOracleCaller) GetL1Fee(opts *bind.CallOpts, _data []byte) (*big.Int, error) { + var out []interface{} + err := _GasPriceOracle.contract.Call(opts, &out, "getL1Fee", _data) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetL1Fee is a free data retrieval call binding the contract method 0x49948e0e. +// +// Solidity: function getL1Fee(bytes _data) view returns(uint256) +func (_GasPriceOracle *GasPriceOracleSession) GetL1Fee(_data []byte) (*big.Int, error) { + return _GasPriceOracle.Contract.GetL1Fee(&_GasPriceOracle.CallOpts, _data) +} + +// GetL1Fee is a free data retrieval call binding the contract method 0x49948e0e. +// +// Solidity: function getL1Fee(bytes _data) view returns(uint256) +func (_GasPriceOracle *GasPriceOracleCallerSession) GetL1Fee(_data []byte) (*big.Int, error) { + return _GasPriceOracle.Contract.GetL1Fee(&_GasPriceOracle.CallOpts, _data) +} + +// GetL1GasUsed is a free data retrieval call binding the contract method 0xde26c4a1. +// +// Solidity: function getL1GasUsed(bytes _data) view returns(uint256) +func (_GasPriceOracle *GasPriceOracleCaller) GetL1GasUsed(opts *bind.CallOpts, _data []byte) (*big.Int, error) { + var out []interface{} + err := _GasPriceOracle.contract.Call(opts, &out, "getL1GasUsed", _data) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetL1GasUsed is a free data retrieval call binding the contract method 0xde26c4a1. +// +// Solidity: function getL1GasUsed(bytes _data) view returns(uint256) +func (_GasPriceOracle *GasPriceOracleSession) GetL1GasUsed(_data []byte) (*big.Int, error) { + return _GasPriceOracle.Contract.GetL1GasUsed(&_GasPriceOracle.CallOpts, _data) +} + +// GetL1GasUsed is a free data retrieval call binding the contract method 0xde26c4a1. +// +// Solidity: function getL1GasUsed(bytes _data) view returns(uint256) +func (_GasPriceOracle *GasPriceOracleCallerSession) GetL1GasUsed(_data []byte) (*big.Int, error) { + return _GasPriceOracle.Contract.GetL1GasUsed(&_GasPriceOracle.CallOpts, _data) +} + +// L1BaseFee is a free data retrieval call binding the contract method 0x519b4bd3. +// +// Solidity: function l1BaseFee() view returns(uint256) +func (_GasPriceOracle *GasPriceOracleCaller) L1BaseFee(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _GasPriceOracle.contract.Call(opts, &out, "l1BaseFee") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// L1BaseFee is a free data retrieval call binding the contract method 0x519b4bd3. +// +// Solidity: function l1BaseFee() view returns(uint256) +func (_GasPriceOracle *GasPriceOracleSession) L1BaseFee() (*big.Int, error) { + return _GasPriceOracle.Contract.L1BaseFee(&_GasPriceOracle.CallOpts) +} + +// L1BaseFee is a free data retrieval call binding the contract method 0x519b4bd3. +// +// Solidity: function l1BaseFee() view returns(uint256) +func (_GasPriceOracle *GasPriceOracleCallerSession) L1BaseFee() (*big.Int, error) { + return _GasPriceOracle.Contract.L1BaseFee(&_GasPriceOracle.CallOpts) +} + +// Overhead is a free data retrieval call binding the contract method 0x0c18c162. +// +// Solidity: function overhead() view returns(uint256) +func (_GasPriceOracle *GasPriceOracleCaller) Overhead(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _GasPriceOracle.contract.Call(opts, &out, "overhead") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Overhead is a free data retrieval call binding the contract method 0x0c18c162. +// +// Solidity: function overhead() view returns(uint256) +func (_GasPriceOracle *GasPriceOracleSession) Overhead() (*big.Int, error) { + return _GasPriceOracle.Contract.Overhead(&_GasPriceOracle.CallOpts) +} + +// Overhead is a free data retrieval call binding the contract method 0x0c18c162. +// +// Solidity: function overhead() view returns(uint256) +func (_GasPriceOracle *GasPriceOracleCallerSession) Overhead() (*big.Int, error) { + return _GasPriceOracle.Contract.Overhead(&_GasPriceOracle.CallOpts) +} + +// Scalar is a free data retrieval call binding the contract method 0xf45e65d8. +// +// Solidity: function scalar() view returns(uint256) +func (_GasPriceOracle *GasPriceOracleCaller) Scalar(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _GasPriceOracle.contract.Call(opts, &out, "scalar") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Scalar is a free data retrieval call binding the contract method 0xf45e65d8. +// +// Solidity: function scalar() view returns(uint256) +func (_GasPriceOracle *GasPriceOracleSession) Scalar() (*big.Int, error) { + return _GasPriceOracle.Contract.Scalar(&_GasPriceOracle.CallOpts) +} + +// Scalar is a free data retrieval call binding the contract method 0xf45e65d8. +// +// Solidity: function scalar() view returns(uint256) +func (_GasPriceOracle *GasPriceOracleCallerSession) Scalar() (*big.Int, error) { + return _GasPriceOracle.Contract.Scalar(&_GasPriceOracle.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_GasPriceOracle *GasPriceOracleCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _GasPriceOracle.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_GasPriceOracle *GasPriceOracleSession) Version() (string, error) { + return _GasPriceOracle.Contract.Version(&_GasPriceOracle.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_GasPriceOracle *GasPriceOracleCallerSession) Version() (string, error) { + return _GasPriceOracle.Contract.Version(&_GasPriceOracle.CallOpts) +} diff --git a/kroma-bindings/bindings/gaspriceoracle_more.go b/kroma-bindings/bindings/gaspriceoracle_more.go new file mode 100644 index 000000000..86e2030ee --- /dev/null +++ b/kroma-bindings/bindings/gaspriceoracle_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const GasPriceOracleStorageLayoutJSON = "{\"storage\":null,\"types\":{}}" + +var GasPriceOracleStorageLayout = new(solc.StorageLayout) + +var GasPriceOracleDeployedBin = "0x608060405234801561001057600080fd5b50600436106100a35760003560e01c806354fd4d5011610076578063de26c4a11161005b578063de26c4a114610101578063f45e65d814610114578063fe173b97146100fb57600080fd5b806354fd4d50146100e65780636ef25c3a146100fb57600080fd5b80630c18c162146100a85780632e0f2625146100c357806349948e0e146100cb578063519b4bd3146100de575b600080fd5b6100b061011c565b6040519081526020015b60405180910390f35b6100b0600681565b6100b06100d93660046105da565b6101a6565b6100b0610207565b6100ee610268565b6040516100ba91906106d9565b486100b0565b6100b061010f3660046105da565b61030b565b6100b06103a9565b600073420000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16638b239f736040518163ffffffff1660e01b8152600401602060405180830381865afa15801561017d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a1919061072a565b905090565b6000806101b28361030b565b905060006101be610207565b6101c89083610772565b905060006101d86006600a6108cf565b905060006101e46103a9565b6101ee9084610772565b905060006101fc83836108e2565b979650505050505050565b600073420000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16635cf249696040518163ffffffff1660e01b8152600401602060405180830381865afa15801561017d573d6000803e3d6000fd5b60606102937f000000000000000000000000000000000000000000000000000000000000000061040a565b6102bc7f000000000000000000000000000000000000000000000000000000000000000061040a565b6102e57f000000000000000000000000000000000000000000000000000000000000000061040a565b6040516020016102f79392919061091d565b604051602081830303815290604052905090565b80516000908190815b8181101561038e5784818151811061032e5761032e610993565b01602001517fff000000000000000000000000000000000000000000000000000000000000001660000361036e576103676004846109c2565b925061037c565b6103796010846109c2565b92505b80610386816109da565b915050610314565b5061039761011c565b6103a190836109c2565b949350505050565b600073420000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16639e8c49666040518163ffffffff1660e01b8152600401602060405180830381865afa15801561017d573d6000803e3d6000fd5b60606000610417836104c8565b600101905060008167ffffffffffffffff811115610437576104376105ab565b6040519080825280601f01601f191660200182016040528015610461576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461046b57509392505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610511577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061053d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061055b57662386f26fc10000830492506010015b6305f5e1008310610573576305f5e100830492506008015b612710831061058757612710830492506004015b60648310610599576064830492506002015b600a83106105a5576001015b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156105ec57600080fd5b813567ffffffffffffffff8082111561060457600080fd5b818401915084601f83011261061857600080fd5b81358181111561062a5761062a6105ab565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610670576106706105ab565b8160405282815287602084870101111561068957600080fd5b826020860160208301376000928101602001929092525095945050505050565b60005b838110156106c45781810151838201526020016106ac565b838111156106d3576000848401525b50505050565b60208152600082518060208401526106f88160408501602087016106a9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60006020828403121561073c57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156107aa576107aa610743565b500290565b600181815b8085111561080857817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156107ee576107ee610743565b808516156107fb57918102915b93841c93908002906107b4565b509250929050565b60008261081f575060016105a5565b8161082c575060006105a5565b8160018114610842576002811461084c57610868565b60019150506105a5565b60ff84111561085d5761085d610743565b50506001821b6105a5565b5060208310610133831016604e8410600b841016171561088b575081810a6105a5565b61089583836107af565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156108c7576108c7610743565b029392505050565b60006108db8383610810565b9392505050565b600082610918577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000845161092f8184602089016106a9565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161096b816001850160208a016106a9565b600192019182015283516109868160028401602088016106a9565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082198211156109d5576109d5610743565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610a0b57610a0b610743565b506001019056fea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(GasPriceOracleStorageLayoutJSON), GasPriceOracleStorageLayout); err != nil { + panic(err) + } + + layouts["GasPriceOracle"] = GasPriceOracleStorageLayout + deployedBytecodes["GasPriceOracle"] = GasPriceOracleDeployedBin +} diff --git a/kroma-bindings/bindings/governancetoken.go b/kroma-bindings/bindings/governancetoken.go new file mode 100644 index 000000000..74c99ae53 --- /dev/null +++ b/kroma-bindings/bindings/governancetoken.go @@ -0,0 +1,1981 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// ERC20VotesCheckpoint is an auto generated low-level Go binding around an user-defined struct. +type ERC20VotesCheckpoint struct { + FromBlock uint32 + Votes *big.Int +} + +// GovernanceTokenMetaData contains all meta data concerning the GovernanceToken contract. +var GovernanceTokenMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidShortString\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"StringTooLong\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromDelegate\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toDelegate\",\"type\":\"address\"}],\"name\":\"DelegateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"previousBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"name\":\"DelegateVotesChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CLOCK_MODE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"pos\",\"type\":\"uint32\"}],\"name\":\"checkpoints\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"fromBlock\",\"type\":\"uint32\"},{\"internalType\":\"uint224\",\"name\":\"votes\",\"type\":\"uint224\"}],\"internalType\":\"structERC20Votes.Checkpoint\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"clock\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"}],\"name\":\"delegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"delegateBySig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"delegates\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timepoint\",\"type\":\"uint256\"}],\"name\":\"getPastTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timepoint\",\"type\":\"uint256\"}],\"name\":\"getPastVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"numCheckpoints\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x6101606040523480156200001257600080fd5b50604051806040016040528060058152602001644b726f6d6160d81b81525080604051806040016040528060018152602001603160f81b815250604051806040016040528060058152602001644b726f6d6160d81b815250604051806040016040528060038152602001624b524f60e81b815250816003908162000097919062000320565b506004620000a6828262000320565b505050620000c46005836200018a60201b62000e1e1790919060201c565b61012052620000e18160066200018a602090811b62000e1e17901c565b61014052815160208084019190912060e052815190820120610100524660a0526200016f60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506200018433620001da565b62000469565b6000602083511015620001aa57620001a2836200022c565b9050620001d4565b82620001c1836200027860201b62000e4f1760201c565b90620001ce908262000320565b5060ff90505b92915050565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f8151111562000263578260405163305a27a960e01b81526004016200025a9190620003ec565b60405180910390fd5b8051620002708262000444565b179392505050565b90565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620002a657607f821691505b602082108103620002c757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200031b57600081815260208120601f850160051c81016020861015620002f65750805b601f850160051c820191505b81811015620003175782815560010162000302565b5050505b505050565b81516001600160401b038111156200033c576200033c6200027b565b62000354816200034d845462000291565b84620002cd565b602080601f8311600181146200038c5760008415620003735750858301515b600019600386901b1c1916600185901b17855562000317565b600085815260208120601f198616915b82811015620003bd578886015182559484019460019091019084016200039c565b5085821015620003dc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083528351808285015260005b818110156200041b57858101830151858201604001528201620003fd565b818111156200042e576000604083870101525b50601f01601f1916929092016040019392505050565b80516020808301519190811015620002c75760001960209190910360031b1b16919050565b60805160a05160c05160e0516101005161012051610140516129f5620004c46000396000610809015260006107de01526000611309015260006112e10152600061123c015260006112660152600061129001526129f56000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c8063715018a61161010f5780639ab24eb0116100a2578063d505accf11610071578063d505accf14610445578063dd62ed3e14610458578063f1127ed814610491578063f2fde38b146104e357600080fd5b80639ab24eb0146103f9578063a457c2d71461040c578063a9059cbb1461041f578063c3cda5201461043257600080fd5b80638da5cb5b116100de5780638da5cb5b146103ae5780638e539e8c146103bf57806391ddadf4146103d257806395d89b41146103f157600080fd5b8063715018a61461036557806379cc67901461036d5780637ecebe001461038057806384b0196e1461039357600080fd5b80633a46b1a811610187578063587cde1e11610156578063587cde1e146102bd5780635c19a95c146103015780636fcfff451461031457806370a082311461033c57600080fd5b80633a46b1a81461027a57806340c10f191461028d57806342966c68146102a25780634bf5d7e9146102b557600080fd5b806323b872dd116101c357806323b872dd1461023d578063313ce567146102505780633644e5151461025f578063395093511461026757600080fd5b806306fdde03146101ea578063095ea7b31461020857806318160ddd1461022b575b600080fd5b6101f26104f6565b6040516101ff9190612435565b60405180910390f35b61021b610216366004612464565b610588565b60405190151581526020016101ff565b6002545b6040519081526020016101ff565b61021b61024b36600461248e565b6105a2565b604051601281526020016101ff565b61022f6105c6565b61021b610275366004612464565b6105d5565b61022f610288366004612464565b610614565b6102a061029b366004612464565b6106a2565b005b6102a06102b03660046124ca565b6106b8565b6101f26106c5565b6102e96102cb3660046124e3565b6001600160a01b039081166000908152600960205260409020541690565b6040516001600160a01b0390911681526020016101ff565b6102a061030f3660046124e3565b61075d565b6103276103223660046124e3565b610767565b60405163ffffffff90911681526020016101ff565b61022f61034a3660046124e3565b6001600160a01b031660009081526020819052604090205490565b6102a0610789565b6102a061037b366004612464565b61079d565b61022f61038e3660046124e3565b6107b2565b61039b6107d0565b6040516101ff97969594939291906124fe565b600c546001600160a01b03166102e9565b61022f6103cd3660046124ca565b610875565b6103da6108e0565b60405165ffffffffffff90911681526020016101ff565b6101f26108eb565b61022f6104073660046124e3565b6108fa565b61021b61041a366004612464565b6109a6565b61021b61042d366004612464565b610a50565b6102a06104403660046125c1565b610a5e565b6102a0610453366004612619565b610b94565b61022f610466366004612683565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6104a461049f3660046126b6565b610cf8565b60408051825163ffffffff1681526020928301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1692810192909252016101ff565b6102a06104f13660046124e3565b610d91565b606060038054610505906126f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610531906126f6565b801561057e5780601f106105535761010080835404028352916020019161057e565b820191906000526020600020905b81548152906001019060200180831161056157829003601f168201915b5050505050905090565b600033610596818585610e52565b60019150505b92915050565b6000336105b0858285610faa565b6105bb85858561103c565b506001949350505050565b60006105d061122f565b905090565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610596908290869061060f908790612772565b610e52565b600061061e6108e0565b65ffffffffffff1682106106795760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20667574757265206c6f6f6b75700000000000000060448201526064015b60405180910390fd5b6001600160a01b0383166000908152600a6020526040902061069b908361135a565b9392505050565b6106aa61146d565b6106b482826114c7565b5050565b6106c233826114d1565b50565b6060436106d06108e0565b65ffffffffffff16146107255760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a2062726f6b656e20636c6f636b206d6f64650000006044820152606401610670565b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b6106c233826114db565b6001600160a01b0381166000908152600a602052604081205461059c9061156c565b61079161146d565b61079b60006115ec565b565b6107a8823383610faa565b6106b482826114d1565b6001600160a01b03811660009081526007602052604081205461059c565b6000606080828080836108047f00000000000000000000000000000000000000000000000000000000000000006005611656565b61082f7f00000000000000000000000000000000000000000000000000000000000000006006611656565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b600061087f6108e0565b65ffffffffffff1682106108d55760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20667574757265206c6f6f6b7570000000000000006044820152606401610670565b61059c600b8361135a565b60006105d0436116fa565b606060048054610505906126f6565b6001600160a01b0381166000908152600a6020526040812054801561097e576001600160a01b0383166000908152600a6020526040902080546000198301908110610947576109476127b9565b60009182526020909120015464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16610981565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610a435760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610670565b6105bb8286868403610e52565b60003361059681858561103c565b83421115610aae5760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e617475726520657870697265640000006044820152606401610670565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610b2890610b209060a00160405160208183030381529060405280519060200120611778565b8585856117c0565b9050610b33816117e8565b8614610b815760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e6365000000000000006044820152606401610670565b610b8b81886114db565b50505050505050565b83421115610be45760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610670565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610c138c6117e8565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610c6e82611778565b90506000610c7e828787876117c0565b9050896001600160a01b0316816001600160a01b031614610ce15760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610670565b610cec8a8a8a610e52565b50505050505050505050565b60408051808201909152600080825260208201526001600160a01b0383166000908152600a60205260409020805463ffffffff8416908110610d3c57610d3c6127b9565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16918101919091529392505050565b610d9961146d565b6001600160a01b038116610e155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610670565b6106c2816115ec565b6000602083511015610e3a57610e3383611810565b905061059c565b81610e458482612836565b5060ff905061059c565b90565b6001600160a01b038316610ecd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610670565b6001600160a01b038216610f495760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610670565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461103657818110156110295760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610670565b6110368484848403610e52565b50505050565b6001600160a01b0383166110b85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610670565b6001600160a01b0382166111345760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610670565b6001600160a01b038316600090815260208190526040902054818110156111c35760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610670565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361103684848461186c565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561128857507f000000000000000000000000000000000000000000000000000000000000000046145b156112b257507f000000000000000000000000000000000000000000000000000000000000000090565b6105d0604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8154600090818160058111156113b457600061137584611877565b61137f9085612914565b600088815260209020909150869082015463ffffffff1611156113a4578091506113b2565b6113af816001612772565b92505b505b808210156114015760006113c8838361195f565b600088815260209020909150869082015463ffffffff1611156113ed578091506113fb565b6113f8816001612772565b92505b506113b4565b8015611442576000868152602090208101600019015464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16611445565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169695505050505050565b600c546001600160a01b0316331461079b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610670565b6106b4828261197a565b6106b48282611a26565b6001600160a01b038281166000818152600960208181526040808420805485845282862054949093528787167fffffffffffffffffffffffff00000000000000000000000000000000000000008416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611036828483611a3e565b600063ffffffff8211156115e85760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201527f32206269747300000000000000000000000000000000000000000000000000006064820152608401610670565b5090565b600c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606060ff831461166957610e3383611b7b565b818054611675906126f6565b80601f01602080910402602001604051908101604052809291908181526020018280546116a1906126f6565b80156116ee5780601f106116c3576101008083540402835291602001916116ee565b820191906000526020600020905b8154815290600101906020018083116116d157829003601f168201915b5050505050905061059c565b600065ffffffffffff8211156115e85760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201527f38206269747300000000000000000000000000000000000000000000000000006064820152608401610670565b600061059c61178561122f565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006117d187878787611bba565b915091506117de81611c9c565b5095945050505050565b6001600160a01b03811660009081526007602052604090208054600181018255905b50919050565b600080829050601f8151111561185457826040517f305a27a90000000000000000000000000000000000000000000000000000000081526004016106709190612435565b805161185f8261292b565b179392505050565b505050565b611867838383611e01565b60008160000361188957506000919050565b6000600161189684611e33565b901c6001901b905060018184816118af576118af61294f565b048201901c905060018184816118c7576118c761294f565b048201901c905060018184816118df576118df61294f565b048201901c905060018184816118f7576118f761294f565b048201901c9050600181848161190f5761190f61294f565b048201901c905060018184816119275761192761294f565b048201901c9050600181848161193f5761193f61294f565b048201901c905061069b818285816119595761195961294f565b04611ec7565b600061196e600284841861297e565b61069b90848416612772565b6119848282611edd565b6002547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1015611a185760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201527f766572666c6f77696e6720766f746573000000000000000000000000000000006064820152608401610670565b611036600b611fa483611fb0565b611a308282612179565b611036600b6122e983611fb0565b816001600160a01b0316836001600160a01b031614158015611a605750600081115b15611867576001600160a01b03831615611aee576001600160a01b0383166000908152600a602052604081208190611a9b906122e985611fb0565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611ae3929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615611867576001600160a01b0382166000908152600a602052604081208190611b2490611fa485611fb0565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611b6c929190918252602082015260400190565b60405180910390a25050505050565b60606000611b88836122f5565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611bf15750600090506003611c93565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611c45573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519150506001600160a01b038116611c8c57600060019250925050611c93565b9150600090505b94509492505050565b6000816004811115611cb057611cb06129b9565b03611cb85750565b6001816004811115611ccc57611ccc6129b9565b03611d195760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610670565b6002816004811115611d2d57611d2d6129b9565b03611d7a5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610670565b6003816004811115611d8e57611d8e6129b9565b036106c25760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610670565b6001600160a01b0383811660009081526009602052604080822054858416835291205461186792918216911683611a3e565b600080608083901c15611e4857608092831c92015b604083901c15611e5a57604092831c92015b602083901c15611e6c57602092831c92015b601083901c15611e7e57601092831c92015b600883901c15611e9057600892831c92015b600483901c15611ea257600492831c92015b600283901c15611eb457600292831c92015b600183901c1561059c5760010192915050565b6000818310611ed6578161069b565b5090919050565b6001600160a01b038216611f335760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610670565b8060026000828254611f459190612772565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36106b46000838361186c565b600061069b8284612772565b825460009081908181156120125760008781526020902082016000190160408051808201909152905463ffffffff8116825264010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166020820152612027565b60408051808201909152600080825260208201525b905080602001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16935061205c84868863ffffffff16565b925060008211801561208657506120716108e0565b65ffffffffffff16816000015163ffffffff16145b156120e05761209483612336565b60008881526020902083016000190180547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092166401000000000263ffffffff90921691909117905561216f565b8660405180604001604052806121046120f76108e0565b65ffffffffffff1661156c565b63ffffffff16815260200161211886612336565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b5050935093915050565b6001600160a01b0382166121f55760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610670565b6001600160a01b038216600090815260208190526040902054818110156122845760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610670565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36118678360008461186c565b600061069b8284612914565b600060ff8216601f81111561059c576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8211156115e85760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203260448201527f32342062697473000000000000000000000000000000000000000000000000006064820152608401610670565b6000815180845260005b818110156123f0576020818501810151868301820152016123d4565b81811115612402576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061069b60208301846123ca565b80356001600160a01b038116811461245f57600080fd5b919050565b6000806040838503121561247757600080fd5b61248083612448565b946020939093013593505050565b6000806000606084860312156124a357600080fd5b6124ac84612448565b92506124ba60208501612448565b9150604084013590509250925092565b6000602082840312156124dc57600080fd5b5035919050565b6000602082840312156124f557600080fd5b61069b82612448565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e08184015261253a60e084018a6123ca565b838103604085015261254c818a6123ca565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b8181101561259e57835183529284019291840191600101612582565b50909c9b505050505050505050505050565b803560ff8116811461245f57600080fd5b60008060008060008060c087890312156125da57600080fd5b6125e387612448565b955060208701359450604087013593506125ff606088016125b0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561263457600080fd5b61263d88612448565b965061264b60208901612448565b95506040880135945060608801359350612667608089016125b0565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561269657600080fd5b61269f83612448565b91506126ad60208401612448565b90509250929050565b600080604083850312156126c957600080fd5b6126d283612448565b9150602083013563ffffffff811681146126eb57600080fd5b809150509250929050565b600181811c9082168061270a57607f821691505b60208210810361180a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561278557612785612743565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b601f82111561186757600081815260208120601f850160051c8101602086101561280f5750805b601f850160051c820191505b8181101561282e5782815560010161281b565b505050505050565b815167ffffffffffffffff8111156128505761285061278a565b6128648161285e84546126f6565b846127e8565b602080601f83116001811461289957600084156128815750858301515b600019600386901b1c1916600185901b17855561282e565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156128e6578886015182559484019460019091019084016128c7565b50858210156129045787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008282101561292657612926612743565b500390565b8051602080830151919081101561180a5760001960209190910360031b1b16919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826129b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", +} + +// GovernanceTokenABI is the input ABI used to generate the binding from. +// Deprecated: Use GovernanceTokenMetaData.ABI instead. +var GovernanceTokenABI = GovernanceTokenMetaData.ABI + +// GovernanceTokenBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use GovernanceTokenMetaData.Bin instead. +var GovernanceTokenBin = GovernanceTokenMetaData.Bin + +// DeployGovernanceToken deploys a new Ethereum contract, binding an instance of GovernanceToken to it. +func DeployGovernanceToken(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *GovernanceToken, error) { + parsed, err := GovernanceTokenMetaData.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(GovernanceTokenBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &GovernanceToken{GovernanceTokenCaller: GovernanceTokenCaller{contract: contract}, GovernanceTokenTransactor: GovernanceTokenTransactor{contract: contract}, GovernanceTokenFilterer: GovernanceTokenFilterer{contract: contract}}, nil +} + +// GovernanceToken is an auto generated Go binding around an Ethereum contract. +type GovernanceToken struct { + GovernanceTokenCaller // Read-only binding to the contract + GovernanceTokenTransactor // Write-only binding to the contract + GovernanceTokenFilterer // Log filterer for contract events +} + +// GovernanceTokenCaller is an auto generated read-only Go binding around an Ethereum contract. +type GovernanceTokenCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// GovernanceTokenTransactor is an auto generated write-only Go binding around an Ethereum contract. +type GovernanceTokenTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// GovernanceTokenFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type GovernanceTokenFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// GovernanceTokenSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type GovernanceTokenSession struct { + Contract *GovernanceToken // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// GovernanceTokenCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type GovernanceTokenCallerSession struct { + Contract *GovernanceTokenCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// GovernanceTokenTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type GovernanceTokenTransactorSession struct { + Contract *GovernanceTokenTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// GovernanceTokenRaw is an auto generated low-level Go binding around an Ethereum contract. +type GovernanceTokenRaw struct { + Contract *GovernanceToken // Generic contract binding to access the raw methods on +} + +// GovernanceTokenCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type GovernanceTokenCallerRaw struct { + Contract *GovernanceTokenCaller // Generic read-only contract binding to access the raw methods on +} + +// GovernanceTokenTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type GovernanceTokenTransactorRaw struct { + Contract *GovernanceTokenTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewGovernanceToken creates a new instance of GovernanceToken, bound to a specific deployed contract. +func NewGovernanceToken(address common.Address, backend bind.ContractBackend) (*GovernanceToken, error) { + contract, err := bindGovernanceToken(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &GovernanceToken{GovernanceTokenCaller: GovernanceTokenCaller{contract: contract}, GovernanceTokenTransactor: GovernanceTokenTransactor{contract: contract}, GovernanceTokenFilterer: GovernanceTokenFilterer{contract: contract}}, nil +} + +// NewGovernanceTokenCaller creates a new read-only instance of GovernanceToken, bound to a specific deployed contract. +func NewGovernanceTokenCaller(address common.Address, caller bind.ContractCaller) (*GovernanceTokenCaller, error) { + contract, err := bindGovernanceToken(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &GovernanceTokenCaller{contract: contract}, nil +} + +// NewGovernanceTokenTransactor creates a new write-only instance of GovernanceToken, bound to a specific deployed contract. +func NewGovernanceTokenTransactor(address common.Address, transactor bind.ContractTransactor) (*GovernanceTokenTransactor, error) { + contract, err := bindGovernanceToken(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &GovernanceTokenTransactor{contract: contract}, nil +} + +// NewGovernanceTokenFilterer creates a new log filterer instance of GovernanceToken, bound to a specific deployed contract. +func NewGovernanceTokenFilterer(address common.Address, filterer bind.ContractFilterer) (*GovernanceTokenFilterer, error) { + contract, err := bindGovernanceToken(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &GovernanceTokenFilterer{contract: contract}, nil +} + +// bindGovernanceToken binds a generic wrapper to an already deployed contract. +func bindGovernanceToken(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := GovernanceTokenMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_GovernanceToken *GovernanceTokenRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _GovernanceToken.Contract.GovernanceTokenCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_GovernanceToken *GovernanceTokenRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GovernanceToken.Contract.GovernanceTokenTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_GovernanceToken *GovernanceTokenRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _GovernanceToken.Contract.GovernanceTokenTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_GovernanceToken *GovernanceTokenCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _GovernanceToken.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_GovernanceToken *GovernanceTokenTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GovernanceToken.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_GovernanceToken *GovernanceTokenTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _GovernanceToken.Contract.contract.Transact(opts, method, params...) +} + +// CLOCKMODE is a free data retrieval call binding the contract method 0x4bf5d7e9. +// +// Solidity: function CLOCK_MODE() view returns(string) +func (_GovernanceToken *GovernanceTokenCaller) CLOCKMODE(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "CLOCK_MODE") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// CLOCKMODE is a free data retrieval call binding the contract method 0x4bf5d7e9. +// +// Solidity: function CLOCK_MODE() view returns(string) +func (_GovernanceToken *GovernanceTokenSession) CLOCKMODE() (string, error) { + return _GovernanceToken.Contract.CLOCKMODE(&_GovernanceToken.CallOpts) +} + +// CLOCKMODE is a free data retrieval call binding the contract method 0x4bf5d7e9. +// +// Solidity: function CLOCK_MODE() view returns(string) +func (_GovernanceToken *GovernanceTokenCallerSession) CLOCKMODE() (string, error) { + return _GovernanceToken.Contract.CLOCKMODE(&_GovernanceToken.CallOpts) +} + +// DOMAINSEPARATOR is a free data retrieval call binding the contract method 0x3644e515. +// +// Solidity: function DOMAIN_SEPARATOR() view returns(bytes32) +func (_GovernanceToken *GovernanceTokenCaller) DOMAINSEPARATOR(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "DOMAIN_SEPARATOR") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DOMAINSEPARATOR is a free data retrieval call binding the contract method 0x3644e515. +// +// Solidity: function DOMAIN_SEPARATOR() view returns(bytes32) +func (_GovernanceToken *GovernanceTokenSession) DOMAINSEPARATOR() ([32]byte, error) { + return _GovernanceToken.Contract.DOMAINSEPARATOR(&_GovernanceToken.CallOpts) +} + +// DOMAINSEPARATOR is a free data retrieval call binding the contract method 0x3644e515. +// +// Solidity: function DOMAIN_SEPARATOR() view returns(bytes32) +func (_GovernanceToken *GovernanceTokenCallerSession) DOMAINSEPARATOR() ([32]byte, error) { + return _GovernanceToken.Contract.DOMAINSEPARATOR(&_GovernanceToken.CallOpts) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_GovernanceToken *GovernanceTokenCaller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "allowance", owner, spender) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_GovernanceToken *GovernanceTokenSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _GovernanceToken.Contract.Allowance(&_GovernanceToken.CallOpts, owner, spender) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_GovernanceToken *GovernanceTokenCallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _GovernanceToken.Contract.Allowance(&_GovernanceToken.CallOpts, owner, spender) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_GovernanceToken *GovernanceTokenCaller) BalanceOf(opts *bind.CallOpts, account common.Address) (*big.Int, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "balanceOf", account) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_GovernanceToken *GovernanceTokenSession) BalanceOf(account common.Address) (*big.Int, error) { + return _GovernanceToken.Contract.BalanceOf(&_GovernanceToken.CallOpts, account) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_GovernanceToken *GovernanceTokenCallerSession) BalanceOf(account common.Address) (*big.Int, error) { + return _GovernanceToken.Contract.BalanceOf(&_GovernanceToken.CallOpts, account) +} + +// Checkpoints is a free data retrieval call binding the contract method 0xf1127ed8. +// +// Solidity: function checkpoints(address account, uint32 pos) view returns((uint32,uint224)) +func (_GovernanceToken *GovernanceTokenCaller) Checkpoints(opts *bind.CallOpts, account common.Address, pos uint32) (ERC20VotesCheckpoint, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "checkpoints", account, pos) + + if err != nil { + return *new(ERC20VotesCheckpoint), err + } + + out0 := *abi.ConvertType(out[0], new(ERC20VotesCheckpoint)).(*ERC20VotesCheckpoint) + + return out0, err + +} + +// Checkpoints is a free data retrieval call binding the contract method 0xf1127ed8. +// +// Solidity: function checkpoints(address account, uint32 pos) view returns((uint32,uint224)) +func (_GovernanceToken *GovernanceTokenSession) Checkpoints(account common.Address, pos uint32) (ERC20VotesCheckpoint, error) { + return _GovernanceToken.Contract.Checkpoints(&_GovernanceToken.CallOpts, account, pos) +} + +// Checkpoints is a free data retrieval call binding the contract method 0xf1127ed8. +// +// Solidity: function checkpoints(address account, uint32 pos) view returns((uint32,uint224)) +func (_GovernanceToken *GovernanceTokenCallerSession) Checkpoints(account common.Address, pos uint32) (ERC20VotesCheckpoint, error) { + return _GovernanceToken.Contract.Checkpoints(&_GovernanceToken.CallOpts, account, pos) +} + +// Clock is a free data retrieval call binding the contract method 0x91ddadf4. +// +// Solidity: function clock() view returns(uint48) +func (_GovernanceToken *GovernanceTokenCaller) Clock(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "clock") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Clock is a free data retrieval call binding the contract method 0x91ddadf4. +// +// Solidity: function clock() view returns(uint48) +func (_GovernanceToken *GovernanceTokenSession) Clock() (*big.Int, error) { + return _GovernanceToken.Contract.Clock(&_GovernanceToken.CallOpts) +} + +// Clock is a free data retrieval call binding the contract method 0x91ddadf4. +// +// Solidity: function clock() view returns(uint48) +func (_GovernanceToken *GovernanceTokenCallerSession) Clock() (*big.Int, error) { + return _GovernanceToken.Contract.Clock(&_GovernanceToken.CallOpts) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_GovernanceToken *GovernanceTokenCaller) Decimals(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "decimals") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_GovernanceToken *GovernanceTokenSession) Decimals() (uint8, error) { + return _GovernanceToken.Contract.Decimals(&_GovernanceToken.CallOpts) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_GovernanceToken *GovernanceTokenCallerSession) Decimals() (uint8, error) { + return _GovernanceToken.Contract.Decimals(&_GovernanceToken.CallOpts) +} + +// Delegates is a free data retrieval call binding the contract method 0x587cde1e. +// +// Solidity: function delegates(address account) view returns(address) +func (_GovernanceToken *GovernanceTokenCaller) Delegates(opts *bind.CallOpts, account common.Address) (common.Address, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "delegates", account) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Delegates is a free data retrieval call binding the contract method 0x587cde1e. +// +// Solidity: function delegates(address account) view returns(address) +func (_GovernanceToken *GovernanceTokenSession) Delegates(account common.Address) (common.Address, error) { + return _GovernanceToken.Contract.Delegates(&_GovernanceToken.CallOpts, account) +} + +// Delegates is a free data retrieval call binding the contract method 0x587cde1e. +// +// Solidity: function delegates(address account) view returns(address) +func (_GovernanceToken *GovernanceTokenCallerSession) Delegates(account common.Address) (common.Address, error) { + return _GovernanceToken.Contract.Delegates(&_GovernanceToken.CallOpts, account) +} + +// Eip712Domain is a free data retrieval call binding the contract method 0x84b0196e. +// +// Solidity: function eip712Domain() view returns(bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions) +func (_GovernanceToken *GovernanceTokenCaller) Eip712Domain(opts *bind.CallOpts) (struct { + Fields [1]byte + Name string + Version string + ChainId *big.Int + VerifyingContract common.Address + Salt [32]byte + Extensions []*big.Int +}, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "eip712Domain") + + outstruct := new(struct { + Fields [1]byte + Name string + Version string + ChainId *big.Int + VerifyingContract common.Address + Salt [32]byte + Extensions []*big.Int + }) + if err != nil { + return *outstruct, err + } + + outstruct.Fields = *abi.ConvertType(out[0], new([1]byte)).(*[1]byte) + outstruct.Name = *abi.ConvertType(out[1], new(string)).(*string) + outstruct.Version = *abi.ConvertType(out[2], new(string)).(*string) + outstruct.ChainId = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) + outstruct.VerifyingContract = *abi.ConvertType(out[4], new(common.Address)).(*common.Address) + outstruct.Salt = *abi.ConvertType(out[5], new([32]byte)).(*[32]byte) + outstruct.Extensions = *abi.ConvertType(out[6], new([]*big.Int)).(*[]*big.Int) + + return *outstruct, err + +} + +// Eip712Domain is a free data retrieval call binding the contract method 0x84b0196e. +// +// Solidity: function eip712Domain() view returns(bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions) +func (_GovernanceToken *GovernanceTokenSession) Eip712Domain() (struct { + Fields [1]byte + Name string + Version string + ChainId *big.Int + VerifyingContract common.Address + Salt [32]byte + Extensions []*big.Int +}, error) { + return _GovernanceToken.Contract.Eip712Domain(&_GovernanceToken.CallOpts) +} + +// Eip712Domain is a free data retrieval call binding the contract method 0x84b0196e. +// +// Solidity: function eip712Domain() view returns(bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions) +func (_GovernanceToken *GovernanceTokenCallerSession) Eip712Domain() (struct { + Fields [1]byte + Name string + Version string + ChainId *big.Int + VerifyingContract common.Address + Salt [32]byte + Extensions []*big.Int +}, error) { + return _GovernanceToken.Contract.Eip712Domain(&_GovernanceToken.CallOpts) +} + +// GetPastTotalSupply is a free data retrieval call binding the contract method 0x8e539e8c. +// +// Solidity: function getPastTotalSupply(uint256 timepoint) view returns(uint256) +func (_GovernanceToken *GovernanceTokenCaller) GetPastTotalSupply(opts *bind.CallOpts, timepoint *big.Int) (*big.Int, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "getPastTotalSupply", timepoint) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetPastTotalSupply is a free data retrieval call binding the contract method 0x8e539e8c. +// +// Solidity: function getPastTotalSupply(uint256 timepoint) view returns(uint256) +func (_GovernanceToken *GovernanceTokenSession) GetPastTotalSupply(timepoint *big.Int) (*big.Int, error) { + return _GovernanceToken.Contract.GetPastTotalSupply(&_GovernanceToken.CallOpts, timepoint) +} + +// GetPastTotalSupply is a free data retrieval call binding the contract method 0x8e539e8c. +// +// Solidity: function getPastTotalSupply(uint256 timepoint) view returns(uint256) +func (_GovernanceToken *GovernanceTokenCallerSession) GetPastTotalSupply(timepoint *big.Int) (*big.Int, error) { + return _GovernanceToken.Contract.GetPastTotalSupply(&_GovernanceToken.CallOpts, timepoint) +} + +// GetPastVotes is a free data retrieval call binding the contract method 0x3a46b1a8. +// +// Solidity: function getPastVotes(address account, uint256 timepoint) view returns(uint256) +func (_GovernanceToken *GovernanceTokenCaller) GetPastVotes(opts *bind.CallOpts, account common.Address, timepoint *big.Int) (*big.Int, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "getPastVotes", account, timepoint) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetPastVotes is a free data retrieval call binding the contract method 0x3a46b1a8. +// +// Solidity: function getPastVotes(address account, uint256 timepoint) view returns(uint256) +func (_GovernanceToken *GovernanceTokenSession) GetPastVotes(account common.Address, timepoint *big.Int) (*big.Int, error) { + return _GovernanceToken.Contract.GetPastVotes(&_GovernanceToken.CallOpts, account, timepoint) +} + +// GetPastVotes is a free data retrieval call binding the contract method 0x3a46b1a8. +// +// Solidity: function getPastVotes(address account, uint256 timepoint) view returns(uint256) +func (_GovernanceToken *GovernanceTokenCallerSession) GetPastVotes(account common.Address, timepoint *big.Int) (*big.Int, error) { + return _GovernanceToken.Contract.GetPastVotes(&_GovernanceToken.CallOpts, account, timepoint) +} + +// GetVotes is a free data retrieval call binding the contract method 0x9ab24eb0. +// +// Solidity: function getVotes(address account) view returns(uint256) +func (_GovernanceToken *GovernanceTokenCaller) GetVotes(opts *bind.CallOpts, account common.Address) (*big.Int, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "getVotes", account) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetVotes is a free data retrieval call binding the contract method 0x9ab24eb0. +// +// Solidity: function getVotes(address account) view returns(uint256) +func (_GovernanceToken *GovernanceTokenSession) GetVotes(account common.Address) (*big.Int, error) { + return _GovernanceToken.Contract.GetVotes(&_GovernanceToken.CallOpts, account) +} + +// GetVotes is a free data retrieval call binding the contract method 0x9ab24eb0. +// +// Solidity: function getVotes(address account) view returns(uint256) +func (_GovernanceToken *GovernanceTokenCallerSession) GetVotes(account common.Address) (*big.Int, error) { + return _GovernanceToken.Contract.GetVotes(&_GovernanceToken.CallOpts, account) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_GovernanceToken *GovernanceTokenCaller) Name(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "name") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_GovernanceToken *GovernanceTokenSession) Name() (string, error) { + return _GovernanceToken.Contract.Name(&_GovernanceToken.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_GovernanceToken *GovernanceTokenCallerSession) Name() (string, error) { + return _GovernanceToken.Contract.Name(&_GovernanceToken.CallOpts) +} + +// Nonces is a free data retrieval call binding the contract method 0x7ecebe00. +// +// Solidity: function nonces(address owner) view returns(uint256) +func (_GovernanceToken *GovernanceTokenCaller) Nonces(opts *bind.CallOpts, owner common.Address) (*big.Int, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "nonces", owner) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Nonces is a free data retrieval call binding the contract method 0x7ecebe00. +// +// Solidity: function nonces(address owner) view returns(uint256) +func (_GovernanceToken *GovernanceTokenSession) Nonces(owner common.Address) (*big.Int, error) { + return _GovernanceToken.Contract.Nonces(&_GovernanceToken.CallOpts, owner) +} + +// Nonces is a free data retrieval call binding the contract method 0x7ecebe00. +// +// Solidity: function nonces(address owner) view returns(uint256) +func (_GovernanceToken *GovernanceTokenCallerSession) Nonces(owner common.Address) (*big.Int, error) { + return _GovernanceToken.Contract.Nonces(&_GovernanceToken.CallOpts, owner) +} + +// NumCheckpoints is a free data retrieval call binding the contract method 0x6fcfff45. +// +// Solidity: function numCheckpoints(address account) view returns(uint32) +func (_GovernanceToken *GovernanceTokenCaller) NumCheckpoints(opts *bind.CallOpts, account common.Address) (uint32, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "numCheckpoints", account) + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// NumCheckpoints is a free data retrieval call binding the contract method 0x6fcfff45. +// +// Solidity: function numCheckpoints(address account) view returns(uint32) +func (_GovernanceToken *GovernanceTokenSession) NumCheckpoints(account common.Address) (uint32, error) { + return _GovernanceToken.Contract.NumCheckpoints(&_GovernanceToken.CallOpts, account) +} + +// NumCheckpoints is a free data retrieval call binding the contract method 0x6fcfff45. +// +// Solidity: function numCheckpoints(address account) view returns(uint32) +func (_GovernanceToken *GovernanceTokenCallerSession) NumCheckpoints(account common.Address) (uint32, error) { + return _GovernanceToken.Contract.NumCheckpoints(&_GovernanceToken.CallOpts, account) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_GovernanceToken *GovernanceTokenCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _GovernanceToken.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 + +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_GovernanceToken *GovernanceTokenSession) Owner() (common.Address, error) { + return _GovernanceToken.Contract.Owner(&_GovernanceToken.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_GovernanceToken *GovernanceTokenCallerSession) Owner() (common.Address, error) { + return _GovernanceToken.Contract.Owner(&_GovernanceToken.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_GovernanceToken *GovernanceTokenCaller) Symbol(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "symbol") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_GovernanceToken *GovernanceTokenSession) Symbol() (string, error) { + return _GovernanceToken.Contract.Symbol(&_GovernanceToken.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_GovernanceToken *GovernanceTokenCallerSession) Symbol() (string, error) { + return _GovernanceToken.Contract.Symbol(&_GovernanceToken.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_GovernanceToken *GovernanceTokenCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "totalSupply") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_GovernanceToken *GovernanceTokenSession) TotalSupply() (*big.Int, error) { + return _GovernanceToken.Contract.TotalSupply(&_GovernanceToken.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_GovernanceToken *GovernanceTokenCallerSession) TotalSupply() (*big.Int, error) { + return _GovernanceToken.Contract.TotalSupply(&_GovernanceToken.CallOpts) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_GovernanceToken *GovernanceTokenTransactor) Approve(opts *bind.TransactOpts, spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.contract.Transact(opts, "approve", spender, amount) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_GovernanceToken *GovernanceTokenSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.Approve(&_GovernanceToken.TransactOpts, spender, amount) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_GovernanceToken *GovernanceTokenTransactorSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.Approve(&_GovernanceToken.TransactOpts, spender, amount) +} + +// Burn is a paid mutator transaction binding the contract method 0x42966c68. +// +// Solidity: function burn(uint256 amount) returns() +func (_GovernanceToken *GovernanceTokenTransactor) Burn(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.contract.Transact(opts, "burn", amount) +} + +// Burn is a paid mutator transaction binding the contract method 0x42966c68. +// +// Solidity: function burn(uint256 amount) returns() +func (_GovernanceToken *GovernanceTokenSession) Burn(amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.Burn(&_GovernanceToken.TransactOpts, amount) +} + +// Burn is a paid mutator transaction binding the contract method 0x42966c68. +// +// Solidity: function burn(uint256 amount) returns() +func (_GovernanceToken *GovernanceTokenTransactorSession) Burn(amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.Burn(&_GovernanceToken.TransactOpts, amount) +} + +// BurnFrom is a paid mutator transaction binding the contract method 0x79cc6790. +// +// Solidity: function burnFrom(address account, uint256 amount) returns() +func (_GovernanceToken *GovernanceTokenTransactor) BurnFrom(opts *bind.TransactOpts, account common.Address, amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.contract.Transact(opts, "burnFrom", account, amount) +} + +// BurnFrom is a paid mutator transaction binding the contract method 0x79cc6790. +// +// Solidity: function burnFrom(address account, uint256 amount) returns() +func (_GovernanceToken *GovernanceTokenSession) BurnFrom(account common.Address, amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.BurnFrom(&_GovernanceToken.TransactOpts, account, amount) +} + +// BurnFrom is a paid mutator transaction binding the contract method 0x79cc6790. +// +// Solidity: function burnFrom(address account, uint256 amount) returns() +func (_GovernanceToken *GovernanceTokenTransactorSession) BurnFrom(account common.Address, amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.BurnFrom(&_GovernanceToken.TransactOpts, account, amount) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) +func (_GovernanceToken *GovernanceTokenTransactor) DecreaseAllowance(opts *bind.TransactOpts, spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _GovernanceToken.contract.Transact(opts, "decreaseAllowance", spender, subtractedValue) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) +func (_GovernanceToken *GovernanceTokenSession) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.DecreaseAllowance(&_GovernanceToken.TransactOpts, spender, subtractedValue) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) +func (_GovernanceToken *GovernanceTokenTransactorSession) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.DecreaseAllowance(&_GovernanceToken.TransactOpts, spender, subtractedValue) +} + +// Delegate is a paid mutator transaction binding the contract method 0x5c19a95c. +// +// Solidity: function delegate(address delegatee) returns() +func (_GovernanceToken *GovernanceTokenTransactor) Delegate(opts *bind.TransactOpts, delegatee common.Address) (*types.Transaction, error) { + return _GovernanceToken.contract.Transact(opts, "delegate", delegatee) +} + +// Delegate is a paid mutator transaction binding the contract method 0x5c19a95c. +// +// Solidity: function delegate(address delegatee) returns() +func (_GovernanceToken *GovernanceTokenSession) Delegate(delegatee common.Address) (*types.Transaction, error) { + return _GovernanceToken.Contract.Delegate(&_GovernanceToken.TransactOpts, delegatee) +} + +// Delegate is a paid mutator transaction binding the contract method 0x5c19a95c. +// +// Solidity: function delegate(address delegatee) returns() +func (_GovernanceToken *GovernanceTokenTransactorSession) Delegate(delegatee common.Address) (*types.Transaction, error) { + return _GovernanceToken.Contract.Delegate(&_GovernanceToken.TransactOpts, delegatee) +} + +// DelegateBySig is a paid mutator transaction binding the contract method 0xc3cda520. +// +// Solidity: function delegateBySig(address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) returns() +func (_GovernanceToken *GovernanceTokenTransactor) DelegateBySig(opts *bind.TransactOpts, delegatee common.Address, nonce *big.Int, expiry *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) { + return _GovernanceToken.contract.Transact(opts, "delegateBySig", delegatee, nonce, expiry, v, r, s) +} + +// DelegateBySig is a paid mutator transaction binding the contract method 0xc3cda520. +// +// Solidity: function delegateBySig(address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) returns() +func (_GovernanceToken *GovernanceTokenSession) DelegateBySig(delegatee common.Address, nonce *big.Int, expiry *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) { + return _GovernanceToken.Contract.DelegateBySig(&_GovernanceToken.TransactOpts, delegatee, nonce, expiry, v, r, s) +} + +// DelegateBySig is a paid mutator transaction binding the contract method 0xc3cda520. +// +// Solidity: function delegateBySig(address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) returns() +func (_GovernanceToken *GovernanceTokenTransactorSession) DelegateBySig(delegatee common.Address, nonce *big.Int, expiry *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) { + return _GovernanceToken.Contract.DelegateBySig(&_GovernanceToken.TransactOpts, delegatee, nonce, expiry, v, r, s) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_GovernanceToken *GovernanceTokenTransactor) IncreaseAllowance(opts *bind.TransactOpts, spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _GovernanceToken.contract.Transact(opts, "increaseAllowance", spender, addedValue) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_GovernanceToken *GovernanceTokenSession) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.IncreaseAllowance(&_GovernanceToken.TransactOpts, spender, addedValue) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_GovernanceToken *GovernanceTokenTransactorSession) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.IncreaseAllowance(&_GovernanceToken.TransactOpts, spender, addedValue) +} + +// Mint is a paid mutator transaction binding the contract method 0x40c10f19. +// +// Solidity: function mint(address _account, uint256 _amount) returns() +func (_GovernanceToken *GovernanceTokenTransactor) Mint(opts *bind.TransactOpts, _account common.Address, _amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.contract.Transact(opts, "mint", _account, _amount) +} + +// Mint is a paid mutator transaction binding the contract method 0x40c10f19. +// +// Solidity: function mint(address _account, uint256 _amount) returns() +func (_GovernanceToken *GovernanceTokenSession) Mint(_account common.Address, _amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.Mint(&_GovernanceToken.TransactOpts, _account, _amount) +} + +// Mint is a paid mutator transaction binding the contract method 0x40c10f19. +// +// Solidity: function mint(address _account, uint256 _amount) returns() +func (_GovernanceToken *GovernanceTokenTransactorSession) Mint(_account common.Address, _amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.Mint(&_GovernanceToken.TransactOpts, _account, _amount) +} + +// Permit is a paid mutator transaction binding the contract method 0xd505accf. +// +// Solidity: function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) returns() +func (_GovernanceToken *GovernanceTokenTransactor) Permit(opts *bind.TransactOpts, owner common.Address, spender common.Address, value *big.Int, deadline *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) { + return _GovernanceToken.contract.Transact(opts, "permit", owner, spender, value, deadline, v, r, s) +} + +// Permit is a paid mutator transaction binding the contract method 0xd505accf. +// +// Solidity: function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) returns() +func (_GovernanceToken *GovernanceTokenSession) Permit(owner common.Address, spender common.Address, value *big.Int, deadline *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) { + return _GovernanceToken.Contract.Permit(&_GovernanceToken.TransactOpts, owner, spender, value, deadline, v, r, s) +} + +// Permit is a paid mutator transaction binding the contract method 0xd505accf. +// +// Solidity: function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) returns() +func (_GovernanceToken *GovernanceTokenTransactorSession) Permit(owner common.Address, spender common.Address, value *big.Int, deadline *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) { + return _GovernanceToken.Contract.Permit(&_GovernanceToken.TransactOpts, owner, spender, value, deadline, v, r, s) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_GovernanceToken *GovernanceTokenTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GovernanceToken.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_GovernanceToken *GovernanceTokenSession) RenounceOwnership() (*types.Transaction, error) { + return _GovernanceToken.Contract.RenounceOwnership(&_GovernanceToken.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_GovernanceToken *GovernanceTokenTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _GovernanceToken.Contract.RenounceOwnership(&_GovernanceToken.TransactOpts) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_GovernanceToken *GovernanceTokenTransactor) Transfer(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.contract.Transact(opts, "transfer", to, amount) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_GovernanceToken *GovernanceTokenSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.Transfer(&_GovernanceToken.TransactOpts, to, amount) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_GovernanceToken *GovernanceTokenTransactorSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.Transfer(&_GovernanceToken.TransactOpts, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_GovernanceToken *GovernanceTokenTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.contract.Transact(opts, "transferFrom", from, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_GovernanceToken *GovernanceTokenSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.TransferFrom(&_GovernanceToken.TransactOpts, from, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_GovernanceToken *GovernanceTokenTransactorSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.TransferFrom(&_GovernanceToken.TransactOpts, from, to, amount) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_GovernanceToken *GovernanceTokenTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _GovernanceToken.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_GovernanceToken *GovernanceTokenSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _GovernanceToken.Contract.TransferOwnership(&_GovernanceToken.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_GovernanceToken *GovernanceTokenTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _GovernanceToken.Contract.TransferOwnership(&_GovernanceToken.TransactOpts, newOwner) +} + +// GovernanceTokenApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the GovernanceToken contract. +type GovernanceTokenApprovalIterator struct { + Event *GovernanceTokenApproval // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GovernanceTokenApprovalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GovernanceTokenApproval) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GovernanceTokenApproval) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GovernanceTokenApprovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GovernanceTokenApprovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GovernanceTokenApproval represents a Approval event raised by the GovernanceToken contract. +type GovernanceTokenApproval struct { + Owner common.Address + Spender common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_GovernanceToken *GovernanceTokenFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*GovernanceTokenApprovalIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _GovernanceToken.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return &GovernanceTokenApprovalIterator{contract: _GovernanceToken.contract, event: "Approval", logs: logs, sub: sub}, nil +} + +// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_GovernanceToken *GovernanceTokenFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *GovernanceTokenApproval, owner []common.Address, spender []common.Address) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _GovernanceToken.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GovernanceTokenApproval) + if err := _GovernanceToken.contract.UnpackLog(event, "Approval", 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 +} + +// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_GovernanceToken *GovernanceTokenFilterer) ParseApproval(log types.Log) (*GovernanceTokenApproval, error) { + event := new(GovernanceTokenApproval) + if err := _GovernanceToken.contract.UnpackLog(event, "Approval", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GovernanceTokenDelegateChangedIterator is returned from FilterDelegateChanged and is used to iterate over the raw logs and unpacked data for DelegateChanged events raised by the GovernanceToken contract. +type GovernanceTokenDelegateChangedIterator struct { + Event *GovernanceTokenDelegateChanged // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GovernanceTokenDelegateChangedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GovernanceTokenDelegateChanged) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GovernanceTokenDelegateChanged) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GovernanceTokenDelegateChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GovernanceTokenDelegateChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GovernanceTokenDelegateChanged represents a DelegateChanged event raised by the GovernanceToken contract. +type GovernanceTokenDelegateChanged struct { + Delegator common.Address + FromDelegate common.Address + ToDelegate common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDelegateChanged is a free log retrieval operation binding the contract event 0x3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f. +// +// Solidity: event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate) +func (_GovernanceToken *GovernanceTokenFilterer) FilterDelegateChanged(opts *bind.FilterOpts, delegator []common.Address, fromDelegate []common.Address, toDelegate []common.Address) (*GovernanceTokenDelegateChangedIterator, error) { + + var delegatorRule []interface{} + for _, delegatorItem := range delegator { + delegatorRule = append(delegatorRule, delegatorItem) + } + var fromDelegateRule []interface{} + for _, fromDelegateItem := range fromDelegate { + fromDelegateRule = append(fromDelegateRule, fromDelegateItem) + } + var toDelegateRule []interface{} + for _, toDelegateItem := range toDelegate { + toDelegateRule = append(toDelegateRule, toDelegateItem) + } + + logs, sub, err := _GovernanceToken.contract.FilterLogs(opts, "DelegateChanged", delegatorRule, fromDelegateRule, toDelegateRule) + if err != nil { + return nil, err + } + return &GovernanceTokenDelegateChangedIterator{contract: _GovernanceToken.contract, event: "DelegateChanged", logs: logs, sub: sub}, nil +} + +// WatchDelegateChanged is a free log subscription operation binding the contract event 0x3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f. +// +// Solidity: event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate) +func (_GovernanceToken *GovernanceTokenFilterer) WatchDelegateChanged(opts *bind.WatchOpts, sink chan<- *GovernanceTokenDelegateChanged, delegator []common.Address, fromDelegate []common.Address, toDelegate []common.Address) (event.Subscription, error) { + + var delegatorRule []interface{} + for _, delegatorItem := range delegator { + delegatorRule = append(delegatorRule, delegatorItem) + } + var fromDelegateRule []interface{} + for _, fromDelegateItem := range fromDelegate { + fromDelegateRule = append(fromDelegateRule, fromDelegateItem) + } + var toDelegateRule []interface{} + for _, toDelegateItem := range toDelegate { + toDelegateRule = append(toDelegateRule, toDelegateItem) + } + + logs, sub, err := _GovernanceToken.contract.WatchLogs(opts, "DelegateChanged", delegatorRule, fromDelegateRule, toDelegateRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GovernanceTokenDelegateChanged) + if err := _GovernanceToken.contract.UnpackLog(event, "DelegateChanged", 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 +} + +// ParseDelegateChanged is a log parse operation binding the contract event 0x3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f. +// +// Solidity: event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate) +func (_GovernanceToken *GovernanceTokenFilterer) ParseDelegateChanged(log types.Log) (*GovernanceTokenDelegateChanged, error) { + event := new(GovernanceTokenDelegateChanged) + if err := _GovernanceToken.contract.UnpackLog(event, "DelegateChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GovernanceTokenDelegateVotesChangedIterator is returned from FilterDelegateVotesChanged and is used to iterate over the raw logs and unpacked data for DelegateVotesChanged events raised by the GovernanceToken contract. +type GovernanceTokenDelegateVotesChangedIterator struct { + Event *GovernanceTokenDelegateVotesChanged // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GovernanceTokenDelegateVotesChangedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GovernanceTokenDelegateVotesChanged) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GovernanceTokenDelegateVotesChanged) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GovernanceTokenDelegateVotesChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GovernanceTokenDelegateVotesChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GovernanceTokenDelegateVotesChanged represents a DelegateVotesChanged event raised by the GovernanceToken contract. +type GovernanceTokenDelegateVotesChanged struct { + Delegate common.Address + PreviousBalance *big.Int + NewBalance *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDelegateVotesChanged is a free log retrieval operation binding the contract event 0xdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724. +// +// Solidity: event DelegateVotesChanged(address indexed delegate, uint256 previousBalance, uint256 newBalance) +func (_GovernanceToken *GovernanceTokenFilterer) FilterDelegateVotesChanged(opts *bind.FilterOpts, delegate []common.Address) (*GovernanceTokenDelegateVotesChangedIterator, error) { + + var delegateRule []interface{} + for _, delegateItem := range delegate { + delegateRule = append(delegateRule, delegateItem) + } + + logs, sub, err := _GovernanceToken.contract.FilterLogs(opts, "DelegateVotesChanged", delegateRule) + if err != nil { + return nil, err + } + return &GovernanceTokenDelegateVotesChangedIterator{contract: _GovernanceToken.contract, event: "DelegateVotesChanged", logs: logs, sub: sub}, nil +} + +// WatchDelegateVotesChanged is a free log subscription operation binding the contract event 0xdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724. +// +// Solidity: event DelegateVotesChanged(address indexed delegate, uint256 previousBalance, uint256 newBalance) +func (_GovernanceToken *GovernanceTokenFilterer) WatchDelegateVotesChanged(opts *bind.WatchOpts, sink chan<- *GovernanceTokenDelegateVotesChanged, delegate []common.Address) (event.Subscription, error) { + + var delegateRule []interface{} + for _, delegateItem := range delegate { + delegateRule = append(delegateRule, delegateItem) + } + + logs, sub, err := _GovernanceToken.contract.WatchLogs(opts, "DelegateVotesChanged", delegateRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GovernanceTokenDelegateVotesChanged) + if err := _GovernanceToken.contract.UnpackLog(event, "DelegateVotesChanged", 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 +} + +// ParseDelegateVotesChanged is a log parse operation binding the contract event 0xdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724. +// +// Solidity: event DelegateVotesChanged(address indexed delegate, uint256 previousBalance, uint256 newBalance) +func (_GovernanceToken *GovernanceTokenFilterer) ParseDelegateVotesChanged(log types.Log) (*GovernanceTokenDelegateVotesChanged, error) { + event := new(GovernanceTokenDelegateVotesChanged) + if err := _GovernanceToken.contract.UnpackLog(event, "DelegateVotesChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GovernanceTokenEIP712DomainChangedIterator is returned from FilterEIP712DomainChanged and is used to iterate over the raw logs and unpacked data for EIP712DomainChanged events raised by the GovernanceToken contract. +type GovernanceTokenEIP712DomainChangedIterator struct { + Event *GovernanceTokenEIP712DomainChanged // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GovernanceTokenEIP712DomainChangedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GovernanceTokenEIP712DomainChanged) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GovernanceTokenEIP712DomainChanged) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GovernanceTokenEIP712DomainChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GovernanceTokenEIP712DomainChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GovernanceTokenEIP712DomainChanged represents a EIP712DomainChanged event raised by the GovernanceToken contract. +type GovernanceTokenEIP712DomainChanged struct { + Raw types.Log // Blockchain specific contextual infos +} + +// FilterEIP712DomainChanged is a free log retrieval operation binding the contract event 0x0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31. +// +// Solidity: event EIP712DomainChanged() +func (_GovernanceToken *GovernanceTokenFilterer) FilterEIP712DomainChanged(opts *bind.FilterOpts) (*GovernanceTokenEIP712DomainChangedIterator, error) { + + logs, sub, err := _GovernanceToken.contract.FilterLogs(opts, "EIP712DomainChanged") + if err != nil { + return nil, err + } + return &GovernanceTokenEIP712DomainChangedIterator{contract: _GovernanceToken.contract, event: "EIP712DomainChanged", logs: logs, sub: sub}, nil +} + +// WatchEIP712DomainChanged is a free log subscription operation binding the contract event 0x0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31. +// +// Solidity: event EIP712DomainChanged() +func (_GovernanceToken *GovernanceTokenFilterer) WatchEIP712DomainChanged(opts *bind.WatchOpts, sink chan<- *GovernanceTokenEIP712DomainChanged) (event.Subscription, error) { + + logs, sub, err := _GovernanceToken.contract.WatchLogs(opts, "EIP712DomainChanged") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GovernanceTokenEIP712DomainChanged) + if err := _GovernanceToken.contract.UnpackLog(event, "EIP712DomainChanged", 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 +} + +// ParseEIP712DomainChanged is a log parse operation binding the contract event 0x0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31. +// +// Solidity: event EIP712DomainChanged() +func (_GovernanceToken *GovernanceTokenFilterer) ParseEIP712DomainChanged(log types.Log) (*GovernanceTokenEIP712DomainChanged, error) { + event := new(GovernanceTokenEIP712DomainChanged) + if err := _GovernanceToken.contract.UnpackLog(event, "EIP712DomainChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GovernanceTokenOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the GovernanceToken contract. +type GovernanceTokenOwnershipTransferredIterator struct { + Event *GovernanceTokenOwnershipTransferred // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GovernanceTokenOwnershipTransferredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GovernanceTokenOwnershipTransferred) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GovernanceTokenOwnershipTransferred) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GovernanceTokenOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GovernanceTokenOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GovernanceTokenOwnershipTransferred represents a OwnershipTransferred event raised by the GovernanceToken contract. +type GovernanceTokenOwnershipTransferred struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_GovernanceToken *GovernanceTokenFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*GovernanceTokenOwnershipTransferredIterator, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _GovernanceToken.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &GovernanceTokenOwnershipTransferredIterator{contract: _GovernanceToken.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_GovernanceToken *GovernanceTokenFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *GovernanceTokenOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _GovernanceToken.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GovernanceTokenOwnershipTransferred) + if err := _GovernanceToken.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 +} + +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_GovernanceToken *GovernanceTokenFilterer) ParseOwnershipTransferred(log types.Log) (*GovernanceTokenOwnershipTransferred, error) { + event := new(GovernanceTokenOwnershipTransferred) + if err := _GovernanceToken.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GovernanceTokenTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the GovernanceToken contract. +type GovernanceTokenTransferIterator struct { + Event *GovernanceTokenTransfer // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GovernanceTokenTransferIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GovernanceTokenTransfer) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GovernanceTokenTransfer) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GovernanceTokenTransferIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GovernanceTokenTransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GovernanceTokenTransfer represents a Transfer event raised by the GovernanceToken contract. +type GovernanceTokenTransfer struct { + From common.Address + To common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_GovernanceToken *GovernanceTokenFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*GovernanceTokenTransferIterator, 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 := _GovernanceToken.contract.FilterLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return &GovernanceTokenTransferIterator{contract: _GovernanceToken.contract, event: "Transfer", logs: logs, sub: sub}, nil +} + +// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_GovernanceToken *GovernanceTokenFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *GovernanceTokenTransfer, 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 := _GovernanceToken.contract.WatchLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GovernanceTokenTransfer) + if err := _GovernanceToken.contract.UnpackLog(event, "Transfer", 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 +} + +// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_GovernanceToken *GovernanceTokenFilterer) ParseTransfer(log types.Log) (*GovernanceTokenTransfer, error) { + event := new(GovernanceTokenTransfer) + if err := _GovernanceToken.contract.UnpackLog(event, "Transfer", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/kroma-bindings/bindings/governancetoken_more.go b/kroma-bindings/bindings/governancetoken_more.go new file mode 100644 index 000000000..15eccab4b --- /dev/null +++ b/kroma-bindings/bindings/governancetoken_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const GovernanceTokenStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/governance/GovernanceToken.sol:GovernanceToken\",\"label\":\"_balances\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_mapping(t_address,t_uint256)\"},{\"astId\":1001,\"contract\":\"contracts/governance/GovernanceToken.sol:GovernanceToken\",\"label\":\"_allowances\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_mapping(t_address,t_mapping(t_address,t_uint256))\"},{\"astId\":1002,\"contract\":\"contracts/governance/GovernanceToken.sol:GovernanceToken\",\"label\":\"_totalSupply\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_uint256\"},{\"astId\":1003,\"contract\":\"contracts/governance/GovernanceToken.sol:GovernanceToken\",\"label\":\"_name\",\"offset\":0,\"slot\":\"3\",\"type\":\"t_string_storage\"},{\"astId\":1004,\"contract\":\"contracts/governance/GovernanceToken.sol:GovernanceToken\",\"label\":\"_symbol\",\"offset\":0,\"slot\":\"4\",\"type\":\"t_string_storage\"},{\"astId\":1005,\"contract\":\"contracts/governance/GovernanceToken.sol:GovernanceToken\",\"label\":\"_nameFallback\",\"offset\":0,\"slot\":\"5\",\"type\":\"t_string_storage\"},{\"astId\":1006,\"contract\":\"contracts/governance/GovernanceToken.sol:GovernanceToken\",\"label\":\"_versionFallback\",\"offset\":0,\"slot\":\"6\",\"type\":\"t_string_storage\"},{\"astId\":1007,\"contract\":\"contracts/governance/GovernanceToken.sol:GovernanceToken\",\"label\":\"_nonces\",\"offset\":0,\"slot\":\"7\",\"type\":\"t_mapping(t_address,t_struct(Counter)1014_storage)\"},{\"astId\":1008,\"contract\":\"contracts/governance/GovernanceToken.sol:GovernanceToken\",\"label\":\"_PERMIT_TYPEHASH_DEPRECATED_SLOT\",\"offset\":0,\"slot\":\"8\",\"type\":\"t_bytes32\"},{\"astId\":1009,\"contract\":\"contracts/governance/GovernanceToken.sol:GovernanceToken\",\"label\":\"_delegates\",\"offset\":0,\"slot\":\"9\",\"type\":\"t_mapping(t_address,t_address)\"},{\"astId\":1010,\"contract\":\"contracts/governance/GovernanceToken.sol:GovernanceToken\",\"label\":\"_checkpoints\",\"offset\":0,\"slot\":\"10\",\"type\":\"t_mapping(t_address,t_array(t_struct(Checkpoint)1013_storage)dyn_storage)\"},{\"astId\":1011,\"contract\":\"contracts/governance/GovernanceToken.sol:GovernanceToken\",\"label\":\"_totalSupplyCheckpoints\",\"offset\":0,\"slot\":\"11\",\"type\":\"t_array(t_struct(Checkpoint)1013_storage)dyn_storage\"},{\"astId\":1012,\"contract\":\"contracts/governance/GovernanceToken.sol:GovernanceToken\",\"label\":\"_owner\",\"offset\":0,\"slot\":\"12\",\"type\":\"t_address\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_struct(Checkpoint)1013_storage)dyn_storage\":{\"encoding\":\"dynamic_array\",\"label\":\"struct ERC20Votes.Checkpoint[]\",\"numberOfBytes\":\"32\",\"base\":\"t_struct(Checkpoint)1013_storage\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_address,t_address)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e address)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_address\"},\"t_mapping(t_address,t_array(t_struct(Checkpoint)1013_storage)dyn_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e struct ERC20Votes.Checkpoint[])\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_array(t_struct(Checkpoint)1013_storage)dyn_storage\"},\"t_mapping(t_address,t_mapping(t_address,t_uint256))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(address =\u003e uint256))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_address,t_uint256)\"},\"t_mapping(t_address,t_struct(Counter)1014_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e struct Counters.Counter)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_struct(Counter)1014_storage\"},\"t_mapping(t_address,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint256\"},\"t_string_storage\":{\"encoding\":\"bytes\",\"label\":\"string\",\"numberOfBytes\":\"32\"},\"t_struct(Checkpoint)1013_storage\":{\"encoding\":\"inplace\",\"label\":\"struct ERC20Votes.Checkpoint\",\"numberOfBytes\":\"32\"},\"t_struct(Counter)1014_storage\":{\"encoding\":\"inplace\",\"label\":\"struct Counters.Counter\",\"numberOfBytes\":\"32\"},\"t_uint224\":{\"encoding\":\"inplace\",\"label\":\"uint224\",\"numberOfBytes\":\"28\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint32\":{\"encoding\":\"inplace\",\"label\":\"uint32\",\"numberOfBytes\":\"4\"}}}" + +var GovernanceTokenStorageLayout = new(solc.StorageLayout) + +var GovernanceTokenDeployedBin = "0x608060405234801561001057600080fd5b50600436106101e55760003560e01c8063715018a61161010f5780639ab24eb0116100a2578063d505accf11610071578063d505accf14610445578063dd62ed3e14610458578063f1127ed814610491578063f2fde38b146104e357600080fd5b80639ab24eb0146103f9578063a457c2d71461040c578063a9059cbb1461041f578063c3cda5201461043257600080fd5b80638da5cb5b116100de5780638da5cb5b146103ae5780638e539e8c146103bf57806391ddadf4146103d257806395d89b41146103f157600080fd5b8063715018a61461036557806379cc67901461036d5780637ecebe001461038057806384b0196e1461039357600080fd5b80633a46b1a811610187578063587cde1e11610156578063587cde1e146102bd5780635c19a95c146103015780636fcfff451461031457806370a082311461033c57600080fd5b80633a46b1a81461027a57806340c10f191461028d57806342966c68146102a25780634bf5d7e9146102b557600080fd5b806323b872dd116101c357806323b872dd1461023d578063313ce567146102505780633644e5151461025f578063395093511461026757600080fd5b806306fdde03146101ea578063095ea7b31461020857806318160ddd1461022b575b600080fd5b6101f26104f6565b6040516101ff9190612435565b60405180910390f35b61021b610216366004612464565b610588565b60405190151581526020016101ff565b6002545b6040519081526020016101ff565b61021b61024b36600461248e565b6105a2565b604051601281526020016101ff565b61022f6105c6565b61021b610275366004612464565b6105d5565b61022f610288366004612464565b610614565b6102a061029b366004612464565b6106a2565b005b6102a06102b03660046124ca565b6106b8565b6101f26106c5565b6102e96102cb3660046124e3565b6001600160a01b039081166000908152600960205260409020541690565b6040516001600160a01b0390911681526020016101ff565b6102a061030f3660046124e3565b61075d565b6103276103223660046124e3565b610767565b60405163ffffffff90911681526020016101ff565b61022f61034a3660046124e3565b6001600160a01b031660009081526020819052604090205490565b6102a0610789565b6102a061037b366004612464565b61079d565b61022f61038e3660046124e3565b6107b2565b61039b6107d0565b6040516101ff97969594939291906124fe565b600c546001600160a01b03166102e9565b61022f6103cd3660046124ca565b610875565b6103da6108e0565b60405165ffffffffffff90911681526020016101ff565b6101f26108eb565b61022f6104073660046124e3565b6108fa565b61021b61041a366004612464565b6109a6565b61021b61042d366004612464565b610a50565b6102a06104403660046125c1565b610a5e565b6102a0610453366004612619565b610b94565b61022f610466366004612683565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6104a461049f3660046126b6565b610cf8565b60408051825163ffffffff1681526020928301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1692810192909252016101ff565b6102a06104f13660046124e3565b610d91565b606060038054610505906126f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610531906126f6565b801561057e5780601f106105535761010080835404028352916020019161057e565b820191906000526020600020905b81548152906001019060200180831161056157829003601f168201915b5050505050905090565b600033610596818585610e52565b60019150505b92915050565b6000336105b0858285610faa565b6105bb85858561103c565b506001949350505050565b60006105d061122f565b905090565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610596908290869061060f908790612772565b610e52565b600061061e6108e0565b65ffffffffffff1682106106795760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20667574757265206c6f6f6b75700000000000000060448201526064015b60405180910390fd5b6001600160a01b0383166000908152600a6020526040902061069b908361135a565b9392505050565b6106aa61146d565b6106b482826114c7565b5050565b6106c233826114d1565b50565b6060436106d06108e0565b65ffffffffffff16146107255760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a2062726f6b656e20636c6f636b206d6f64650000006044820152606401610670565b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b6106c233826114db565b6001600160a01b0381166000908152600a602052604081205461059c9061156c565b61079161146d565b61079b60006115ec565b565b6107a8823383610faa565b6106b482826114d1565b6001600160a01b03811660009081526007602052604081205461059c565b6000606080828080836108047f00000000000000000000000000000000000000000000000000000000000000006005611656565b61082f7f00000000000000000000000000000000000000000000000000000000000000006006611656565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b600061087f6108e0565b65ffffffffffff1682106108d55760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20667574757265206c6f6f6b7570000000000000006044820152606401610670565b61059c600b8361135a565b60006105d0436116fa565b606060048054610505906126f6565b6001600160a01b0381166000908152600a6020526040812054801561097e576001600160a01b0383166000908152600a6020526040902080546000198301908110610947576109476127b9565b60009182526020909120015464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16610981565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610a435760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610670565b6105bb8286868403610e52565b60003361059681858561103c565b83421115610aae5760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e617475726520657870697265640000006044820152606401610670565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610b2890610b209060a00160405160208183030381529060405280519060200120611778565b8585856117c0565b9050610b33816117e8565b8614610b815760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e6365000000000000006044820152606401610670565b610b8b81886114db565b50505050505050565b83421115610be45760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610670565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610c138c6117e8565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610c6e82611778565b90506000610c7e828787876117c0565b9050896001600160a01b0316816001600160a01b031614610ce15760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610670565b610cec8a8a8a610e52565b50505050505050505050565b60408051808201909152600080825260208201526001600160a01b0383166000908152600a60205260409020805463ffffffff8416908110610d3c57610d3c6127b9565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16918101919091529392505050565b610d9961146d565b6001600160a01b038116610e155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610670565b6106c2816115ec565b6000602083511015610e3a57610e3383611810565b905061059c565b81610e458482612836565b5060ff905061059c565b90565b6001600160a01b038316610ecd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610670565b6001600160a01b038216610f495760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610670565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461103657818110156110295760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610670565b6110368484848403610e52565b50505050565b6001600160a01b0383166110b85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610670565b6001600160a01b0382166111345760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610670565b6001600160a01b038316600090815260208190526040902054818110156111c35760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610670565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361103684848461186c565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561128857507f000000000000000000000000000000000000000000000000000000000000000046145b156112b257507f000000000000000000000000000000000000000000000000000000000000000090565b6105d0604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8154600090818160058111156113b457600061137584611877565b61137f9085612914565b600088815260209020909150869082015463ffffffff1611156113a4578091506113b2565b6113af816001612772565b92505b505b808210156114015760006113c8838361195f565b600088815260209020909150869082015463ffffffff1611156113ed578091506113fb565b6113f8816001612772565b92505b506113b4565b8015611442576000868152602090208101600019015464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16611445565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169695505050505050565b600c546001600160a01b0316331461079b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610670565b6106b4828261197a565b6106b48282611a26565b6001600160a01b038281166000818152600960208181526040808420805485845282862054949093528787167fffffffffffffffffffffffff00000000000000000000000000000000000000008416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611036828483611a3e565b600063ffffffff8211156115e85760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201527f32206269747300000000000000000000000000000000000000000000000000006064820152608401610670565b5090565b600c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606060ff831461166957610e3383611b7b565b818054611675906126f6565b80601f01602080910402602001604051908101604052809291908181526020018280546116a1906126f6565b80156116ee5780601f106116c3576101008083540402835291602001916116ee565b820191906000526020600020905b8154815290600101906020018083116116d157829003601f168201915b5050505050905061059c565b600065ffffffffffff8211156115e85760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201527f38206269747300000000000000000000000000000000000000000000000000006064820152608401610670565b600061059c61178561122f565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006117d187878787611bba565b915091506117de81611c9c565b5095945050505050565b6001600160a01b03811660009081526007602052604090208054600181018255905b50919050565b600080829050601f8151111561185457826040517f305a27a90000000000000000000000000000000000000000000000000000000081526004016106709190612435565b805161185f8261292b565b179392505050565b505050565b611867838383611e01565b60008160000361188957506000919050565b6000600161189684611e33565b901c6001901b905060018184816118af576118af61294f565b048201901c905060018184816118c7576118c761294f565b048201901c905060018184816118df576118df61294f565b048201901c905060018184816118f7576118f761294f565b048201901c9050600181848161190f5761190f61294f565b048201901c905060018184816119275761192761294f565b048201901c9050600181848161193f5761193f61294f565b048201901c905061069b818285816119595761195961294f565b04611ec7565b600061196e600284841861297e565b61069b90848416612772565b6119848282611edd565b6002547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1015611a185760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201527f766572666c6f77696e6720766f746573000000000000000000000000000000006064820152608401610670565b611036600b611fa483611fb0565b611a308282612179565b611036600b6122e983611fb0565b816001600160a01b0316836001600160a01b031614158015611a605750600081115b15611867576001600160a01b03831615611aee576001600160a01b0383166000908152600a602052604081208190611a9b906122e985611fb0565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611ae3929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615611867576001600160a01b0382166000908152600a602052604081208190611b2490611fa485611fb0565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611b6c929190918252602082015260400190565b60405180910390a25050505050565b60606000611b88836122f5565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611bf15750600090506003611c93565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611c45573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519150506001600160a01b038116611c8c57600060019250925050611c93565b9150600090505b94509492505050565b6000816004811115611cb057611cb06129b9565b03611cb85750565b6001816004811115611ccc57611ccc6129b9565b03611d195760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610670565b6002816004811115611d2d57611d2d6129b9565b03611d7a5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610670565b6003816004811115611d8e57611d8e6129b9565b036106c25760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610670565b6001600160a01b0383811660009081526009602052604080822054858416835291205461186792918216911683611a3e565b600080608083901c15611e4857608092831c92015b604083901c15611e5a57604092831c92015b602083901c15611e6c57602092831c92015b601083901c15611e7e57601092831c92015b600883901c15611e9057600892831c92015b600483901c15611ea257600492831c92015b600283901c15611eb457600292831c92015b600183901c1561059c5760010192915050565b6000818310611ed6578161069b565b5090919050565b6001600160a01b038216611f335760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610670565b8060026000828254611f459190612772565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36106b46000838361186c565b600061069b8284612772565b825460009081908181156120125760008781526020902082016000190160408051808201909152905463ffffffff8116825264010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166020820152612027565b60408051808201909152600080825260208201525b905080602001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16935061205c84868863ffffffff16565b925060008211801561208657506120716108e0565b65ffffffffffff16816000015163ffffffff16145b156120e05761209483612336565b60008881526020902083016000190180547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092166401000000000263ffffffff90921691909117905561216f565b8660405180604001604052806121046120f76108e0565b65ffffffffffff1661156c565b63ffffffff16815260200161211886612336565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b5050935093915050565b6001600160a01b0382166121f55760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610670565b6001600160a01b038216600090815260208190526040902054818110156122845760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610670565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36118678360008461186c565b600061069b8284612914565b600060ff8216601f81111561059c576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8211156115e85760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203260448201527f32342062697473000000000000000000000000000000000000000000000000006064820152608401610670565b6000815180845260005b818110156123f0576020818501810151868301820152016123d4565b81811115612402576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061069b60208301846123ca565b80356001600160a01b038116811461245f57600080fd5b919050565b6000806040838503121561247757600080fd5b61248083612448565b946020939093013593505050565b6000806000606084860312156124a357600080fd5b6124ac84612448565b92506124ba60208501612448565b9150604084013590509250925092565b6000602082840312156124dc57600080fd5b5035919050565b6000602082840312156124f557600080fd5b61069b82612448565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e08184015261253a60e084018a6123ca565b838103604085015261254c818a6123ca565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b8181101561259e57835183529284019291840191600101612582565b50909c9b505050505050505050505050565b803560ff8116811461245f57600080fd5b60008060008060008060c087890312156125da57600080fd5b6125e387612448565b955060208701359450604087013593506125ff606088016125b0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561263457600080fd5b61263d88612448565b965061264b60208901612448565b95506040880135945060608801359350612667608089016125b0565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561269657600080fd5b61269f83612448565b91506126ad60208401612448565b90509250929050565b600080604083850312156126c957600080fd5b6126d283612448565b9150602083013563ffffffff811681146126eb57600080fd5b809150509250929050565b600181811c9082168061270a57607f821691505b60208210810361180a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561278557612785612743565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b601f82111561186757600081815260208120601f850160051c8101602086101561280f5750805b601f850160051c820191505b8181101561282e5782815560010161281b565b505050505050565b815167ffffffffffffffff8111156128505761285061278a565b6128648161285e84546126f6565b846127e8565b602080601f83116001811461289957600084156128815750858301515b600019600386901b1c1916600185901b17855561282e565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156128e6578886015182559484019460019091019084016128c7565b50858210156129045787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008282101561292657612926612743565b500390565b8051602080830151919081101561180a5760001960209190910360031b1b16919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826129b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(GovernanceTokenStorageLayoutJSON), GovernanceTokenStorageLayout); err != nil { + panic(err) + } + + layouts["GovernanceToken"] = GovernanceTokenStorageLayout + deployedBytecodes["GovernanceToken"] = GovernanceTokenDeployedBin +} diff --git a/op-bindings/bindings/kromamintableerc20.go b/kroma-bindings/bindings/kromamintableerc20.go similarity index 100% rename from op-bindings/bindings/kromamintableerc20.go rename to kroma-bindings/bindings/kromamintableerc20.go diff --git a/kroma-bindings/bindings/kromamintableerc20_more.go b/kroma-bindings/bindings/kromamintableerc20_more.go new file mode 100644 index 000000000..8707dc524 --- /dev/null +++ b/kroma-bindings/bindings/kromamintableerc20_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const KromaMintableERC20StorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/universal/KromaMintableERC20.sol:KromaMintableERC20\",\"label\":\"_balances\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_mapping(t_address,t_uint256)\"},{\"astId\":1001,\"contract\":\"contracts/universal/KromaMintableERC20.sol:KromaMintableERC20\",\"label\":\"_allowances\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_mapping(t_address,t_mapping(t_address,t_uint256))\"},{\"astId\":1002,\"contract\":\"contracts/universal/KromaMintableERC20.sol:KromaMintableERC20\",\"label\":\"_totalSupply\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_uint256\"},{\"astId\":1003,\"contract\":\"contracts/universal/KromaMintableERC20.sol:KromaMintableERC20\",\"label\":\"_name\",\"offset\":0,\"slot\":\"3\",\"type\":\"t_string_storage\"},{\"astId\":1004,\"contract\":\"contracts/universal/KromaMintableERC20.sol:KromaMintableERC20\",\"label\":\"_symbol\",\"offset\":0,\"slot\":\"4\",\"type\":\"t_string_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_mapping(t_address,t_mapping(t_address,t_uint256))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(address =\u003e uint256))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_address,t_uint256)\"},\"t_mapping(t_address,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint256\"},\"t_string_storage\":{\"encoding\":\"bytes\",\"label\":\"string\",\"numberOfBytes\":\"32\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"}}}" + +var KromaMintableERC20StorageLayout = new(solc.StorageLayout) + +var KromaMintableERC20DeployedBin = "0x608060405234801561001057600080fd5b506004361061011b5760003560e01c806340c10f19116100b25780639dc29fac11610081578063a9059cbb11610066578063a9059cbb14610284578063dd62ed3e14610297578063ee9a31a2146102dd57600080fd5b80639dc29fac1461025e578063a457c2d71461027157600080fd5b806340c10f191461020357806354fd4d501461021857806370a082311461022057806395d89b411461025657600080fd5b806318160ddd116100ee57806318160ddd146101bc57806323b872dd146101ce578063313ce567146101e157806339509351146101f057600080fd5b806301ffc9a714610120578063033964be1461014857806306fdde0314610194578063095ea7b3146101a9575b600080fd5b61013361012e3660046110a0565b610304565b60405190151581526020015b60405180910390f35b61016f7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b61019c6103a4565b60405161013f9190611115565b6101336101b736600461118f565b610436565b6002545b60405190815260200161013f565b6101336101dc3660046111b9565b61044e565b6040516012815260200161013f565b6101336101fe36600461118f565b610472565b61021661021136600461118f565b6104be565b005b61019c6105cc565b6101c061022e3660046111f5565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61019c61066f565b61021661026c36600461118f565b61067e565b61013361027f36600461118f565b61077b565b61013361029236600461118f565b610832565b6101c06102a5366004611210565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61016f7f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007f30a0c5a9000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000841682148061039c57507fffffffff00000000000000000000000000000000000000000000000000000000848116908216145b949350505050565b6060600380546103b390611243565b80601f01602080910402602001604051908101604052809291908181526020018280546103df90611243565b801561042c5780601f106104015761010080835404028352916020019161042c565b820191906000526020600020905b81548152906001019060200180831161040f57829003601f168201915b5050505050905090565b600033610444818585610840565b5060019392505050565b60003361045c8582856109c0565b610467858585610a7d565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061044490829086906104b9908790611296565b610840565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461056e5760405162461bcd60e51b815260206004820152603160248201527f4b726f6d614d696e7461626c6545524332303a206f6e6c79206272696467652060448201527f63616e206d696e7420616e64206275726e00000000000000000000000000000060648201526084015b60405180910390fd5b6105788282610c9e565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885826040516105c091815260200190565b60405180910390a25050565b60606105f77f0000000000000000000000000000000000000000000000000000000000000000610d77565b6106207f0000000000000000000000000000000000000000000000000000000000000000610d77565b6106497f0000000000000000000000000000000000000000000000000000000000000000610d77565b60405160200161065b939291906112d5565b604051602081830303815290604052905090565b6060600480546103b390611243565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146107295760405162461bcd60e51b815260206004820152603160248201527f4b726f6d614d696e7461626c6545524332303a206f6e6c79206272696467652060448201527f63616e206d696e7420616e64206275726e0000000000000000000000000000006064820152608401610565565b6107338282610e35565b8173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040516105c091815260200190565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156108255760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610565565b6104678286868403610840565b600033610444818585610a7d565b73ffffffffffffffffffffffffffffffffffffffff83166108c85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610565565b73ffffffffffffffffffffffffffffffffffffffff82166109515760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610565565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a775781811015610a6a5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610565565b610a778484848403610840565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b065760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610565565b73ffffffffffffffffffffffffffffffffffffffff8216610b8f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610565565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610c2b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610565565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610a77565b73ffffffffffffffffffffffffffffffffffffffff8216610d015760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610565565b8060026000828254610d139190611296565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60606000610d8483610fbd565b600101905060008167ffffffffffffffff811115610da457610da461134b565b6040519080825280601f01601f191660200182016040528015610dce576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084610dd857509392505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ebe5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610565565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610f5a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610565565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016109b3565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611006577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611032576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061105057662386f26fc10000830492506010015b6305f5e1008310611068576305f5e100830492506008015b612710831061107c57612710830492506004015b6064831061108e576064830492506002015b600a831061109a576001015b92915050565b6000602082840312156110b257600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146110e257600080fd5b9392505050565b60005b838110156111045781810151838201526020016110ec565b83811115610a775750506000910152565b60208152600082518060208401526111348160408501602087016110e9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461118a57600080fd5b919050565b600080604083850312156111a257600080fd5b6111ab83611166565b946020939093013593505050565b6000806000606084860312156111ce57600080fd5b6111d784611166565b92506111e560208501611166565b9150604084013590509250925092565b60006020828403121561120757600080fd5b6110e282611166565b6000806040838503121561122357600080fd5b61122c83611166565b915061123a60208401611166565b90509250929050565b600181811c9082168061125757607f821691505b602082108103611290577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082198211156112d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b600084516112e78184602089016110e9565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611323816001850160208a016110e9565b6001920191820152835161133e8160028401602088016110e9565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(KromaMintableERC20StorageLayoutJSON), KromaMintableERC20StorageLayout); err != nil { + panic(err) + } + + layouts["KromaMintableERC20"] = KromaMintableERC20StorageLayout + deployedBytecodes["KromaMintableERC20"] = KromaMintableERC20DeployedBin +} diff --git a/op-bindings/bindings/kromamintableerc20factory.go b/kroma-bindings/bindings/kromamintableerc20factory.go similarity index 100% rename from op-bindings/bindings/kromamintableerc20factory.go rename to kroma-bindings/bindings/kromamintableerc20factory.go diff --git a/op-bindings/bindings/kromamintableerc20factory_more.go b/kroma-bindings/bindings/kromamintableerc20factory_more.go similarity index 100% rename from op-bindings/bindings/kromamintableerc20factory_more.go rename to kroma-bindings/bindings/kromamintableerc20factory_more.go diff --git a/kroma-bindings/bindings/kromamintableerc721.go b/kroma-bindings/bindings/kromamintableerc721.go new file mode 100644 index 000000000..5875ec53c --- /dev/null +++ b/kroma-bindings/bindings/kromamintableerc721.go @@ -0,0 +1,1707 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// KromaMintableERC721MetaData contains all meta data concerning the KromaMintableERC721 contract. +var KromaMintableERC721MetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bridge\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_remoteChainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BRIDGE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REMOTE_CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REMOTE_TOKEN\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseTokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"remoteChainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"remoteToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"safeMint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x6101406040523480156200001257600080fd5b5060405162002fb738038062002fb78339810160408190526200003591620006a1565b6001600080848482620000498382620007ca565b506001620000588282620007ca565b50505060809290925260a05260c0526001600160a01b038516620000dc5760405162461bcd60e51b815260206004820152603060248201527f4b726f6d614d696e7461626c654552433732313a206272696467652063616e6e60448201526f6f74206265206164647265737328302960801b60648201526084015b60405180910390fd5b83600003620001545760405162461bcd60e51b815260206004820152603360248201527f4b726f6d614d696e7461626c654552433732313a2072656d6f7465206368616960448201527f6e2069642063616e6e6f74206265207a65726f000000000000000000000000006064820152608401620000d3565b6001600160a01b038316620001d25760405162461bcd60e51b815260206004820152603660248201527f4b726f6d614d696e7461626c654552433732313a2072656d6f746520746f6b6560448201527f6e2063616e6e6f742062652061646472657373283029000000000000000000006064820152608401620000d3565b60e08490526001600160a01b0383811661010081905290861661012052620002089060146200025c602090811b62000df417901c565b6200021e856200041c60201b6200101d1760201c565b6040516020016200023192919062000896565b604051602081830303815290604052600a9081620002509190620007ca565b5050505050506200098d565b606060006200026d83600262000920565b6200027a90600262000942565b6001600160401b03811115620002945762000294620005c7565b6040519080825280601f01601f191660200182016040528015620002bf576020820181803683370190505b509050600360fc1b81600081518110620002dd57620002dd6200095d565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106200030f576200030f6200095d565b60200101906001600160f81b031916908160001a90535060006200033584600262000920565b6200034290600162000942565b90505b6001811115620003c4576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106200037a576200037a6200095d565b1a60f81b8282815181106200039357620003936200095d565b60200101906001600160f81b031916908160001a90535060049490941c93620003bc8162000973565b905062000345565b508315620004155760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401620000d3565b9392505050565b606060006200043683620004c060201b620010db1760201c565b60010190506000816001600160401b03811115620004585762000458620005c7565b6040519080825280601f01601f19166020018201604052801562000483576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846200048d57509392505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106200050a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831062000537576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106200055657662386f26fc10000830492506010015b6305f5e10083106200056f576305f5e100830492506008015b61271083106200058457612710830492506004015b6064831062000597576064830492506002015b600a8310620005a4576001015b92915050565b80516001600160a01b0381168114620005c257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620005fa578181015183820152602001620005e0565b838111156200060a576000848401525b50505050565b600082601f8301126200062257600080fd5b81516001600160401b03808211156200063f576200063f620005c7565b604051601f8301601f19908116603f011681019082821181831017156200066a576200066a620005c7565b816040528381528660208588010111156200068457600080fd5b62000697846020830160208901620005dd565b9695505050505050565b600080600080600060a08688031215620006ba57600080fd5b620006c586620005aa565b945060208601519350620006dc60408701620005aa565b60608701519093506001600160401b0380821115620006fa57600080fd5b6200070889838a0162000610565b935060808801519150808211156200071f57600080fd5b506200072e8882890162000610565b9150509295509295909350565b600181811c908216806200075057607f821691505b6020821081036200077157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620007c557600081815260208120601f850160051c81016020861015620007a05750805b601f850160051c820191505b81811015620007c157828155600101620007ac565b5050505b505050565b81516001600160401b03811115620007e657620007e6620005c7565b620007fe81620007f784546200073b565b8462000777565b602080601f8311600181146200083657600084156200081d5750858301515b600019600386901b1c1916600185901b178555620007c1565b600085815260208120601f198616915b82811015620008675788860151825594840194600190910190840162000846565b5085821015620008865787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6832ba3432b932bab69d60b91b815260008351620008bc816009850160208801620005dd565b600160fe1b6009918401918201528351620008df81600a840160208801620005dd565b712f746f6b656e5552493f75696e743235363d60701b600a9290910191820152601c01949350505050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156200093d576200093d6200090a565b500290565b600082198211156200095857620009586200090a565b500190565b634e487b7160e01b600052603260045260246000fd5b6000816200098557620009856200090a565b506000190190565b60805160a05160c05160e05161010051610120516125b762000a00600039600081816103a10152818161042c01528181610a9c0152610b8a0152600081816101e0015261037b0152600081816102e801526103c7015260006109330152600061090a015260006108e101526125b76000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c80637d1d0c5b116100ee578063c87b56dd11610097578063e78cea9211610071578063e78cea921461039f578063e9518196146103c5578063e985e9c5146103eb578063ee9a31a21461042757600080fd5b8063c87b56dd1461035e578063d547cfb714610371578063d6c0b2c41461037957600080fd5b8063a1448194116100c8578063a144819414610325578063a22cb46514610338578063b88d4fde1461034b57600080fd5b80637d1d0c5b146102e357806395d89b411461030a5780639dc29fac1461031257600080fd5b806323b872dd1161015b5780634f6ccce7116101355780634f6ccce7146102a257806354fd4d50146102b55780636352211e146102bd57806370a08231146102d057600080fd5b806323b872dd146102695780632f745c591461027c57806342842e0e1461028f57600080fd5b8063081812fc1161018c578063081812fc1461022f578063095ea7b31461024257806318160ddd1461025757600080fd5b806301ffc9a7146101b3578063033964be146101db57806306fdde031461021a575b600080fd5b6101c66101c1366004612037565b61044e565b60405190151581526020015b60405180910390f35b6102027f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101d2565b6102226104fd565b6040516101d291906120ca565b61020261023d3660046120dd565b61058f565b610255610250366004612112565b6105b6565b005b6008545b6040519081526020016101d2565b61025561027736600461213c565b6106ec565b61025b61028a366004612112565b610773565b61025561029d36600461213c565b61081b565b61025b6102b03660046120dd565b610836565b6102226108da565b6102026102cb3660046120dd565b61097d565b61025b6102de366004612178565b6109e8565b61025b7f000000000000000000000000000000000000000000000000000000000000000081565b610222610a82565b610255610320366004612112565b610a91565b610255610333366004612112565b610b7f565b610255610346366004612193565b610c62565b6102556103593660046121fe565b610c71565b61022261036c3660046120dd565b610cff565b610222610d66565b7f0000000000000000000000000000000000000000000000000000000000000000610202565b7f0000000000000000000000000000000000000000000000000000000000000000610202565b7f000000000000000000000000000000000000000000000000000000000000000061025b565b6101c66103f93660046122f8565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6102027f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007f74259ebf000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000084168214806104e657507fffffffff00000000000000000000000000000000000000000000000000000000848116908216145b806104f557506104f5846111bd565b949350505050565b60606000805461050c9061232b565b80601f01602080910402602001604051908101604052809291908181526020018280546105389061232b565b80156105855780601f1061055a57610100808354040283529160200191610585565b820191906000526020600020905b81548152906001019060200180831161056857829003601f168201915b5050505050905090565b600061059a82611213565b506000908152600460205260409020546001600160a01b031690565b60006105c18261097d565b9050806001600160a01b0316836001600160a01b03160361064f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b336001600160a01b038216148061066b575061066b81336103f9565b6106dd5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610646565b6106e7838361127a565b505050565b6106f63382611300565b6107685760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610646565b6106e783838361137e565b600061077e836109e8565b82106107f25760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610646565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6106e783838360405180602001604052806000815250610c71565b600061084160085490565b82106108b55760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610646565b600882815481106108c8576108c861237e565b90600052602060002001549050919050565b60606109057f000000000000000000000000000000000000000000000000000000000000000061101d565b61092e7f000000000000000000000000000000000000000000000000000000000000000061101d565b6109577f000000000000000000000000000000000000000000000000000000000000000061101d565b604051602001610969939291906123ad565b604051602081830303815290604052905090565b6000818152600260205260408120546001600160a01b0316806109e25760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610646565b92915050565b60006001600160a01b038216610a665760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152608401610646565b506001600160a01b031660009081526003602052604090205490565b60606001805461050c9061232b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b2f5760405162461bcd60e51b815260206004820152603760248201527f4b726f6d614d696e7461626c654552433732313a206f6e6c792062726964676560448201527f2063616e2063616c6c20746869732066756e6374696f6e0000000000000000006064820152608401610646565b610b38816115ea565b816001600160a01b03167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca582604051610b7391815260200190565b60405180910390a25050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c1d5760405162461bcd60e51b815260206004820152603760248201527f4b726f6d614d696e7461626c654552433732313a206f6e6c792062726964676560448201527f2063616e2063616c6c20746869732066756e6374696f6e0000000000000000006064820152608401610646565b610c2782826116c3565b816001600160a01b03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688582604051610b7391815260200190565b610c6d3383836116dd565b5050565b610c7b3383611300565b610ced5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610646565b610cf9848484846117c9565b50505050565b6060610d0a82611213565b6000610d14611852565b90506000815111610d345760405180602001604052806000815250610d5f565b80610d3e8461101d565b604051602001610d4f929190612423565b6040516020818303038152906040525b9392505050565b600a8054610d739061232b565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9f9061232b565b8015610dec5780601f10610dc157610100808354040283529160200191610dec565b820191906000526020600020905b815481529060010190602001808311610dcf57829003601f168201915b505050505081565b60606000610e03836002612481565b610e0e9060026124be565b67ffffffffffffffff811115610e2657610e266121cf565b6040519080825280601f01601f191660200182016040528015610e50576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110610e8757610e8761237e565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110610eea57610eea61237e565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000610f26846002612481565b610f319060016124be565b90505b6001811115610fce577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110610f7257610f7261237e565b1a60f81b828281518110610f8857610f8861237e565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93610fc7816124d6565b9050610f34565b508315610d5f5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610646565b6060600061102a836110db565b600101905060008167ffffffffffffffff81111561104a5761104a6121cf565b6040519080825280601f01601f191660200182016040528015611074576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461107e57509392505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611124577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611150576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061116e57662386f26fc10000830492506010015b6305f5e1008310611186576305f5e100830492506008015b612710831061119a57612710830492506004015b606483106111ac576064830492506002015b600a83106109e25760010192915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d630000000000000000000000000000000000000000000000000000000014806109e257506109e282611861565b6000818152600260205260409020546001600160a01b03166112775760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610646565b50565b600081815260046020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03841690811790915581906112c78261097d565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061130c8361097d565b9050806001600160a01b0316846001600160a01b0316148061135357506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806104f55750836001600160a01b031661136c8461058f565b6001600160a01b031614949350505050565b826001600160a01b03166113918261097d565b6001600160a01b03161461140d5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610646565b6001600160a01b0382166114885760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610646565b6114958383836001611944565b826001600160a01b03166114a88261097d565b6001600160a01b0316146115245760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610646565b600081815260046020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169091556001600160a01b038781168086526003855283862080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006115f58261097d565b9050611605816000846001611944565b61160e8261097d565b600083815260046020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169091556001600160a01b0385168085526003845282852080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b610c6d828260405180602001604052806000815250611a80565b816001600160a01b0316836001600160a01b03160361173e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610646565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6117d484848461137e565b6117e084848484611b09565b610cf95760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610646565b6060600a805461050c9061232b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806118f457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806109e257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146109e2565b60018111156119bb5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e736563757469766520747260448201527f616e7366657273206e6f7420737570706f7274656400000000000000000000006064820152608401610646565b816001600160a01b038516611a1757611a1281600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611a3a565b836001600160a01b0316856001600160a01b031614611a3a57611a3a8582611cc8565b6001600160a01b038416611a5657611a5181611d65565b611a79565b846001600160a01b0316846001600160a01b031614611a7957611a798482611e14565b5050505050565b611a8a8383611e58565b611a976000848484611b09565b6106e75760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610646565b60006001600160a01b0384163b15611cbd576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290611b6690339089908890889060040161250b565b6020604051808303816000875af1925050508015611bbf575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611bbc91810190612547565b60015b611c72573d808015611bed576040519150601f19603f3d011682016040523d82523d6000602084013e611bf2565b606091505b508051600003611c6a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610646565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001490506104f5565b506001949350505050565b60006001611cd5846109e8565b611cdf9190612564565b600083815260076020526040902054909150808214611d32576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611d7790600190612564565b60008381526009602052604081205460088054939450909284908110611d9f57611d9f61237e565b906000526020600020015490508060088381548110611dc057611dc061237e565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611df857611df861257b565b6001900381819060005260206000200160009055905550505050565b6000611e1f836109e8565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216611eae5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610646565b6000818152600260205260409020546001600160a01b031615611f135760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610646565b611f21600083836001611944565b6000818152600260205260409020546001600160a01b031615611f865760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610646565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461127757600080fd5b60006020828403121561204957600080fd5b8135610d5f81612009565b60005b8381101561206f578181015183820152602001612057565b83811115610cf95750506000910152565b60008151808452612098816020860160208601612054565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610d5f6020830184612080565b6000602082840312156120ef57600080fd5b5035919050565b80356001600160a01b038116811461210d57600080fd5b919050565b6000806040838503121561212557600080fd5b61212e836120f6565b946020939093013593505050565b60008060006060848603121561215157600080fd5b61215a846120f6565b9250612168602085016120f6565b9150604084013590509250925092565b60006020828403121561218a57600080fd5b610d5f826120f6565b600080604083850312156121a657600080fd5b6121af836120f6565b9150602083013580151581146121c457600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000806080858703121561221457600080fd5b61221d856120f6565b935061222b602086016120f6565b925060408501359150606085013567ffffffffffffffff8082111561224f57600080fd5b818701915087601f83011261226357600080fd5b813581811115612275576122756121cf565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156122bb576122bb6121cf565b816040528281528a60208487010111156122d457600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561230b57600080fd5b612314836120f6565b9150612322602084016120f6565b90509250929050565b600181811c9082168061233f57607f821691505b602082108103612378577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600084516123bf818460208901612054565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516123fb816001850160208a01612054565b60019201918201528351612416816002840160208801612054565b0160020195945050505050565b60008351612435818460208801612054565b835190830190612449818360208801612054565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156124b9576124b9612452565b500290565b600082198211156124d1576124d1612452565b500190565b6000816124e5576124e5612452565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261253d6080830184612080565b9695505050505050565b60006020828403121561255957600080fd5b8151610d5f81612009565b60008282101561257657612576612452565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c634300080f000a", +} + +// KromaMintableERC721ABI is the input ABI used to generate the binding from. +// Deprecated: Use KromaMintableERC721MetaData.ABI instead. +var KromaMintableERC721ABI = KromaMintableERC721MetaData.ABI + +// KromaMintableERC721Bin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use KromaMintableERC721MetaData.Bin instead. +var KromaMintableERC721Bin = KromaMintableERC721MetaData.Bin + +// DeployKromaMintableERC721 deploys a new Ethereum contract, binding an instance of KromaMintableERC721 to it. +func DeployKromaMintableERC721(auth *bind.TransactOpts, backend bind.ContractBackend, _bridge common.Address, _remoteChainId *big.Int, _remoteToken common.Address, _name string, _symbol string) (common.Address, *types.Transaction, *KromaMintableERC721, error) { + parsed, err := KromaMintableERC721MetaData.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(KromaMintableERC721Bin), backend, _bridge, _remoteChainId, _remoteToken, _name, _symbol) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &KromaMintableERC721{KromaMintableERC721Caller: KromaMintableERC721Caller{contract: contract}, KromaMintableERC721Transactor: KromaMintableERC721Transactor{contract: contract}, KromaMintableERC721Filterer: KromaMintableERC721Filterer{contract: contract}}, nil +} + +// KromaMintableERC721 is an auto generated Go binding around an Ethereum contract. +type KromaMintableERC721 struct { + KromaMintableERC721Caller // Read-only binding to the contract + KromaMintableERC721Transactor // Write-only binding to the contract + KromaMintableERC721Filterer // Log filterer for contract events +} + +// KromaMintableERC721Caller is an auto generated read-only Go binding around an Ethereum contract. +type KromaMintableERC721Caller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// KromaMintableERC721Transactor is an auto generated write-only Go binding around an Ethereum contract. +type KromaMintableERC721Transactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// KromaMintableERC721Filterer is an auto generated log filtering Go binding around an Ethereum contract events. +type KromaMintableERC721Filterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// KromaMintableERC721Session is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type KromaMintableERC721Session struct { + Contract *KromaMintableERC721 // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// KromaMintableERC721CallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type KromaMintableERC721CallerSession struct { + Contract *KromaMintableERC721Caller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// KromaMintableERC721TransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type KromaMintableERC721TransactorSession struct { + Contract *KromaMintableERC721Transactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// KromaMintableERC721Raw is an auto generated low-level Go binding around an Ethereum contract. +type KromaMintableERC721Raw struct { + Contract *KromaMintableERC721 // Generic contract binding to access the raw methods on +} + +// KromaMintableERC721CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type KromaMintableERC721CallerRaw struct { + Contract *KromaMintableERC721Caller // Generic read-only contract binding to access the raw methods on +} + +// KromaMintableERC721TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type KromaMintableERC721TransactorRaw struct { + Contract *KromaMintableERC721Transactor // Generic write-only contract binding to access the raw methods on +} + +// NewKromaMintableERC721 creates a new instance of KromaMintableERC721, bound to a specific deployed contract. +func NewKromaMintableERC721(address common.Address, backend bind.ContractBackend) (*KromaMintableERC721, error) { + contract, err := bindKromaMintableERC721(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &KromaMintableERC721{KromaMintableERC721Caller: KromaMintableERC721Caller{contract: contract}, KromaMintableERC721Transactor: KromaMintableERC721Transactor{contract: contract}, KromaMintableERC721Filterer: KromaMintableERC721Filterer{contract: contract}}, nil +} + +// NewKromaMintableERC721Caller creates a new read-only instance of KromaMintableERC721, bound to a specific deployed contract. +func NewKromaMintableERC721Caller(address common.Address, caller bind.ContractCaller) (*KromaMintableERC721Caller, error) { + contract, err := bindKromaMintableERC721(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &KromaMintableERC721Caller{contract: contract}, nil +} + +// NewKromaMintableERC721Transactor creates a new write-only instance of KromaMintableERC721, bound to a specific deployed contract. +func NewKromaMintableERC721Transactor(address common.Address, transactor bind.ContractTransactor) (*KromaMintableERC721Transactor, error) { + contract, err := bindKromaMintableERC721(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &KromaMintableERC721Transactor{contract: contract}, nil +} + +// NewKromaMintableERC721Filterer creates a new log filterer instance of KromaMintableERC721, bound to a specific deployed contract. +func NewKromaMintableERC721Filterer(address common.Address, filterer bind.ContractFilterer) (*KromaMintableERC721Filterer, error) { + contract, err := bindKromaMintableERC721(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &KromaMintableERC721Filterer{contract: contract}, nil +} + +// bindKromaMintableERC721 binds a generic wrapper to an already deployed contract. +func bindKromaMintableERC721(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := KromaMintableERC721MetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_KromaMintableERC721 *KromaMintableERC721Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _KromaMintableERC721.Contract.KromaMintableERC721Caller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_KromaMintableERC721 *KromaMintableERC721Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _KromaMintableERC721.Contract.KromaMintableERC721Transactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_KromaMintableERC721 *KromaMintableERC721Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _KromaMintableERC721.Contract.KromaMintableERC721Transactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_KromaMintableERC721 *KromaMintableERC721CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _KromaMintableERC721.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_KromaMintableERC721 *KromaMintableERC721TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _KromaMintableERC721.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_KromaMintableERC721 *KromaMintableERC721TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _KromaMintableERC721.Contract.contract.Transact(opts, method, params...) +} + +// BRIDGE is a free data retrieval call binding the contract method 0xee9a31a2. +// +// Solidity: function BRIDGE() view returns(address) +func (_KromaMintableERC721 *KromaMintableERC721Caller) BRIDGE(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _KromaMintableERC721.contract.Call(opts, &out, "BRIDGE") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// BRIDGE is a free data retrieval call binding the contract method 0xee9a31a2. +// +// Solidity: function BRIDGE() view returns(address) +func (_KromaMintableERC721 *KromaMintableERC721Session) BRIDGE() (common.Address, error) { + return _KromaMintableERC721.Contract.BRIDGE(&_KromaMintableERC721.CallOpts) +} + +// BRIDGE is a free data retrieval call binding the contract method 0xee9a31a2. +// +// Solidity: function BRIDGE() view returns(address) +func (_KromaMintableERC721 *KromaMintableERC721CallerSession) BRIDGE() (common.Address, error) { + return _KromaMintableERC721.Contract.BRIDGE(&_KromaMintableERC721.CallOpts) +} + +// REMOTECHAINID is a free data retrieval call binding the contract method 0x7d1d0c5b. +// +// Solidity: function REMOTE_CHAIN_ID() view returns(uint256) +func (_KromaMintableERC721 *KromaMintableERC721Caller) REMOTECHAINID(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _KromaMintableERC721.contract.Call(opts, &out, "REMOTE_CHAIN_ID") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// REMOTECHAINID is a free data retrieval call binding the contract method 0x7d1d0c5b. +// +// Solidity: function REMOTE_CHAIN_ID() view returns(uint256) +func (_KromaMintableERC721 *KromaMintableERC721Session) REMOTECHAINID() (*big.Int, error) { + return _KromaMintableERC721.Contract.REMOTECHAINID(&_KromaMintableERC721.CallOpts) +} + +// REMOTECHAINID is a free data retrieval call binding the contract method 0x7d1d0c5b. +// +// Solidity: function REMOTE_CHAIN_ID() view returns(uint256) +func (_KromaMintableERC721 *KromaMintableERC721CallerSession) REMOTECHAINID() (*big.Int, error) { + return _KromaMintableERC721.Contract.REMOTECHAINID(&_KromaMintableERC721.CallOpts) +} + +// REMOTETOKEN is a free data retrieval call binding the contract method 0x033964be. +// +// Solidity: function REMOTE_TOKEN() view returns(address) +func (_KromaMintableERC721 *KromaMintableERC721Caller) REMOTETOKEN(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _KromaMintableERC721.contract.Call(opts, &out, "REMOTE_TOKEN") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// REMOTETOKEN is a free data retrieval call binding the contract method 0x033964be. +// +// Solidity: function REMOTE_TOKEN() view returns(address) +func (_KromaMintableERC721 *KromaMintableERC721Session) REMOTETOKEN() (common.Address, error) { + return _KromaMintableERC721.Contract.REMOTETOKEN(&_KromaMintableERC721.CallOpts) +} + +// REMOTETOKEN is a free data retrieval call binding the contract method 0x033964be. +// +// Solidity: function REMOTE_TOKEN() view returns(address) +func (_KromaMintableERC721 *KromaMintableERC721CallerSession) REMOTETOKEN() (common.Address, error) { + return _KromaMintableERC721.Contract.REMOTETOKEN(&_KromaMintableERC721.CallOpts) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address owner) view returns(uint256) +func (_KromaMintableERC721 *KromaMintableERC721Caller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) { + var out []interface{} + err := _KromaMintableERC721.contract.Call(opts, &out, "balanceOf", owner) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address owner) view returns(uint256) +func (_KromaMintableERC721 *KromaMintableERC721Session) BalanceOf(owner common.Address) (*big.Int, error) { + return _KromaMintableERC721.Contract.BalanceOf(&_KromaMintableERC721.CallOpts, owner) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address owner) view returns(uint256) +func (_KromaMintableERC721 *KromaMintableERC721CallerSession) BalanceOf(owner common.Address) (*big.Int, error) { + return _KromaMintableERC721.Contract.BalanceOf(&_KromaMintableERC721.CallOpts, owner) +} + +// BaseTokenURI is a free data retrieval call binding the contract method 0xd547cfb7. +// +// Solidity: function baseTokenURI() view returns(string) +func (_KromaMintableERC721 *KromaMintableERC721Caller) BaseTokenURI(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _KromaMintableERC721.contract.Call(opts, &out, "baseTokenURI") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// BaseTokenURI is a free data retrieval call binding the contract method 0xd547cfb7. +// +// Solidity: function baseTokenURI() view returns(string) +func (_KromaMintableERC721 *KromaMintableERC721Session) BaseTokenURI() (string, error) { + return _KromaMintableERC721.Contract.BaseTokenURI(&_KromaMintableERC721.CallOpts) +} + +// BaseTokenURI is a free data retrieval call binding the contract method 0xd547cfb7. +// +// Solidity: function baseTokenURI() view returns(string) +func (_KromaMintableERC721 *KromaMintableERC721CallerSession) BaseTokenURI() (string, error) { + return _KromaMintableERC721.Contract.BaseTokenURI(&_KromaMintableERC721.CallOpts) +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_KromaMintableERC721 *KromaMintableERC721Caller) Bridge(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _KromaMintableERC721.contract.Call(opts, &out, "bridge") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_KromaMintableERC721 *KromaMintableERC721Session) Bridge() (common.Address, error) { + return _KromaMintableERC721.Contract.Bridge(&_KromaMintableERC721.CallOpts) +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_KromaMintableERC721 *KromaMintableERC721CallerSession) Bridge() (common.Address, error) { + return _KromaMintableERC721.Contract.Bridge(&_KromaMintableERC721.CallOpts) +} + +// GetApproved is a free data retrieval call binding the contract method 0x081812fc. +// +// Solidity: function getApproved(uint256 tokenId) view returns(address) +func (_KromaMintableERC721 *KromaMintableERC721Caller) GetApproved(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) { + var out []interface{} + err := _KromaMintableERC721.contract.Call(opts, &out, "getApproved", tokenId) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetApproved is a free data retrieval call binding the contract method 0x081812fc. +// +// Solidity: function getApproved(uint256 tokenId) view returns(address) +func (_KromaMintableERC721 *KromaMintableERC721Session) GetApproved(tokenId *big.Int) (common.Address, error) { + return _KromaMintableERC721.Contract.GetApproved(&_KromaMintableERC721.CallOpts, tokenId) +} + +// GetApproved is a free data retrieval call binding the contract method 0x081812fc. +// +// Solidity: function getApproved(uint256 tokenId) view returns(address) +func (_KromaMintableERC721 *KromaMintableERC721CallerSession) GetApproved(tokenId *big.Int) (common.Address, error) { + return _KromaMintableERC721.Contract.GetApproved(&_KromaMintableERC721.CallOpts, tokenId) +} + +// IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5. +// +// Solidity: function isApprovedForAll(address owner, address operator) view returns(bool) +func (_KromaMintableERC721 *KromaMintableERC721Caller) IsApprovedForAll(opts *bind.CallOpts, owner common.Address, operator common.Address) (bool, error) { + var out []interface{} + err := _KromaMintableERC721.contract.Call(opts, &out, "isApprovedForAll", owner, operator) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5. +// +// Solidity: function isApprovedForAll(address owner, address operator) view returns(bool) +func (_KromaMintableERC721 *KromaMintableERC721Session) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) { + return _KromaMintableERC721.Contract.IsApprovedForAll(&_KromaMintableERC721.CallOpts, owner, operator) +} + +// IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5. +// +// Solidity: function isApprovedForAll(address owner, address operator) view returns(bool) +func (_KromaMintableERC721 *KromaMintableERC721CallerSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) { + return _KromaMintableERC721.Contract.IsApprovedForAll(&_KromaMintableERC721.CallOpts, owner, operator) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_KromaMintableERC721 *KromaMintableERC721Caller) Name(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _KromaMintableERC721.contract.Call(opts, &out, "name") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_KromaMintableERC721 *KromaMintableERC721Session) Name() (string, error) { + return _KromaMintableERC721.Contract.Name(&_KromaMintableERC721.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_KromaMintableERC721 *KromaMintableERC721CallerSession) Name() (string, error) { + return _KromaMintableERC721.Contract.Name(&_KromaMintableERC721.CallOpts) +} + +// OwnerOf is a free data retrieval call binding the contract method 0x6352211e. +// +// Solidity: function ownerOf(uint256 tokenId) view returns(address) +func (_KromaMintableERC721 *KromaMintableERC721Caller) OwnerOf(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) { + var out []interface{} + err := _KromaMintableERC721.contract.Call(opts, &out, "ownerOf", tokenId) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OwnerOf is a free data retrieval call binding the contract method 0x6352211e. +// +// Solidity: function ownerOf(uint256 tokenId) view returns(address) +func (_KromaMintableERC721 *KromaMintableERC721Session) OwnerOf(tokenId *big.Int) (common.Address, error) { + return _KromaMintableERC721.Contract.OwnerOf(&_KromaMintableERC721.CallOpts, tokenId) +} + +// OwnerOf is a free data retrieval call binding the contract method 0x6352211e. +// +// Solidity: function ownerOf(uint256 tokenId) view returns(address) +func (_KromaMintableERC721 *KromaMintableERC721CallerSession) OwnerOf(tokenId *big.Int) (common.Address, error) { + return _KromaMintableERC721.Contract.OwnerOf(&_KromaMintableERC721.CallOpts, tokenId) +} + +// RemoteChainId is a free data retrieval call binding the contract method 0xe9518196. +// +// Solidity: function remoteChainId() view returns(uint256) +func (_KromaMintableERC721 *KromaMintableERC721Caller) RemoteChainId(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _KromaMintableERC721.contract.Call(opts, &out, "remoteChainId") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// RemoteChainId is a free data retrieval call binding the contract method 0xe9518196. +// +// Solidity: function remoteChainId() view returns(uint256) +func (_KromaMintableERC721 *KromaMintableERC721Session) RemoteChainId() (*big.Int, error) { + return _KromaMintableERC721.Contract.RemoteChainId(&_KromaMintableERC721.CallOpts) +} + +// RemoteChainId is a free data retrieval call binding the contract method 0xe9518196. +// +// Solidity: function remoteChainId() view returns(uint256) +func (_KromaMintableERC721 *KromaMintableERC721CallerSession) RemoteChainId() (*big.Int, error) { + return _KromaMintableERC721.Contract.RemoteChainId(&_KromaMintableERC721.CallOpts) +} + +// RemoteToken is a free data retrieval call binding the contract method 0xd6c0b2c4. +// +// Solidity: function remoteToken() view returns(address) +func (_KromaMintableERC721 *KromaMintableERC721Caller) RemoteToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _KromaMintableERC721.contract.Call(opts, &out, "remoteToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// RemoteToken is a free data retrieval call binding the contract method 0xd6c0b2c4. +// +// Solidity: function remoteToken() view returns(address) +func (_KromaMintableERC721 *KromaMintableERC721Session) RemoteToken() (common.Address, error) { + return _KromaMintableERC721.Contract.RemoteToken(&_KromaMintableERC721.CallOpts) +} + +// RemoteToken is a free data retrieval call binding the contract method 0xd6c0b2c4. +// +// Solidity: function remoteToken() view returns(address) +func (_KromaMintableERC721 *KromaMintableERC721CallerSession) RemoteToken() (common.Address, error) { + return _KromaMintableERC721.Contract.RemoteToken(&_KromaMintableERC721.CallOpts) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 _interfaceId) view returns(bool) +func (_KromaMintableERC721 *KromaMintableERC721Caller) SupportsInterface(opts *bind.CallOpts, _interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _KromaMintableERC721.contract.Call(opts, &out, "supportsInterface", _interfaceId) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 _interfaceId) view returns(bool) +func (_KromaMintableERC721 *KromaMintableERC721Session) SupportsInterface(_interfaceId [4]byte) (bool, error) { + return _KromaMintableERC721.Contract.SupportsInterface(&_KromaMintableERC721.CallOpts, _interfaceId) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 _interfaceId) view returns(bool) +func (_KromaMintableERC721 *KromaMintableERC721CallerSession) SupportsInterface(_interfaceId [4]byte) (bool, error) { + return _KromaMintableERC721.Contract.SupportsInterface(&_KromaMintableERC721.CallOpts, _interfaceId) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_KromaMintableERC721 *KromaMintableERC721Caller) Symbol(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _KromaMintableERC721.contract.Call(opts, &out, "symbol") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_KromaMintableERC721 *KromaMintableERC721Session) Symbol() (string, error) { + return _KromaMintableERC721.Contract.Symbol(&_KromaMintableERC721.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_KromaMintableERC721 *KromaMintableERC721CallerSession) Symbol() (string, error) { + return _KromaMintableERC721.Contract.Symbol(&_KromaMintableERC721.CallOpts) +} + +// TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7. +// +// Solidity: function tokenByIndex(uint256 index) view returns(uint256) +func (_KromaMintableERC721 *KromaMintableERC721Caller) TokenByIndex(opts *bind.CallOpts, index *big.Int) (*big.Int, error) { + var out []interface{} + err := _KromaMintableERC721.contract.Call(opts, &out, "tokenByIndex", index) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7. +// +// Solidity: function tokenByIndex(uint256 index) view returns(uint256) +func (_KromaMintableERC721 *KromaMintableERC721Session) TokenByIndex(index *big.Int) (*big.Int, error) { + return _KromaMintableERC721.Contract.TokenByIndex(&_KromaMintableERC721.CallOpts, index) +} + +// TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7. +// +// Solidity: function tokenByIndex(uint256 index) view returns(uint256) +func (_KromaMintableERC721 *KromaMintableERC721CallerSession) TokenByIndex(index *big.Int) (*big.Int, error) { + return _KromaMintableERC721.Contract.TokenByIndex(&_KromaMintableERC721.CallOpts, index) +} + +// TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59. +// +// Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256) +func (_KromaMintableERC721 *KromaMintableERC721Caller) TokenOfOwnerByIndex(opts *bind.CallOpts, owner common.Address, index *big.Int) (*big.Int, error) { + var out []interface{} + err := _KromaMintableERC721.contract.Call(opts, &out, "tokenOfOwnerByIndex", owner, index) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59. +// +// Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256) +func (_KromaMintableERC721 *KromaMintableERC721Session) TokenOfOwnerByIndex(owner common.Address, index *big.Int) (*big.Int, error) { + return _KromaMintableERC721.Contract.TokenOfOwnerByIndex(&_KromaMintableERC721.CallOpts, owner, index) +} + +// TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59. +// +// Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256) +func (_KromaMintableERC721 *KromaMintableERC721CallerSession) TokenOfOwnerByIndex(owner common.Address, index *big.Int) (*big.Int, error) { + return _KromaMintableERC721.Contract.TokenOfOwnerByIndex(&_KromaMintableERC721.CallOpts, owner, index) +} + +// TokenURI is a free data retrieval call binding the contract method 0xc87b56dd. +// +// Solidity: function tokenURI(uint256 tokenId) view returns(string) +func (_KromaMintableERC721 *KromaMintableERC721Caller) TokenURI(opts *bind.CallOpts, tokenId *big.Int) (string, error) { + var out []interface{} + err := _KromaMintableERC721.contract.Call(opts, &out, "tokenURI", tokenId) + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// TokenURI is a free data retrieval call binding the contract method 0xc87b56dd. +// +// Solidity: function tokenURI(uint256 tokenId) view returns(string) +func (_KromaMintableERC721 *KromaMintableERC721Session) TokenURI(tokenId *big.Int) (string, error) { + return _KromaMintableERC721.Contract.TokenURI(&_KromaMintableERC721.CallOpts, tokenId) +} + +// TokenURI is a free data retrieval call binding the contract method 0xc87b56dd. +// +// Solidity: function tokenURI(uint256 tokenId) view returns(string) +func (_KromaMintableERC721 *KromaMintableERC721CallerSession) TokenURI(tokenId *big.Int) (string, error) { + return _KromaMintableERC721.Contract.TokenURI(&_KromaMintableERC721.CallOpts, tokenId) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_KromaMintableERC721 *KromaMintableERC721Caller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _KromaMintableERC721.contract.Call(opts, &out, "totalSupply") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_KromaMintableERC721 *KromaMintableERC721Session) TotalSupply() (*big.Int, error) { + return _KromaMintableERC721.Contract.TotalSupply(&_KromaMintableERC721.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_KromaMintableERC721 *KromaMintableERC721CallerSession) TotalSupply() (*big.Int, error) { + return _KromaMintableERC721.Contract.TotalSupply(&_KromaMintableERC721.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_KromaMintableERC721 *KromaMintableERC721Caller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _KromaMintableERC721.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_KromaMintableERC721 *KromaMintableERC721Session) Version() (string, error) { + return _KromaMintableERC721.Contract.Version(&_KromaMintableERC721.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_KromaMintableERC721 *KromaMintableERC721CallerSession) Version() (string, error) { + return _KromaMintableERC721.Contract.Version(&_KromaMintableERC721.CallOpts) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address to, uint256 tokenId) returns() +func (_KromaMintableERC721 *KromaMintableERC721Transactor) Approve(opts *bind.TransactOpts, to common.Address, tokenId *big.Int) (*types.Transaction, error) { + return _KromaMintableERC721.contract.Transact(opts, "approve", to, tokenId) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address to, uint256 tokenId) returns() +func (_KromaMintableERC721 *KromaMintableERC721Session) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) { + return _KromaMintableERC721.Contract.Approve(&_KromaMintableERC721.TransactOpts, to, tokenId) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address to, uint256 tokenId) returns() +func (_KromaMintableERC721 *KromaMintableERC721TransactorSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) { + return _KromaMintableERC721.Contract.Approve(&_KromaMintableERC721.TransactOpts, to, tokenId) +} + +// Burn is a paid mutator transaction binding the contract method 0x9dc29fac. +// +// Solidity: function burn(address _from, uint256 _tokenId) returns() +func (_KromaMintableERC721 *KromaMintableERC721Transactor) Burn(opts *bind.TransactOpts, _from common.Address, _tokenId *big.Int) (*types.Transaction, error) { + return _KromaMintableERC721.contract.Transact(opts, "burn", _from, _tokenId) +} + +// Burn is a paid mutator transaction binding the contract method 0x9dc29fac. +// +// Solidity: function burn(address _from, uint256 _tokenId) returns() +func (_KromaMintableERC721 *KromaMintableERC721Session) Burn(_from common.Address, _tokenId *big.Int) (*types.Transaction, error) { + return _KromaMintableERC721.Contract.Burn(&_KromaMintableERC721.TransactOpts, _from, _tokenId) +} + +// Burn is a paid mutator transaction binding the contract method 0x9dc29fac. +// +// Solidity: function burn(address _from, uint256 _tokenId) returns() +func (_KromaMintableERC721 *KromaMintableERC721TransactorSession) Burn(_from common.Address, _tokenId *big.Int) (*types.Transaction, error) { + return _KromaMintableERC721.Contract.Burn(&_KromaMintableERC721.TransactOpts, _from, _tokenId) +} + +// SafeMint is a paid mutator transaction binding the contract method 0xa1448194. +// +// Solidity: function safeMint(address _to, uint256 _tokenId) returns() +func (_KromaMintableERC721 *KromaMintableERC721Transactor) SafeMint(opts *bind.TransactOpts, _to common.Address, _tokenId *big.Int) (*types.Transaction, error) { + return _KromaMintableERC721.contract.Transact(opts, "safeMint", _to, _tokenId) +} + +// SafeMint is a paid mutator transaction binding the contract method 0xa1448194. +// +// Solidity: function safeMint(address _to, uint256 _tokenId) returns() +func (_KromaMintableERC721 *KromaMintableERC721Session) SafeMint(_to common.Address, _tokenId *big.Int) (*types.Transaction, error) { + return _KromaMintableERC721.Contract.SafeMint(&_KromaMintableERC721.TransactOpts, _to, _tokenId) +} + +// SafeMint is a paid mutator transaction binding the contract method 0xa1448194. +// +// Solidity: function safeMint(address _to, uint256 _tokenId) returns() +func (_KromaMintableERC721 *KromaMintableERC721TransactorSession) SafeMint(_to common.Address, _tokenId *big.Int) (*types.Transaction, error) { + return _KromaMintableERC721.Contract.SafeMint(&_KromaMintableERC721.TransactOpts, _to, _tokenId) +} + +// SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e. +// +// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns() +func (_KromaMintableERC721 *KromaMintableERC721Transactor) SafeTransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) { + return _KromaMintableERC721.contract.Transact(opts, "safeTransferFrom", from, to, tokenId) +} + +// SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e. +// +// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns() +func (_KromaMintableERC721 *KromaMintableERC721Session) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) { + return _KromaMintableERC721.Contract.SafeTransferFrom(&_KromaMintableERC721.TransactOpts, from, to, tokenId) +} + +// SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e. +// +// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns() +func (_KromaMintableERC721 *KromaMintableERC721TransactorSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) { + return _KromaMintableERC721.Contract.SafeTransferFrom(&_KromaMintableERC721.TransactOpts, from, to, tokenId) +} + +// SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde. +// +// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns() +func (_KromaMintableERC721 *KromaMintableERC721Transactor) SafeTransferFrom0(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) { + return _KromaMintableERC721.contract.Transact(opts, "safeTransferFrom0", from, to, tokenId, data) +} + +// SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde. +// +// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns() +func (_KromaMintableERC721 *KromaMintableERC721Session) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) { + return _KromaMintableERC721.Contract.SafeTransferFrom0(&_KromaMintableERC721.TransactOpts, from, to, tokenId, data) +} + +// SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde. +// +// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns() +func (_KromaMintableERC721 *KromaMintableERC721TransactorSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) { + return _KromaMintableERC721.Contract.SafeTransferFrom0(&_KromaMintableERC721.TransactOpts, from, to, tokenId, data) +} + +// SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465. +// +// Solidity: function setApprovalForAll(address operator, bool approved) returns() +func (_KromaMintableERC721 *KromaMintableERC721Transactor) SetApprovalForAll(opts *bind.TransactOpts, operator common.Address, approved bool) (*types.Transaction, error) { + return _KromaMintableERC721.contract.Transact(opts, "setApprovalForAll", operator, approved) +} + +// SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465. +// +// Solidity: function setApprovalForAll(address operator, bool approved) returns() +func (_KromaMintableERC721 *KromaMintableERC721Session) SetApprovalForAll(operator common.Address, approved bool) (*types.Transaction, error) { + return _KromaMintableERC721.Contract.SetApprovalForAll(&_KromaMintableERC721.TransactOpts, operator, approved) +} + +// SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465. +// +// Solidity: function setApprovalForAll(address operator, bool approved) returns() +func (_KromaMintableERC721 *KromaMintableERC721TransactorSession) SetApprovalForAll(operator common.Address, approved bool) (*types.Transaction, error) { + return _KromaMintableERC721.Contract.SetApprovalForAll(&_KromaMintableERC721.TransactOpts, operator, approved) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 tokenId) returns() +func (_KromaMintableERC721 *KromaMintableERC721Transactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) { + return _KromaMintableERC721.contract.Transact(opts, "transferFrom", from, to, tokenId) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 tokenId) returns() +func (_KromaMintableERC721 *KromaMintableERC721Session) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) { + return _KromaMintableERC721.Contract.TransferFrom(&_KromaMintableERC721.TransactOpts, from, to, tokenId) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 tokenId) returns() +func (_KromaMintableERC721 *KromaMintableERC721TransactorSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) { + return _KromaMintableERC721.Contract.TransferFrom(&_KromaMintableERC721.TransactOpts, from, to, tokenId) +} + +// KromaMintableERC721ApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the KromaMintableERC721 contract. +type KromaMintableERC721ApprovalIterator struct { + Event *KromaMintableERC721Approval // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *KromaMintableERC721ApprovalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(KromaMintableERC721Approval) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(KromaMintableERC721Approval) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *KromaMintableERC721ApprovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *KromaMintableERC721ApprovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// KromaMintableERC721Approval represents a Approval event raised by the KromaMintableERC721 contract. +type KromaMintableERC721Approval struct { + Owner common.Address + Approved common.Address + TokenId *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId) +func (_KromaMintableERC721 *KromaMintableERC721Filterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, approved []common.Address, tokenId []*big.Int) (*KromaMintableERC721ApprovalIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var approvedRule []interface{} + for _, approvedItem := range approved { + approvedRule = append(approvedRule, approvedItem) + } + var tokenIdRule []interface{} + for _, tokenIdItem := range tokenId { + tokenIdRule = append(tokenIdRule, tokenIdItem) + } + + logs, sub, err := _KromaMintableERC721.contract.FilterLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule) + if err != nil { + return nil, err + } + return &KromaMintableERC721ApprovalIterator{contract: _KromaMintableERC721.contract, event: "Approval", logs: logs, sub: sub}, nil +} + +// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId) +func (_KromaMintableERC721 *KromaMintableERC721Filterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *KromaMintableERC721Approval, owner []common.Address, approved []common.Address, tokenId []*big.Int) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var approvedRule []interface{} + for _, approvedItem := range approved { + approvedRule = append(approvedRule, approvedItem) + } + var tokenIdRule []interface{} + for _, tokenIdItem := range tokenId { + tokenIdRule = append(tokenIdRule, tokenIdItem) + } + + logs, sub, err := _KromaMintableERC721.contract.WatchLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(KromaMintableERC721Approval) + if err := _KromaMintableERC721.contract.UnpackLog(event, "Approval", 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 +} + +// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId) +func (_KromaMintableERC721 *KromaMintableERC721Filterer) ParseApproval(log types.Log) (*KromaMintableERC721Approval, error) { + event := new(KromaMintableERC721Approval) + if err := _KromaMintableERC721.contract.UnpackLog(event, "Approval", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// KromaMintableERC721ApprovalForAllIterator is returned from FilterApprovalForAll and is used to iterate over the raw logs and unpacked data for ApprovalForAll events raised by the KromaMintableERC721 contract. +type KromaMintableERC721ApprovalForAllIterator struct { + Event *KromaMintableERC721ApprovalForAll // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *KromaMintableERC721ApprovalForAllIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(KromaMintableERC721ApprovalForAll) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(KromaMintableERC721ApprovalForAll) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *KromaMintableERC721ApprovalForAllIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *KromaMintableERC721ApprovalForAllIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// KromaMintableERC721ApprovalForAll represents a ApprovalForAll event raised by the KromaMintableERC721 contract. +type KromaMintableERC721ApprovalForAll struct { + Owner common.Address + Operator common.Address + Approved bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApprovalForAll is a free log retrieval operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31. +// +// Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved) +func (_KromaMintableERC721 *KromaMintableERC721Filterer) FilterApprovalForAll(opts *bind.FilterOpts, owner []common.Address, operator []common.Address) (*KromaMintableERC721ApprovalForAllIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _KromaMintableERC721.contract.FilterLogs(opts, "ApprovalForAll", ownerRule, operatorRule) + if err != nil { + return nil, err + } + return &KromaMintableERC721ApprovalForAllIterator{contract: _KromaMintableERC721.contract, event: "ApprovalForAll", logs: logs, sub: sub}, nil +} + +// WatchApprovalForAll is a free log subscription operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31. +// +// Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved) +func (_KromaMintableERC721 *KromaMintableERC721Filterer) WatchApprovalForAll(opts *bind.WatchOpts, sink chan<- *KromaMintableERC721ApprovalForAll, owner []common.Address, operator []common.Address) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _KromaMintableERC721.contract.WatchLogs(opts, "ApprovalForAll", ownerRule, operatorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(KromaMintableERC721ApprovalForAll) + if err := _KromaMintableERC721.contract.UnpackLog(event, "ApprovalForAll", 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 +} + +// ParseApprovalForAll is a log parse operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31. +// +// Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved) +func (_KromaMintableERC721 *KromaMintableERC721Filterer) ParseApprovalForAll(log types.Log) (*KromaMintableERC721ApprovalForAll, error) { + event := new(KromaMintableERC721ApprovalForAll) + if err := _KromaMintableERC721.contract.UnpackLog(event, "ApprovalForAll", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// KromaMintableERC721BurnIterator is returned from FilterBurn and is used to iterate over the raw logs and unpacked data for Burn events raised by the KromaMintableERC721 contract. +type KromaMintableERC721BurnIterator struct { + Event *KromaMintableERC721Burn // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *KromaMintableERC721BurnIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(KromaMintableERC721Burn) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(KromaMintableERC721Burn) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *KromaMintableERC721BurnIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *KromaMintableERC721BurnIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// KromaMintableERC721Burn represents a Burn event raised by the KromaMintableERC721 contract. +type KromaMintableERC721Burn struct { + Account common.Address + TokenId *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterBurn is a free log retrieval operation binding the contract event 0xcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5. +// +// Solidity: event Burn(address indexed account, uint256 tokenId) +func (_KromaMintableERC721 *KromaMintableERC721Filterer) FilterBurn(opts *bind.FilterOpts, account []common.Address) (*KromaMintableERC721BurnIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _KromaMintableERC721.contract.FilterLogs(opts, "Burn", accountRule) + if err != nil { + return nil, err + } + return &KromaMintableERC721BurnIterator{contract: _KromaMintableERC721.contract, event: "Burn", logs: logs, sub: sub}, nil +} + +// WatchBurn is a free log subscription operation binding the contract event 0xcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5. +// +// Solidity: event Burn(address indexed account, uint256 tokenId) +func (_KromaMintableERC721 *KromaMintableERC721Filterer) WatchBurn(opts *bind.WatchOpts, sink chan<- *KromaMintableERC721Burn, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _KromaMintableERC721.contract.WatchLogs(opts, "Burn", accountRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(KromaMintableERC721Burn) + if err := _KromaMintableERC721.contract.UnpackLog(event, "Burn", 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 +} + +// ParseBurn is a log parse operation binding the contract event 0xcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5. +// +// Solidity: event Burn(address indexed account, uint256 tokenId) +func (_KromaMintableERC721 *KromaMintableERC721Filterer) ParseBurn(log types.Log) (*KromaMintableERC721Burn, error) { + event := new(KromaMintableERC721Burn) + if err := _KromaMintableERC721.contract.UnpackLog(event, "Burn", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// KromaMintableERC721MintIterator is returned from FilterMint and is used to iterate over the raw logs and unpacked data for Mint events raised by the KromaMintableERC721 contract. +type KromaMintableERC721MintIterator struct { + Event *KromaMintableERC721Mint // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *KromaMintableERC721MintIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(KromaMintableERC721Mint) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(KromaMintableERC721Mint) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *KromaMintableERC721MintIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *KromaMintableERC721MintIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// KromaMintableERC721Mint represents a Mint event raised by the KromaMintableERC721 contract. +type KromaMintableERC721Mint struct { + Account common.Address + TokenId *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMint is a free log retrieval operation binding the contract event 0x0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885. +// +// Solidity: event Mint(address indexed account, uint256 tokenId) +func (_KromaMintableERC721 *KromaMintableERC721Filterer) FilterMint(opts *bind.FilterOpts, account []common.Address) (*KromaMintableERC721MintIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _KromaMintableERC721.contract.FilterLogs(opts, "Mint", accountRule) + if err != nil { + return nil, err + } + return &KromaMintableERC721MintIterator{contract: _KromaMintableERC721.contract, event: "Mint", logs: logs, sub: sub}, nil +} + +// WatchMint is a free log subscription operation binding the contract event 0x0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885. +// +// Solidity: event Mint(address indexed account, uint256 tokenId) +func (_KromaMintableERC721 *KromaMintableERC721Filterer) WatchMint(opts *bind.WatchOpts, sink chan<- *KromaMintableERC721Mint, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _KromaMintableERC721.contract.WatchLogs(opts, "Mint", accountRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(KromaMintableERC721Mint) + if err := _KromaMintableERC721.contract.UnpackLog(event, "Mint", 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 +} + +// ParseMint is a log parse operation binding the contract event 0x0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885. +// +// Solidity: event Mint(address indexed account, uint256 tokenId) +func (_KromaMintableERC721 *KromaMintableERC721Filterer) ParseMint(log types.Log) (*KromaMintableERC721Mint, error) { + event := new(KromaMintableERC721Mint) + if err := _KromaMintableERC721.contract.UnpackLog(event, "Mint", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// KromaMintableERC721TransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the KromaMintableERC721 contract. +type KromaMintableERC721TransferIterator struct { + Event *KromaMintableERC721Transfer // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *KromaMintableERC721TransferIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(KromaMintableERC721Transfer) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(KromaMintableERC721Transfer) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *KromaMintableERC721TransferIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *KromaMintableERC721TransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// KromaMintableERC721Transfer represents a Transfer event raised by the KromaMintableERC721 contract. +type KromaMintableERC721Transfer struct { + From common.Address + To common.Address + TokenId *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId) +func (_KromaMintableERC721 *KromaMintableERC721Filterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address, tokenId []*big.Int) (*KromaMintableERC721TransferIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var tokenIdRule []interface{} + for _, tokenIdItem := range tokenId { + tokenIdRule = append(tokenIdRule, tokenIdItem) + } + + logs, sub, err := _KromaMintableERC721.contract.FilterLogs(opts, "Transfer", fromRule, toRule, tokenIdRule) + if err != nil { + return nil, err + } + return &KromaMintableERC721TransferIterator{contract: _KromaMintableERC721.contract, event: "Transfer", logs: logs, sub: sub}, nil +} + +// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId) +func (_KromaMintableERC721 *KromaMintableERC721Filterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *KromaMintableERC721Transfer, from []common.Address, to []common.Address, tokenId []*big.Int) (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) + } + var tokenIdRule []interface{} + for _, tokenIdItem := range tokenId { + tokenIdRule = append(tokenIdRule, tokenIdItem) + } + + logs, sub, err := _KromaMintableERC721.contract.WatchLogs(opts, "Transfer", fromRule, toRule, tokenIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(KromaMintableERC721Transfer) + if err := _KromaMintableERC721.contract.UnpackLog(event, "Transfer", 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 +} + +// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId) +func (_KromaMintableERC721 *KromaMintableERC721Filterer) ParseTransfer(log types.Log) (*KromaMintableERC721Transfer, error) { + event := new(KromaMintableERC721Transfer) + if err := _KromaMintableERC721.contract.UnpackLog(event, "Transfer", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/kroma-bindings/bindings/kromamintableerc721_more.go b/kroma-bindings/bindings/kromamintableerc721_more.go new file mode 100644 index 000000000..2d2470903 --- /dev/null +++ b/kroma-bindings/bindings/kromamintableerc721_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const KromaMintableERC721StorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/universal/KromaMintableERC721.sol:KromaMintableERC721\",\"label\":\"_name\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_string_storage\"},{\"astId\":1001,\"contract\":\"contracts/universal/KromaMintableERC721.sol:KromaMintableERC721\",\"label\":\"_symbol\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_string_storage\"},{\"astId\":1002,\"contract\":\"contracts/universal/KromaMintableERC721.sol:KromaMintableERC721\",\"label\":\"_owners\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_mapping(t_uint256,t_address)\"},{\"astId\":1003,\"contract\":\"contracts/universal/KromaMintableERC721.sol:KromaMintableERC721\",\"label\":\"_balances\",\"offset\":0,\"slot\":\"3\",\"type\":\"t_mapping(t_address,t_uint256)\"},{\"astId\":1004,\"contract\":\"contracts/universal/KromaMintableERC721.sol:KromaMintableERC721\",\"label\":\"_tokenApprovals\",\"offset\":0,\"slot\":\"4\",\"type\":\"t_mapping(t_uint256,t_address)\"},{\"astId\":1005,\"contract\":\"contracts/universal/KromaMintableERC721.sol:KromaMintableERC721\",\"label\":\"_operatorApprovals\",\"offset\":0,\"slot\":\"5\",\"type\":\"t_mapping(t_address,t_mapping(t_address,t_bool))\"},{\"astId\":1006,\"contract\":\"contracts/universal/KromaMintableERC721.sol:KromaMintableERC721\",\"label\":\"_ownedTokens\",\"offset\":0,\"slot\":\"6\",\"type\":\"t_mapping(t_address,t_mapping(t_uint256,t_uint256))\"},{\"astId\":1007,\"contract\":\"contracts/universal/KromaMintableERC721.sol:KromaMintableERC721\",\"label\":\"_ownedTokensIndex\",\"offset\":0,\"slot\":\"7\",\"type\":\"t_mapping(t_uint256,t_uint256)\"},{\"astId\":1008,\"contract\":\"contracts/universal/KromaMintableERC721.sol:KromaMintableERC721\",\"label\":\"_allTokens\",\"offset\":0,\"slot\":\"8\",\"type\":\"t_array(t_uint256)dyn_storage\"},{\"astId\":1009,\"contract\":\"contracts/universal/KromaMintableERC721.sol:KromaMintableERC721\",\"label\":\"_allTokensIndex\",\"offset\":0,\"slot\":\"9\",\"type\":\"t_mapping(t_uint256,t_uint256)\"},{\"astId\":1010,\"contract\":\"contracts/universal/KromaMintableERC721.sol:KromaMintableERC721\",\"label\":\"baseTokenURI\",\"offset\":0,\"slot\":\"10\",\"type\":\"t_string_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)dyn_storage\":{\"encoding\":\"dynamic_array\",\"label\":\"uint256[]\",\"numberOfBytes\":\"32\",\"base\":\"t_uint256\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_mapping(t_address,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_bool\"},\"t_mapping(t_address,t_mapping(t_address,t_bool))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(address =\u003e bool))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_address,t_bool)\"},\"t_mapping(t_address,t_mapping(t_uint256,t_uint256))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(uint256 =\u003e uint256))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_uint256,t_uint256)\"},\"t_mapping(t_address,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint256\"},\"t_mapping(t_uint256,t_address)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e address)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_address\"},\"t_mapping(t_uint256,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_uint256\"},\"t_string_storage\":{\"encoding\":\"bytes\",\"label\":\"string\",\"numberOfBytes\":\"32\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"}}}" + +var KromaMintableERC721StorageLayout = new(solc.StorageLayout) + +var KromaMintableERC721DeployedBin = "0x608060405234801561001057600080fd5b50600436106101ae5760003560e01c80637d1d0c5b116100ee578063c87b56dd11610097578063e78cea9211610071578063e78cea921461039f578063e9518196146103c5578063e985e9c5146103eb578063ee9a31a21461042757600080fd5b8063c87b56dd1461035e578063d547cfb714610371578063d6c0b2c41461037957600080fd5b8063a1448194116100c8578063a144819414610325578063a22cb46514610338578063b88d4fde1461034b57600080fd5b80637d1d0c5b146102e357806395d89b411461030a5780639dc29fac1461031257600080fd5b806323b872dd1161015b5780634f6ccce7116101355780634f6ccce7146102a257806354fd4d50146102b55780636352211e146102bd57806370a08231146102d057600080fd5b806323b872dd146102695780632f745c591461027c57806342842e0e1461028f57600080fd5b8063081812fc1161018c578063081812fc1461022f578063095ea7b31461024257806318160ddd1461025757600080fd5b806301ffc9a7146101b3578063033964be146101db57806306fdde031461021a575b600080fd5b6101c66101c1366004612037565b61044e565b60405190151581526020015b60405180910390f35b6102027f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101d2565b6102226104fd565b6040516101d291906120ca565b61020261023d3660046120dd565b61058f565b610255610250366004612112565b6105b6565b005b6008545b6040519081526020016101d2565b61025561027736600461213c565b6106ec565b61025b61028a366004612112565b610773565b61025561029d36600461213c565b61081b565b61025b6102b03660046120dd565b610836565b6102226108da565b6102026102cb3660046120dd565b61097d565b61025b6102de366004612178565b6109e8565b61025b7f000000000000000000000000000000000000000000000000000000000000000081565b610222610a82565b610255610320366004612112565b610a91565b610255610333366004612112565b610b7f565b610255610346366004612193565b610c62565b6102556103593660046121fe565b610c71565b61022261036c3660046120dd565b610cff565b610222610d66565b7f0000000000000000000000000000000000000000000000000000000000000000610202565b7f0000000000000000000000000000000000000000000000000000000000000000610202565b7f000000000000000000000000000000000000000000000000000000000000000061025b565b6101c66103f93660046122f8565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6102027f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007f74259ebf000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000084168214806104e657507fffffffff00000000000000000000000000000000000000000000000000000000848116908216145b806104f557506104f5846111bd565b949350505050565b60606000805461050c9061232b565b80601f01602080910402602001604051908101604052809291908181526020018280546105389061232b565b80156105855780601f1061055a57610100808354040283529160200191610585565b820191906000526020600020905b81548152906001019060200180831161056857829003601f168201915b5050505050905090565b600061059a82611213565b506000908152600460205260409020546001600160a01b031690565b60006105c18261097d565b9050806001600160a01b0316836001600160a01b03160361064f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b336001600160a01b038216148061066b575061066b81336103f9565b6106dd5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610646565b6106e7838361127a565b505050565b6106f63382611300565b6107685760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610646565b6106e783838361137e565b600061077e836109e8565b82106107f25760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610646565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6106e783838360405180602001604052806000815250610c71565b600061084160085490565b82106108b55760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610646565b600882815481106108c8576108c861237e565b90600052602060002001549050919050565b60606109057f000000000000000000000000000000000000000000000000000000000000000061101d565b61092e7f000000000000000000000000000000000000000000000000000000000000000061101d565b6109577f000000000000000000000000000000000000000000000000000000000000000061101d565b604051602001610969939291906123ad565b604051602081830303815290604052905090565b6000818152600260205260408120546001600160a01b0316806109e25760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610646565b92915050565b60006001600160a01b038216610a665760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152608401610646565b506001600160a01b031660009081526003602052604090205490565b60606001805461050c9061232b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b2f5760405162461bcd60e51b815260206004820152603760248201527f4b726f6d614d696e7461626c654552433732313a206f6e6c792062726964676560448201527f2063616e2063616c6c20746869732066756e6374696f6e0000000000000000006064820152608401610646565b610b38816115ea565b816001600160a01b03167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca582604051610b7391815260200190565b60405180910390a25050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c1d5760405162461bcd60e51b815260206004820152603760248201527f4b726f6d614d696e7461626c654552433732313a206f6e6c792062726964676560448201527f2063616e2063616c6c20746869732066756e6374696f6e0000000000000000006064820152608401610646565b610c2782826116c3565b816001600160a01b03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688582604051610b7391815260200190565b610c6d3383836116dd565b5050565b610c7b3383611300565b610ced5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610646565b610cf9848484846117c9565b50505050565b6060610d0a82611213565b6000610d14611852565b90506000815111610d345760405180602001604052806000815250610d5f565b80610d3e8461101d565b604051602001610d4f929190612423565b6040516020818303038152906040525b9392505050565b600a8054610d739061232b565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9f9061232b565b8015610dec5780601f10610dc157610100808354040283529160200191610dec565b820191906000526020600020905b815481529060010190602001808311610dcf57829003601f168201915b505050505081565b60606000610e03836002612481565b610e0e9060026124be565b67ffffffffffffffff811115610e2657610e266121cf565b6040519080825280601f01601f191660200182016040528015610e50576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110610e8757610e8761237e565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110610eea57610eea61237e565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000610f26846002612481565b610f319060016124be565b90505b6001811115610fce577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110610f7257610f7261237e565b1a60f81b828281518110610f8857610f8861237e565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93610fc7816124d6565b9050610f34565b508315610d5f5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610646565b6060600061102a836110db565b600101905060008167ffffffffffffffff81111561104a5761104a6121cf565b6040519080825280601f01601f191660200182016040528015611074576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461107e57509392505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611124577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611150576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061116e57662386f26fc10000830492506010015b6305f5e1008310611186576305f5e100830492506008015b612710831061119a57612710830492506004015b606483106111ac576064830492506002015b600a83106109e25760010192915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d630000000000000000000000000000000000000000000000000000000014806109e257506109e282611861565b6000818152600260205260409020546001600160a01b03166112775760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610646565b50565b600081815260046020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03841690811790915581906112c78261097d565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061130c8361097d565b9050806001600160a01b0316846001600160a01b0316148061135357506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806104f55750836001600160a01b031661136c8461058f565b6001600160a01b031614949350505050565b826001600160a01b03166113918261097d565b6001600160a01b03161461140d5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610646565b6001600160a01b0382166114885760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610646565b6114958383836001611944565b826001600160a01b03166114a88261097d565b6001600160a01b0316146115245760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610646565b600081815260046020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169091556001600160a01b038781168086526003855283862080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006115f58261097d565b9050611605816000846001611944565b61160e8261097d565b600083815260046020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169091556001600160a01b0385168085526003845282852080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b610c6d828260405180602001604052806000815250611a80565b816001600160a01b0316836001600160a01b03160361173e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610646565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6117d484848461137e565b6117e084848484611b09565b610cf95760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610646565b6060600a805461050c9061232b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806118f457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806109e257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146109e2565b60018111156119bb5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e736563757469766520747260448201527f616e7366657273206e6f7420737570706f7274656400000000000000000000006064820152608401610646565b816001600160a01b038516611a1757611a1281600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611a3a565b836001600160a01b0316856001600160a01b031614611a3a57611a3a8582611cc8565b6001600160a01b038416611a5657611a5181611d65565b611a79565b846001600160a01b0316846001600160a01b031614611a7957611a798482611e14565b5050505050565b611a8a8383611e58565b611a976000848484611b09565b6106e75760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610646565b60006001600160a01b0384163b15611cbd576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290611b6690339089908890889060040161250b565b6020604051808303816000875af1925050508015611bbf575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611bbc91810190612547565b60015b611c72573d808015611bed576040519150601f19603f3d011682016040523d82523d6000602084013e611bf2565b606091505b508051600003611c6a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610646565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001490506104f5565b506001949350505050565b60006001611cd5846109e8565b611cdf9190612564565b600083815260076020526040902054909150808214611d32576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611d7790600190612564565b60008381526009602052604081205460088054939450909284908110611d9f57611d9f61237e565b906000526020600020015490508060088381548110611dc057611dc061237e565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611df857611df861257b565b6001900381819060005260206000200160009055905550505050565b6000611e1f836109e8565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216611eae5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610646565b6000818152600260205260409020546001600160a01b031615611f135760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610646565b611f21600083836001611944565b6000818152600260205260409020546001600160a01b031615611f865760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610646565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461127757600080fd5b60006020828403121561204957600080fd5b8135610d5f81612009565b60005b8381101561206f578181015183820152602001612057565b83811115610cf95750506000910152565b60008151808452612098816020860160208601612054565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610d5f6020830184612080565b6000602082840312156120ef57600080fd5b5035919050565b80356001600160a01b038116811461210d57600080fd5b919050565b6000806040838503121561212557600080fd5b61212e836120f6565b946020939093013593505050565b60008060006060848603121561215157600080fd5b61215a846120f6565b9250612168602085016120f6565b9150604084013590509250925092565b60006020828403121561218a57600080fd5b610d5f826120f6565b600080604083850312156121a657600080fd5b6121af836120f6565b9150602083013580151581146121c457600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000806080858703121561221457600080fd5b61221d856120f6565b935061222b602086016120f6565b925060408501359150606085013567ffffffffffffffff8082111561224f57600080fd5b818701915087601f83011261226357600080fd5b813581811115612275576122756121cf565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156122bb576122bb6121cf565b816040528281528a60208487010111156122d457600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561230b57600080fd5b612314836120f6565b9150612322602084016120f6565b90509250929050565b600181811c9082168061233f57607f821691505b602082108103612378577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600084516123bf818460208901612054565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516123fb816001850160208a01612054565b60019201918201528351612416816002840160208801612054565b0160020195945050505050565b60008351612435818460208801612054565b835190830190612449818360208801612054565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156124b9576124b9612452565b500290565b600082198211156124d1576124d1612452565b500190565b6000816124e5576124e5612452565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261253d6080830184612080565b9695505050505050565b60006020828403121561255957600080fd5b8151610d5f81612009565b60008282101561257657612576612452565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(KromaMintableERC721StorageLayoutJSON), KromaMintableERC721StorageLayout); err != nil { + panic(err) + } + + layouts["KromaMintableERC721"] = KromaMintableERC721StorageLayout + deployedBytecodes["KromaMintableERC721"] = KromaMintableERC721DeployedBin +} diff --git a/op-bindings/bindings/kromamintableerc721factory.go b/kroma-bindings/bindings/kromamintableerc721factory.go similarity index 100% rename from op-bindings/bindings/kromamintableerc721factory.go rename to kroma-bindings/bindings/kromamintableerc721factory.go diff --git a/op-bindings/bindings/kromamintableerc721factory_more.go b/kroma-bindings/bindings/kromamintableerc721factory_more.go similarity index 100% rename from op-bindings/bindings/kromamintableerc721factory_more.go rename to kroma-bindings/bindings/kromamintableerc721factory_more.go diff --git a/op-bindings/bindings/kromaportal.go b/kroma-bindings/bindings/kromaportal.go similarity index 100% rename from op-bindings/bindings/kromaportal.go rename to kroma-bindings/bindings/kromaportal.go diff --git a/op-bindings/bindings/kromaportal_more.go b/kroma-bindings/bindings/kromaportal_more.go similarity index 92% rename from op-bindings/bindings/kromaportal_more.go rename to kroma-bindings/bindings/kromaportal_more.go index 4e3b41916..187e7f2e5 100644 --- a/op-bindings/bindings/kromaportal_more.go +++ b/kroma-bindings/bindings/kromaportal_more.go @@ -9,7 +9,7 @@ import ( "github.com/ethereum-optimism/optimism/op-bindings/solc" ) -const KromaPortalStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L1/KromaPortal.sol:KromaPortal\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/L1/KromaPortal.sol:KromaPortal\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/L1/KromaPortal.sol:KromaPortal\",\"label\":\"params\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_struct(ResourceParams)1010_storage\"},{\"astId\":1003,\"contract\":\"contracts/L1/KromaPortal.sol:KromaPortal\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_array(t_uint256)1008_storage\"},{\"astId\":1004,\"contract\":\"contracts/L1/KromaPortal.sol:KromaPortal\",\"label\":\"l2Sender\",\"offset\":0,\"slot\":\"50\",\"type\":\"t_address\"},{\"astId\":1005,\"contract\":\"contracts/L1/KromaPortal.sol:KromaPortal\",\"label\":\"finalizedWithdrawals\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1006,\"contract\":\"contracts/L1/KromaPortal.sol:KromaPortal\",\"label\":\"provenWithdrawals\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_mapping(t_bytes32,t_struct(ProvenWithdrawal)1009_storage)\"},{\"astId\":1007,\"contract\":\"contracts/L1/KromaPortal.sol:KromaPortal\",\"label\":\"paused\",\"offset\":0,\"slot\":\"53\",\"type\":\"t_bool\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)1008_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[48]\",\"numberOfBytes\":\"1536\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_bytes32,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_bool\"},\"t_mapping(t_bytes32,t_struct(ProvenWithdrawal)1009_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e struct KromaPortal.ProvenWithdrawal)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_struct(ProvenWithdrawal)1009_storage\"},\"t_struct(ProvenWithdrawal)1009_storage\":{\"encoding\":\"inplace\",\"label\":\"struct KromaPortal.ProvenWithdrawal\",\"numberOfBytes\":\"64\"},\"t_struct(ResourceParams)1010_storage\":{\"encoding\":\"inplace\",\"label\":\"struct ResourceMetering.ResourceParams\",\"numberOfBytes\":\"32\"},\"t_uint128\":{\"encoding\":\"inplace\",\"label\":\"uint128\",\"numberOfBytes\":\"16\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint64\":{\"encoding\":\"inplace\",\"label\":\"uint64\",\"numberOfBytes\":\"8\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" +const KromaPortalStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L1/KromaPortal.sol:KromaPortal\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/L1/KromaPortal.sol:KromaPortal\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/L1/KromaPortal.sol:KromaPortal\",\"label\":\"params\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_struct(ResourceParams)1009_storage\"},{\"astId\":1003,\"contract\":\"contracts/L1/KromaPortal.sol:KromaPortal\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_array(t_uint256)48_storage\"},{\"astId\":1004,\"contract\":\"contracts/L1/KromaPortal.sol:KromaPortal\",\"label\":\"l2Sender\",\"offset\":0,\"slot\":\"50\",\"type\":\"t_address\"},{\"astId\":1005,\"contract\":\"contracts/L1/KromaPortal.sol:KromaPortal\",\"label\":\"finalizedWithdrawals\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1006,\"contract\":\"contracts/L1/KromaPortal.sol:KromaPortal\",\"label\":\"provenWithdrawals\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_mapping(t_bytes32,t_struct(ProvenWithdrawal)1008_storage)\"},{\"astId\":1007,\"contract\":\"contracts/L1/KromaPortal.sol:KromaPortal\",\"label\":\"paused\",\"offset\":0,\"slot\":\"53\",\"type\":\"t_bool\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)48_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[48]\",\"numberOfBytes\":\"1536\",\"base\":\"t_uint256\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_bytes32,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_bool\"},\"t_mapping(t_bytes32,t_struct(ProvenWithdrawal)1008_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e struct KromaPortal.ProvenWithdrawal)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_struct(ProvenWithdrawal)1008_storage\"},\"t_struct(ProvenWithdrawal)1008_storage\":{\"encoding\":\"inplace\",\"label\":\"struct KromaPortal.ProvenWithdrawal\",\"numberOfBytes\":\"64\"},\"t_struct(ResourceParams)1009_storage\":{\"encoding\":\"inplace\",\"label\":\"struct ResourceMetering.ResourceParams\",\"numberOfBytes\":\"32\"},\"t_uint128\":{\"encoding\":\"inplace\",\"label\":\"uint128\",\"numberOfBytes\":\"16\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint64\":{\"encoding\":\"inplace\",\"label\":\"uint64\",\"numberOfBytes\":\"8\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" var KromaPortalStorageLayout = new(solc.StorageLayout) diff --git a/kroma-bindings/bindings/l1block.go b/kroma-bindings/bindings/l1block.go new file mode 100644 index 000000000..39a81ebd6 --- /dev/null +++ b/kroma-bindings/bindings/l1block.go @@ -0,0 +1,565 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// L1BlockMetaData contains all meta data concerning the L1Block contract. +var L1BlockMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"DEPOSITOR_ACCOUNT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"basefee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batcherHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1FeeOverhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1FeeScalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"number\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_number\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"_timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"_basefee\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_l1FeeOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_l1FeeScalar\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_validatorRewardScalar\",\"type\":\"uint256\"}],\"name\":\"setL1BlockValues\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"timestamp\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorRewardScalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60e060405234801561001057600080fd5b5060016080819052600060a081905260c0819052806107fe61004a823960006102460152600061021d015260006101f401526107fe6000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80639e8c496611610081578063e81b2c6d1161005b578063e81b2c6d146101c6578063ed579ad3146101cf578063efc674eb146101d857600080fd5b80639e8c49661461015d578063b80777ea14610166578063e591b2821461018657600080fd5b806364ca23ef116100b257806364ca23ef146101135780638381f58a146101405780638b239f731461015457600080fd5b806309bd5a60146100d957806354fd4d50146100f55780635cf249691461010a575b600080fd5b6100e260025481565b6040519081526020015b60405180910390f35b6100fd6101ed565b6040516100ec9190610662565b6100e260015481565b6003546101279067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016100ec565b6000546101279067ffffffffffffffff1681565b6100e260055481565b6100e260065481565b6000546101279068010000000000000000900467ffffffffffffffff1681565b6101a173deaddeaddeaddeaddeaddeaddeaddeaddead000181565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ec565b6100e260045481565b6100e260075481565b6101eb6101e63660046106d0565b610290565b005b60606102187f0000000000000000000000000000000000000000000000000000000000000000610491565b6102417f0000000000000000000000000000000000000000000000000000000000000000610491565b61026a7f0000000000000000000000000000000000000000000000000000000000000000610491565b60405160200161027c9392919061074c565b604051602081830303815290604052905090565b3373deaddeaddeaddeaddeaddeaddeaddeaddead000114610338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4c31426c6f636b3a206f6e6c7920746865206465706f7369746f72206163636f60448201527f756e742063616e20736574204c3120626c6f636b2076616c756573000000000060648201526084015b60405180910390fd5b6127108111156103f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4c31426c6f636b3a20746865206d61782076616c7565206f662076616c69646160448201527f746f7220726577617264207363616c617220686173206265656e20657863656560648201527f6465640000000000000000000000000000000000000000000000000000000000608482015260a40161032f565b6000805467ffffffffffffffff998a1668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009091169a8a169a909a179990991790985560019590955560029390935560038054929095167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009290921691909117909355600492909255600591909155600655600755565b6060600061049e8361054f565b600101905060008167ffffffffffffffff8111156104be576104be6107c2565b6040519080825280601f01601f1916602001820160405280156104e8576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846104f257509392505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610598577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105c4576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105e257662386f26fc10000830492506010015b6305f5e10083106105fa576305f5e100830492506008015b612710831061060e57612710830492506004015b60648310610620576064830492506002015b600a831061062c576001015b92915050565b60005b8381101561064d578181015183820152602001610635565b8381111561065c576000848401525b50505050565b6020815260008251806020840152610681816040850160208701610632565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803567ffffffffffffffff811681146106cb57600080fd5b919050565b60008060008060008060008060006101208a8c0312156106ef57600080fd5b6106f88a6106b3565b985061070660208b016106b3565b975060408a0135965060608a0135955061072260808b016106b3565b989b979a50959894979660a0860135965060c08601359560e0810135955061010001359350915050565b6000845161075e818460208901610632565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161079a816001850160208a01610632565b600192019182015283516107b5816002840160208801610632565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a", +} + +// L1BlockABI is the input ABI used to generate the binding from. +// Deprecated: Use L1BlockMetaData.ABI instead. +var L1BlockABI = L1BlockMetaData.ABI + +// L1BlockBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use L1BlockMetaData.Bin instead. +var L1BlockBin = L1BlockMetaData.Bin + +// DeployL1Block deploys a new Ethereum contract, binding an instance of L1Block to it. +func DeployL1Block(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *L1Block, error) { + parsed, err := L1BlockMetaData.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(L1BlockBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &L1Block{L1BlockCaller: L1BlockCaller{contract: contract}, L1BlockTransactor: L1BlockTransactor{contract: contract}, L1BlockFilterer: L1BlockFilterer{contract: contract}}, nil +} + +// L1Block is an auto generated Go binding around an Ethereum contract. +type L1Block struct { + L1BlockCaller // Read-only binding to the contract + L1BlockTransactor // Write-only binding to the contract + L1BlockFilterer // Log filterer for contract events +} + +// L1BlockCaller is an auto generated read-only Go binding around an Ethereum contract. +type L1BlockCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L1BlockTransactor is an auto generated write-only Go binding around an Ethereum contract. +type L1BlockTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L1BlockFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type L1BlockFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L1BlockSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type L1BlockSession struct { + Contract *L1Block // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// L1BlockCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type L1BlockCallerSession struct { + Contract *L1BlockCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// L1BlockTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type L1BlockTransactorSession struct { + Contract *L1BlockTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// L1BlockRaw is an auto generated low-level Go binding around an Ethereum contract. +type L1BlockRaw struct { + Contract *L1Block // Generic contract binding to access the raw methods on +} + +// L1BlockCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type L1BlockCallerRaw struct { + Contract *L1BlockCaller // Generic read-only contract binding to access the raw methods on +} + +// L1BlockTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type L1BlockTransactorRaw struct { + Contract *L1BlockTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewL1Block creates a new instance of L1Block, bound to a specific deployed contract. +func NewL1Block(address common.Address, backend bind.ContractBackend) (*L1Block, error) { + contract, err := bindL1Block(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &L1Block{L1BlockCaller: L1BlockCaller{contract: contract}, L1BlockTransactor: L1BlockTransactor{contract: contract}, L1BlockFilterer: L1BlockFilterer{contract: contract}}, nil +} + +// NewL1BlockCaller creates a new read-only instance of L1Block, bound to a specific deployed contract. +func NewL1BlockCaller(address common.Address, caller bind.ContractCaller) (*L1BlockCaller, error) { + contract, err := bindL1Block(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &L1BlockCaller{contract: contract}, nil +} + +// NewL1BlockTransactor creates a new write-only instance of L1Block, bound to a specific deployed contract. +func NewL1BlockTransactor(address common.Address, transactor bind.ContractTransactor) (*L1BlockTransactor, error) { + contract, err := bindL1Block(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &L1BlockTransactor{contract: contract}, nil +} + +// NewL1BlockFilterer creates a new log filterer instance of L1Block, bound to a specific deployed contract. +func NewL1BlockFilterer(address common.Address, filterer bind.ContractFilterer) (*L1BlockFilterer, error) { + contract, err := bindL1Block(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &L1BlockFilterer{contract: contract}, nil +} + +// bindL1Block binds a generic wrapper to an already deployed contract. +func bindL1Block(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := L1BlockMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_L1Block *L1BlockRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _L1Block.Contract.L1BlockCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_L1Block *L1BlockRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L1Block.Contract.L1BlockTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_L1Block *L1BlockRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _L1Block.Contract.L1BlockTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_L1Block *L1BlockCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _L1Block.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_L1Block *L1BlockTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L1Block.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_L1Block *L1BlockTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _L1Block.Contract.contract.Transact(opts, method, params...) +} + +// DEPOSITORACCOUNT is a free data retrieval call binding the contract method 0xe591b282. +// +// Solidity: function DEPOSITOR_ACCOUNT() view returns(address) +func (_L1Block *L1BlockCaller) DEPOSITORACCOUNT(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L1Block.contract.Call(opts, &out, "DEPOSITOR_ACCOUNT") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// DEPOSITORACCOUNT is a free data retrieval call binding the contract method 0xe591b282. +// +// Solidity: function DEPOSITOR_ACCOUNT() view returns(address) +func (_L1Block *L1BlockSession) DEPOSITORACCOUNT() (common.Address, error) { + return _L1Block.Contract.DEPOSITORACCOUNT(&_L1Block.CallOpts) +} + +// DEPOSITORACCOUNT is a free data retrieval call binding the contract method 0xe591b282. +// +// Solidity: function DEPOSITOR_ACCOUNT() view returns(address) +func (_L1Block *L1BlockCallerSession) DEPOSITORACCOUNT() (common.Address, error) { + return _L1Block.Contract.DEPOSITORACCOUNT(&_L1Block.CallOpts) +} + +// Basefee is a free data retrieval call binding the contract method 0x5cf24969. +// +// Solidity: function basefee() view returns(uint256) +func (_L1Block *L1BlockCaller) Basefee(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _L1Block.contract.Call(opts, &out, "basefee") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Basefee is a free data retrieval call binding the contract method 0x5cf24969. +// +// Solidity: function basefee() view returns(uint256) +func (_L1Block *L1BlockSession) Basefee() (*big.Int, error) { + return _L1Block.Contract.Basefee(&_L1Block.CallOpts) +} + +// Basefee is a free data retrieval call binding the contract method 0x5cf24969. +// +// Solidity: function basefee() view returns(uint256) +func (_L1Block *L1BlockCallerSession) Basefee() (*big.Int, error) { + return _L1Block.Contract.Basefee(&_L1Block.CallOpts) +} + +// BatcherHash is a free data retrieval call binding the contract method 0xe81b2c6d. +// +// Solidity: function batcherHash() view returns(bytes32) +func (_L1Block *L1BlockCaller) BatcherHash(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _L1Block.contract.Call(opts, &out, "batcherHash") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// BatcherHash is a free data retrieval call binding the contract method 0xe81b2c6d. +// +// Solidity: function batcherHash() view returns(bytes32) +func (_L1Block *L1BlockSession) BatcherHash() ([32]byte, error) { + return _L1Block.Contract.BatcherHash(&_L1Block.CallOpts) +} + +// BatcherHash is a free data retrieval call binding the contract method 0xe81b2c6d. +// +// Solidity: function batcherHash() view returns(bytes32) +func (_L1Block *L1BlockCallerSession) BatcherHash() ([32]byte, error) { + return _L1Block.Contract.BatcherHash(&_L1Block.CallOpts) +} + +// Hash is a free data retrieval call binding the contract method 0x09bd5a60. +// +// Solidity: function hash() view returns(bytes32) +func (_L1Block *L1BlockCaller) Hash(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _L1Block.contract.Call(opts, &out, "hash") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// Hash is a free data retrieval call binding the contract method 0x09bd5a60. +// +// Solidity: function hash() view returns(bytes32) +func (_L1Block *L1BlockSession) Hash() ([32]byte, error) { + return _L1Block.Contract.Hash(&_L1Block.CallOpts) +} + +// Hash is a free data retrieval call binding the contract method 0x09bd5a60. +// +// Solidity: function hash() view returns(bytes32) +func (_L1Block *L1BlockCallerSession) Hash() ([32]byte, error) { + return _L1Block.Contract.Hash(&_L1Block.CallOpts) +} + +// L1FeeOverhead is a free data retrieval call binding the contract method 0x8b239f73. +// +// Solidity: function l1FeeOverhead() view returns(uint256) +func (_L1Block *L1BlockCaller) L1FeeOverhead(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _L1Block.contract.Call(opts, &out, "l1FeeOverhead") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// L1FeeOverhead is a free data retrieval call binding the contract method 0x8b239f73. +// +// Solidity: function l1FeeOverhead() view returns(uint256) +func (_L1Block *L1BlockSession) L1FeeOverhead() (*big.Int, error) { + return _L1Block.Contract.L1FeeOverhead(&_L1Block.CallOpts) +} + +// L1FeeOverhead is a free data retrieval call binding the contract method 0x8b239f73. +// +// Solidity: function l1FeeOverhead() view returns(uint256) +func (_L1Block *L1BlockCallerSession) L1FeeOverhead() (*big.Int, error) { + return _L1Block.Contract.L1FeeOverhead(&_L1Block.CallOpts) +} + +// L1FeeScalar is a free data retrieval call binding the contract method 0x9e8c4966. +// +// Solidity: function l1FeeScalar() view returns(uint256) +func (_L1Block *L1BlockCaller) L1FeeScalar(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _L1Block.contract.Call(opts, &out, "l1FeeScalar") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// L1FeeScalar is a free data retrieval call binding the contract method 0x9e8c4966. +// +// Solidity: function l1FeeScalar() view returns(uint256) +func (_L1Block *L1BlockSession) L1FeeScalar() (*big.Int, error) { + return _L1Block.Contract.L1FeeScalar(&_L1Block.CallOpts) +} + +// L1FeeScalar is a free data retrieval call binding the contract method 0x9e8c4966. +// +// Solidity: function l1FeeScalar() view returns(uint256) +func (_L1Block *L1BlockCallerSession) L1FeeScalar() (*big.Int, error) { + return _L1Block.Contract.L1FeeScalar(&_L1Block.CallOpts) +} + +// Number is a free data retrieval call binding the contract method 0x8381f58a. +// +// Solidity: function number() view returns(uint64) +func (_L1Block *L1BlockCaller) Number(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _L1Block.contract.Call(opts, &out, "number") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// Number is a free data retrieval call binding the contract method 0x8381f58a. +// +// Solidity: function number() view returns(uint64) +func (_L1Block *L1BlockSession) Number() (uint64, error) { + return _L1Block.Contract.Number(&_L1Block.CallOpts) +} + +// Number is a free data retrieval call binding the contract method 0x8381f58a. +// +// Solidity: function number() view returns(uint64) +func (_L1Block *L1BlockCallerSession) Number() (uint64, error) { + return _L1Block.Contract.Number(&_L1Block.CallOpts) +} + +// SequenceNumber is a free data retrieval call binding the contract method 0x64ca23ef. +// +// Solidity: function sequenceNumber() view returns(uint64) +func (_L1Block *L1BlockCaller) SequenceNumber(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _L1Block.contract.Call(opts, &out, "sequenceNumber") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// SequenceNumber is a free data retrieval call binding the contract method 0x64ca23ef. +// +// Solidity: function sequenceNumber() view returns(uint64) +func (_L1Block *L1BlockSession) SequenceNumber() (uint64, error) { + return _L1Block.Contract.SequenceNumber(&_L1Block.CallOpts) +} + +// SequenceNumber is a free data retrieval call binding the contract method 0x64ca23ef. +// +// Solidity: function sequenceNumber() view returns(uint64) +func (_L1Block *L1BlockCallerSession) SequenceNumber() (uint64, error) { + return _L1Block.Contract.SequenceNumber(&_L1Block.CallOpts) +} + +// Timestamp is a free data retrieval call binding the contract method 0xb80777ea. +// +// Solidity: function timestamp() view returns(uint64) +func (_L1Block *L1BlockCaller) Timestamp(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _L1Block.contract.Call(opts, &out, "timestamp") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// Timestamp is a free data retrieval call binding the contract method 0xb80777ea. +// +// Solidity: function timestamp() view returns(uint64) +func (_L1Block *L1BlockSession) Timestamp() (uint64, error) { + return _L1Block.Contract.Timestamp(&_L1Block.CallOpts) +} + +// Timestamp is a free data retrieval call binding the contract method 0xb80777ea. +// +// Solidity: function timestamp() view returns(uint64) +func (_L1Block *L1BlockCallerSession) Timestamp() (uint64, error) { + return _L1Block.Contract.Timestamp(&_L1Block.CallOpts) +} + +// ValidatorRewardScalar is a free data retrieval call binding the contract method 0xed579ad3. +// +// Solidity: function validatorRewardScalar() view returns(uint256) +func (_L1Block *L1BlockCaller) ValidatorRewardScalar(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _L1Block.contract.Call(opts, &out, "validatorRewardScalar") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ValidatorRewardScalar is a free data retrieval call binding the contract method 0xed579ad3. +// +// Solidity: function validatorRewardScalar() view returns(uint256) +func (_L1Block *L1BlockSession) ValidatorRewardScalar() (*big.Int, error) { + return _L1Block.Contract.ValidatorRewardScalar(&_L1Block.CallOpts) +} + +// ValidatorRewardScalar is a free data retrieval call binding the contract method 0xed579ad3. +// +// Solidity: function validatorRewardScalar() view returns(uint256) +func (_L1Block *L1BlockCallerSession) ValidatorRewardScalar() (*big.Int, error) { + return _L1Block.Contract.ValidatorRewardScalar(&_L1Block.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L1Block *L1BlockCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _L1Block.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L1Block *L1BlockSession) Version() (string, error) { + return _L1Block.Contract.Version(&_L1Block.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L1Block *L1BlockCallerSession) Version() (string, error) { + return _L1Block.Contract.Version(&_L1Block.CallOpts) +} + +// SetL1BlockValues is a paid mutator transaction binding the contract method 0xefc674eb. +// +// Solidity: function setL1BlockValues(uint64 _number, uint64 _timestamp, uint256 _basefee, bytes32 _hash, uint64 _sequenceNumber, bytes32 _batcherHash, uint256 _l1FeeOverhead, uint256 _l1FeeScalar, uint256 _validatorRewardScalar) returns() +func (_L1Block *L1BlockTransactor) SetL1BlockValues(opts *bind.TransactOpts, _number uint64, _timestamp uint64, _basefee *big.Int, _hash [32]byte, _sequenceNumber uint64, _batcherHash [32]byte, _l1FeeOverhead *big.Int, _l1FeeScalar *big.Int, _validatorRewardScalar *big.Int) (*types.Transaction, error) { + return _L1Block.contract.Transact(opts, "setL1BlockValues", _number, _timestamp, _basefee, _hash, _sequenceNumber, _batcherHash, _l1FeeOverhead, _l1FeeScalar, _validatorRewardScalar) +} + +// SetL1BlockValues is a paid mutator transaction binding the contract method 0xefc674eb. +// +// Solidity: function setL1BlockValues(uint64 _number, uint64 _timestamp, uint256 _basefee, bytes32 _hash, uint64 _sequenceNumber, bytes32 _batcherHash, uint256 _l1FeeOverhead, uint256 _l1FeeScalar, uint256 _validatorRewardScalar) returns() +func (_L1Block *L1BlockSession) SetL1BlockValues(_number uint64, _timestamp uint64, _basefee *big.Int, _hash [32]byte, _sequenceNumber uint64, _batcherHash [32]byte, _l1FeeOverhead *big.Int, _l1FeeScalar *big.Int, _validatorRewardScalar *big.Int) (*types.Transaction, error) { + return _L1Block.Contract.SetL1BlockValues(&_L1Block.TransactOpts, _number, _timestamp, _basefee, _hash, _sequenceNumber, _batcherHash, _l1FeeOverhead, _l1FeeScalar, _validatorRewardScalar) +} + +// SetL1BlockValues is a paid mutator transaction binding the contract method 0xefc674eb. +// +// Solidity: function setL1BlockValues(uint64 _number, uint64 _timestamp, uint256 _basefee, bytes32 _hash, uint64 _sequenceNumber, bytes32 _batcherHash, uint256 _l1FeeOverhead, uint256 _l1FeeScalar, uint256 _validatorRewardScalar) returns() +func (_L1Block *L1BlockTransactorSession) SetL1BlockValues(_number uint64, _timestamp uint64, _basefee *big.Int, _hash [32]byte, _sequenceNumber uint64, _batcherHash [32]byte, _l1FeeOverhead *big.Int, _l1FeeScalar *big.Int, _validatorRewardScalar *big.Int) (*types.Transaction, error) { + return _L1Block.Contract.SetL1BlockValues(&_L1Block.TransactOpts, _number, _timestamp, _basefee, _hash, _sequenceNumber, _batcherHash, _l1FeeOverhead, _l1FeeScalar, _validatorRewardScalar) +} diff --git a/kroma-bindings/bindings/l1block_more.go b/kroma-bindings/bindings/l1block_more.go new file mode 100644 index 000000000..a275604b7 --- /dev/null +++ b/kroma-bindings/bindings/l1block_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const L1BlockStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L2/L1Block.sol:L1Block\",\"label\":\"number\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint64\"},{\"astId\":1001,\"contract\":\"contracts/L2/L1Block.sol:L1Block\",\"label\":\"timestamp\",\"offset\":8,\"slot\":\"0\",\"type\":\"t_uint64\"},{\"astId\":1002,\"contract\":\"contracts/L2/L1Block.sol:L1Block\",\"label\":\"basefee\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_uint256\"},{\"astId\":1003,\"contract\":\"contracts/L2/L1Block.sol:L1Block\",\"label\":\"hash\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_bytes32\"},{\"astId\":1004,\"contract\":\"contracts/L2/L1Block.sol:L1Block\",\"label\":\"sequenceNumber\",\"offset\":0,\"slot\":\"3\",\"type\":\"t_uint64\"},{\"astId\":1005,\"contract\":\"contracts/L2/L1Block.sol:L1Block\",\"label\":\"batcherHash\",\"offset\":0,\"slot\":\"4\",\"type\":\"t_bytes32\"},{\"astId\":1006,\"contract\":\"contracts/L2/L1Block.sol:L1Block\",\"label\":\"l1FeeOverhead\",\"offset\":0,\"slot\":\"5\",\"type\":\"t_uint256\"},{\"astId\":1007,\"contract\":\"contracts/L2/L1Block.sol:L1Block\",\"label\":\"l1FeeScalar\",\"offset\":0,\"slot\":\"6\",\"type\":\"t_uint256\"},{\"astId\":1008,\"contract\":\"contracts/L2/L1Block.sol:L1Block\",\"label\":\"validatorRewardScalar\",\"offset\":0,\"slot\":\"7\",\"type\":\"t_uint256\"}],\"types\":{\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint64\":{\"encoding\":\"inplace\",\"label\":\"uint64\",\"numberOfBytes\":\"8\"}}}" + +var L1BlockStorageLayout = new(solc.StorageLayout) + +var L1BlockDeployedBin = "0x608060405234801561001057600080fd5b50600436106100d45760003560e01c80639e8c496611610081578063e81b2c6d1161005b578063e81b2c6d146101c6578063ed579ad3146101cf578063efc674eb146101d857600080fd5b80639e8c49661461015d578063b80777ea14610166578063e591b2821461018657600080fd5b806364ca23ef116100b257806364ca23ef146101135780638381f58a146101405780638b239f731461015457600080fd5b806309bd5a60146100d957806354fd4d50146100f55780635cf249691461010a575b600080fd5b6100e260025481565b6040519081526020015b60405180910390f35b6100fd6101ed565b6040516100ec9190610662565b6100e260015481565b6003546101279067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016100ec565b6000546101279067ffffffffffffffff1681565b6100e260055481565b6100e260065481565b6000546101279068010000000000000000900467ffffffffffffffff1681565b6101a173deaddeaddeaddeaddeaddeaddeaddeaddead000181565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ec565b6100e260045481565b6100e260075481565b6101eb6101e63660046106d0565b610290565b005b60606102187f0000000000000000000000000000000000000000000000000000000000000000610491565b6102417f0000000000000000000000000000000000000000000000000000000000000000610491565b61026a7f0000000000000000000000000000000000000000000000000000000000000000610491565b60405160200161027c9392919061074c565b604051602081830303815290604052905090565b3373deaddeaddeaddeaddeaddeaddeaddeaddead000114610338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4c31426c6f636b3a206f6e6c7920746865206465706f7369746f72206163636f60448201527f756e742063616e20736574204c3120626c6f636b2076616c756573000000000060648201526084015b60405180910390fd5b6127108111156103f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4c31426c6f636b3a20746865206d61782076616c7565206f662076616c69646160448201527f746f7220726577617264207363616c617220686173206265656e20657863656560648201527f6465640000000000000000000000000000000000000000000000000000000000608482015260a40161032f565b6000805467ffffffffffffffff998a1668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009091169a8a169a909a179990991790985560019590955560029390935560038054929095167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009290921691909117909355600492909255600591909155600655600755565b6060600061049e8361054f565b600101905060008167ffffffffffffffff8111156104be576104be6107c2565b6040519080825280601f01601f1916602001820160405280156104e8576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846104f257509392505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610598577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105c4576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105e257662386f26fc10000830492506010015b6305f5e10083106105fa576305f5e100830492506008015b612710831061060e57612710830492506004015b60648310610620576064830492506002015b600a831061062c576001015b92915050565b60005b8381101561064d578181015183820152602001610635565b8381111561065c576000848401525b50505050565b6020815260008251806020840152610681816040850160208701610632565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803567ffffffffffffffff811681146106cb57600080fd5b919050565b60008060008060008060008060006101208a8c0312156106ef57600080fd5b6106f88a6106b3565b985061070660208b016106b3565b975060408a0135965060608a0135955061072260808b016106b3565b989b979a50959894979660a0860135965060c08601359560e0810135955061010001359350915050565b6000845161075e818460208901610632565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161079a816001850160208a01610632565b600192019182015283516107b5816002840160208801610632565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(L1BlockStorageLayoutJSON), L1BlockStorageLayout); err != nil { + panic(err) + } + + layouts["L1Block"] = L1BlockStorageLayout + deployedBytecodes["L1Block"] = L1BlockDeployedBin +} diff --git a/kroma-bindings/bindings/l1crossdomainmessenger.go b/kroma-bindings/bindings/l1crossdomainmessenger.go new file mode 100644 index 000000000..ac1a6f370 --- /dev/null +++ b/kroma-bindings/bindings/l1crossdomainmessenger.go @@ -0,0 +1,1640 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// L1CrossDomainMessengerMetaData contains all meta data concerning the L1CrossDomainMessenger contract. +var L1CrossDomainMessengerMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"contractKromaPortal\",\"name\":\"_portal\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"FailedRelayedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"RelayedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"messageNonce\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"}],\"name\":\"SentMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSAGE_VERSION\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_MESSENGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PORTAL\",\"outputs\":[{\"internalType\":\"contractKromaPortal\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_CALL_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_RESERVED_GAS\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"}],\"name\":\"baseGas\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"failedMessages\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"relayMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"}],\"name\":\"sendMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"successfulMessages\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"xDomainMessageSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x6101206040523480156200001257600080fd5b5060405162001fbd38038062001fbd83398101604081905262000035916200023f565b734200000000000000000000000000000000000004608052600160a052600060c081905260e0526001600160a01b03811661010052620000746200007b565b5062000271565b600054610100900460ff16158080156200009c5750600054600160ff909116105b80620000cc5750620000b930620001ad60201b620011231760201c565b158015620000cc575060005460ff166001145b620001355760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000159576000805461ff0019166101001790555b62000163620001bc565b8015620001aa576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6001600160a01b03163b151590565b600054610100900460ff16620002295760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016200012c565b606680546001600160a01b03191661dead179055565b6000602082840312156200025257600080fd5b81516001600160a01b03811681146200026a57600080fd5b9392505050565b60805160a05160c05160e05161010051611cdd620002e0600039600081816101be0152818161117c015281816113b40152818161141501526114e1015260006106560152600061062d0152600061060401526000818161031c0152818161041401526113de0152611cdd6000f3fe60806040526004361061015f5760003560e01c80636e296e45116100c0578063a4e7f8bd11610074578063b28ade2511610059578063b28ade251461039e578063d764ad0b146103be578063ecc70428146103d157600080fd5b8063a4e7f8bd1461033e578063b1b1b2091461036e57600080fd5b806383a74074116100a557806383a74074146102f35780638cbeeef2146102575780639fce812c1461030a57600080fd5b80636e296e45146102c95780638129fc1c146102de57600080fd5b80633f827a5a1161011757806354fd4d50116100fc57806354fd4d501461026d5780635644cfdf1461028f5780635c975abb146102a557600080fd5b80633f827a5a1461022f5780634c1d6a691461025757600080fd5b80630ff754ea116101485780630ff754ea146101ac5780632828d7e8146102055780633dbb202b1461021a57600080fd5b8063028f85f7146101645780630c56849814610197575b600080fd5b34801561017057600080fd5b50610179601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101a357600080fd5b50610179603f81565b3480156101b857600080fd5b506101e07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161018e565b34801561021157600080fd5b50610179604081565b61022d610228366004611772565b61040f565b005b34801561023b57600080fd5b50610244600081565b60405161ffff909116815260200161018e565b34801561026357600080fd5b50610179619c4081565b34801561027957600080fd5b506102826105fd565b60405161018e9190611853565b34801561029b57600080fd5b5061017961138881565b3480156102b157600080fd5b5060335460ff165b604051901515815260200161018e565b3480156102d557600080fd5b506101e06106a0565b3480156102ea57600080fd5b5061022d61078c565b3480156102ff57600080fd5b5061017962030d4081565b34801561031657600080fd5b506101e07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034a57600080fd5b506102b961035936600461186d565b60686020526000908152604090205460ff1681565b34801561037a57600080fd5b506102b961038936600461186d565b60656020526000908152604090205460ff1681565b3480156103aa57600080fd5b506101796103b9366004611886565b61091e565b61022d6103cc3660046118da565b61098c565b3480156103dd57600080fd5b506067547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660405190815260200161018e565b6105277f000000000000000000000000000000000000000000000000000000000000000061043e85858561091e565b347fd764ad0b000000000000000000000000000000000000000000000000000000006104896067547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b338a34898c8c6040516024016104a597969594939291906119a9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261113f565b3373ffffffffffffffffffffffffffffffffffffffff85167fdd28cef75ff18fb538e43317144469f339702f973eace2bc808f2acc37db310e34868661058c6067547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b8760405161059e959493929190611a08565b60405180910390a35050606780547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60606106287f00000000000000000000000000000000000000000000000000000000000000006111f4565b6106517f00000000000000000000000000000000000000000000000000000000000000006111f4565b61067a7f00000000000000000000000000000000000000000000000000000000000000006111f4565b60405160200161068c93929190611a40565b604051602081830303815290604052905090565b60665460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21530161076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084015b60405180910390fd5b5060665473ffffffffffffffffffffffffffffffffffffffff1690565b600054610100900460ff16158080156107ac5750600054600160ff909116105b806107c65750303b1580156107c6575060005460ff166001145b610852576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610766565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156108b057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6108b86112b2565b801561091b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6000611388619c4080603f61093a604063ffffffff8816611ae5565b6109449190611b15565b61094f601088611ae5565b61095c9062030d40611b63565b6109669190611b63565b6109709190611b63565b61097a9190611b63565b6109849190611b63565b949350505050565b60f087901c60018110610a47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206d6573736167657320697320737570706f7274656420617420746860648201527f69732074696d6500000000000000000000000000000000000000000000000000608482015260a401610766565b6000610a8d898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061137792505050565b9050610a9761139a565b15610acf57853414610aab57610aab611b8f565b60008181526068602052604090205460ff1615610aca57610aca611b8f565b610c21565b3415610b83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610766565b60008181526068602052604090205460ff16610c21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610766565b610c2a876114be565b15610cdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610766565b60008181526065602052604090205460ff1615610d7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610766565b610d9d85610d8e611388619c40611b63565b67ffffffffffffffff16611535565b1580610dc3575060665473ffffffffffffffffffffffffffffffffffffffff1661dead14155b15610edc5760008181526068602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201610ed5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610766565b5050611115565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a161790556000610f6d88619c405a610f309190611bbe565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061155392505050565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156110045760008281526065602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2611111565b60008281526068602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610766565b5050505b50505050505050565b905090565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e9e05c429084906111bc908890839089906000908990600401611bd5565b6000604051808303818588803b1580156111d557600080fd5b505af11580156111e9573d6000803e3d6000fd5b505050505050505050565b606060006112018361156d565b600101905060008167ffffffffffffffff81111561122157611221611c2d565b6040519080825280601f01601f19166020018201604052801561124b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461125557509392505050565b600054610100900460ff16611349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610766565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055565b600061138787878787878761164f565b8051906020012090509695505050505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561111e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639bf62d826040518163ffffffff1660e01b8152600401602060405180830381865afa15801561147e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a29190611c5c565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff821630148061152f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115b6577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115e2576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061160057662386f26fc10000830492506010015b6305f5e1008310611618576305f5e100830492506008015b612710831061162c57612710830492506004015b6064831061163e576064830492506002015b600a831061152f5760010192915050565b606086868686868660405160240161166c96959493929190611c79565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461091b57600080fd5b60008083601f84011261172257600080fd5b50813567ffffffffffffffff81111561173a57600080fd5b60208301915083602082850101111561175257600080fd5b9250929050565b803563ffffffff8116811461176d57600080fd5b919050565b6000806000806060858703121561178857600080fd5b8435611793816116ee565b9350602085013567ffffffffffffffff8111156117af57600080fd5b6117bb87828801611710565b90945092506117ce905060408601611759565b905092959194509250565b60005b838110156117f45781810151838201526020016117dc565b83811115611803576000848401525b50505050565b600081518084526118218160208601602086016117d9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006118666020830184611809565b9392505050565b60006020828403121561187f57600080fd5b5035919050565b60008060006040848603121561189b57600080fd5b833567ffffffffffffffff8111156118b257600080fd5b6118be86828701611710565b90945092506118d1905060208501611759565b90509250925092565b600080600080600080600060c0888a0312156118f557600080fd5b873596506020880135611907816116ee565b95506040880135611917816116ee565b9450606088013593506080880135925060a088013567ffffffffffffffff81111561194157600080fd5b61194d8a828b01611710565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a08301526119fb60c083018486611960565b9998505050505050505050565b858152608060208201526000611a22608083018688611960565b905083604083015263ffffffff831660608301529695505050505050565b60008451611a528184602089016117d9565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611a8e816001850160208a016117d9565b60019201918201528351611aa98160028401602088016117d9565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611b0c57611b0c611ab6565b02949350505050565b600067ffffffffffffffff80841680611b57577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611b8657611b86611ab6565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611bd057611bd0611ab6565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a060808201526000611c2260a0830184611809565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215611c6e57600080fd5b8151611866816116ee565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611cc460c0830184611809565b9897505050505050505056fea164736f6c634300080f000a", +} + +// L1CrossDomainMessengerABI is the input ABI used to generate the binding from. +// Deprecated: Use L1CrossDomainMessengerMetaData.ABI instead. +var L1CrossDomainMessengerABI = L1CrossDomainMessengerMetaData.ABI + +// L1CrossDomainMessengerBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use L1CrossDomainMessengerMetaData.Bin instead. +var L1CrossDomainMessengerBin = L1CrossDomainMessengerMetaData.Bin + +// DeployL1CrossDomainMessenger deploys a new Ethereum contract, binding an instance of L1CrossDomainMessenger to it. +func DeployL1CrossDomainMessenger(auth *bind.TransactOpts, backend bind.ContractBackend, _portal common.Address) (common.Address, *types.Transaction, *L1CrossDomainMessenger, error) { + parsed, err := L1CrossDomainMessengerMetaData.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(L1CrossDomainMessengerBin), backend, _portal) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &L1CrossDomainMessenger{L1CrossDomainMessengerCaller: L1CrossDomainMessengerCaller{contract: contract}, L1CrossDomainMessengerTransactor: L1CrossDomainMessengerTransactor{contract: contract}, L1CrossDomainMessengerFilterer: L1CrossDomainMessengerFilterer{contract: contract}}, nil +} + +// L1CrossDomainMessenger is an auto generated Go binding around an Ethereum contract. +type L1CrossDomainMessenger struct { + L1CrossDomainMessengerCaller // Read-only binding to the contract + L1CrossDomainMessengerTransactor // Write-only binding to the contract + L1CrossDomainMessengerFilterer // Log filterer for contract events +} + +// L1CrossDomainMessengerCaller is an auto generated read-only Go binding around an Ethereum contract. +type L1CrossDomainMessengerCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L1CrossDomainMessengerTransactor is an auto generated write-only Go binding around an Ethereum contract. +type L1CrossDomainMessengerTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L1CrossDomainMessengerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type L1CrossDomainMessengerFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L1CrossDomainMessengerSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type L1CrossDomainMessengerSession struct { + Contract *L1CrossDomainMessenger // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// L1CrossDomainMessengerCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type L1CrossDomainMessengerCallerSession struct { + Contract *L1CrossDomainMessengerCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// L1CrossDomainMessengerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type L1CrossDomainMessengerTransactorSession struct { + Contract *L1CrossDomainMessengerTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// L1CrossDomainMessengerRaw is an auto generated low-level Go binding around an Ethereum contract. +type L1CrossDomainMessengerRaw struct { + Contract *L1CrossDomainMessenger // Generic contract binding to access the raw methods on +} + +// L1CrossDomainMessengerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type L1CrossDomainMessengerCallerRaw struct { + Contract *L1CrossDomainMessengerCaller // Generic read-only contract binding to access the raw methods on +} + +// L1CrossDomainMessengerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type L1CrossDomainMessengerTransactorRaw struct { + Contract *L1CrossDomainMessengerTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewL1CrossDomainMessenger creates a new instance of L1CrossDomainMessenger, bound to a specific deployed contract. +func NewL1CrossDomainMessenger(address common.Address, backend bind.ContractBackend) (*L1CrossDomainMessenger, error) { + contract, err := bindL1CrossDomainMessenger(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &L1CrossDomainMessenger{L1CrossDomainMessengerCaller: L1CrossDomainMessengerCaller{contract: contract}, L1CrossDomainMessengerTransactor: L1CrossDomainMessengerTransactor{contract: contract}, L1CrossDomainMessengerFilterer: L1CrossDomainMessengerFilterer{contract: contract}}, nil +} + +// NewL1CrossDomainMessengerCaller creates a new read-only instance of L1CrossDomainMessenger, bound to a specific deployed contract. +func NewL1CrossDomainMessengerCaller(address common.Address, caller bind.ContractCaller) (*L1CrossDomainMessengerCaller, error) { + contract, err := bindL1CrossDomainMessenger(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &L1CrossDomainMessengerCaller{contract: contract}, nil +} + +// NewL1CrossDomainMessengerTransactor creates a new write-only instance of L1CrossDomainMessenger, bound to a specific deployed contract. +func NewL1CrossDomainMessengerTransactor(address common.Address, transactor bind.ContractTransactor) (*L1CrossDomainMessengerTransactor, error) { + contract, err := bindL1CrossDomainMessenger(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &L1CrossDomainMessengerTransactor{contract: contract}, nil +} + +// NewL1CrossDomainMessengerFilterer creates a new log filterer instance of L1CrossDomainMessenger, bound to a specific deployed contract. +func NewL1CrossDomainMessengerFilterer(address common.Address, filterer bind.ContractFilterer) (*L1CrossDomainMessengerFilterer, error) { + contract, err := bindL1CrossDomainMessenger(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &L1CrossDomainMessengerFilterer{contract: contract}, nil +} + +// bindL1CrossDomainMessenger binds a generic wrapper to an already deployed contract. +func bindL1CrossDomainMessenger(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := L1CrossDomainMessengerMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_L1CrossDomainMessenger *L1CrossDomainMessengerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _L1CrossDomainMessenger.Contract.L1CrossDomainMessengerCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_L1CrossDomainMessenger *L1CrossDomainMessengerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L1CrossDomainMessenger.Contract.L1CrossDomainMessengerTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_L1CrossDomainMessenger *L1CrossDomainMessengerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _L1CrossDomainMessenger.Contract.L1CrossDomainMessengerTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _L1CrossDomainMessenger.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L1CrossDomainMessenger.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _L1CrossDomainMessenger.Contract.contract.Transact(opts, method, params...) +} + +// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. +// +// Solidity: function MESSAGE_VERSION() view returns(uint16) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) MESSAGEVERSION(opts *bind.CallOpts) (uint16, error) { + var out []interface{} + err := _L1CrossDomainMessenger.contract.Call(opts, &out, "MESSAGE_VERSION") + + if err != nil { + return *new(uint16), err + } + + out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) + + return out0, err + +} + +// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. +// +// Solidity: function MESSAGE_VERSION() view returns(uint16) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) MESSAGEVERSION() (uint16, error) { + return _L1CrossDomainMessenger.Contract.MESSAGEVERSION(&_L1CrossDomainMessenger.CallOpts) +} + +// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. +// +// Solidity: function MESSAGE_VERSION() view returns(uint16) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) MESSAGEVERSION() (uint16, error) { + return _L1CrossDomainMessenger.Contract.MESSAGEVERSION(&_L1CrossDomainMessenger.CallOpts) +} + +// MINGASCALLDATAOVERHEAD is a free data retrieval call binding the contract method 0x028f85f7. +// +// Solidity: function MIN_GAS_CALLDATA_OVERHEAD() view returns(uint64) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) MINGASCALLDATAOVERHEAD(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _L1CrossDomainMessenger.contract.Call(opts, &out, "MIN_GAS_CALLDATA_OVERHEAD") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// MINGASCALLDATAOVERHEAD is a free data retrieval call binding the contract method 0x028f85f7. +// +// Solidity: function MIN_GAS_CALLDATA_OVERHEAD() view returns(uint64) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) MINGASCALLDATAOVERHEAD() (uint64, error) { + return _L1CrossDomainMessenger.Contract.MINGASCALLDATAOVERHEAD(&_L1CrossDomainMessenger.CallOpts) +} + +// MINGASCALLDATAOVERHEAD is a free data retrieval call binding the contract method 0x028f85f7. +// +// Solidity: function MIN_GAS_CALLDATA_OVERHEAD() view returns(uint64) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) MINGASCALLDATAOVERHEAD() (uint64, error) { + return _L1CrossDomainMessenger.Contract.MINGASCALLDATAOVERHEAD(&_L1CrossDomainMessenger.CallOpts) +} + +// MINGASDYNAMICOVERHEADDENOMINATOR is a free data retrieval call binding the contract method 0x0c568498. +// +// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR() view returns(uint64) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) MINGASDYNAMICOVERHEADDENOMINATOR(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _L1CrossDomainMessenger.contract.Call(opts, &out, "MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// MINGASDYNAMICOVERHEADDENOMINATOR is a free data retrieval call binding the contract method 0x0c568498. +// +// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR() view returns(uint64) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) MINGASDYNAMICOVERHEADDENOMINATOR() (uint64, error) { + return _L1CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADDENOMINATOR(&_L1CrossDomainMessenger.CallOpts) +} + +// MINGASDYNAMICOVERHEADDENOMINATOR is a free data retrieval call binding the contract method 0x0c568498. +// +// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR() view returns(uint64) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) MINGASDYNAMICOVERHEADDENOMINATOR() (uint64, error) { + return _L1CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADDENOMINATOR(&_L1CrossDomainMessenger.CallOpts) +} + +// MINGASDYNAMICOVERHEADNUMERATOR is a free data retrieval call binding the contract method 0x2828d7e8. +// +// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR() view returns(uint64) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) MINGASDYNAMICOVERHEADNUMERATOR(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _L1CrossDomainMessenger.contract.Call(opts, &out, "MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// MINGASDYNAMICOVERHEADNUMERATOR is a free data retrieval call binding the contract method 0x2828d7e8. +// +// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR() view returns(uint64) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) MINGASDYNAMICOVERHEADNUMERATOR() (uint64, error) { + return _L1CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADNUMERATOR(&_L1CrossDomainMessenger.CallOpts) +} + +// MINGASDYNAMICOVERHEADNUMERATOR is a free data retrieval call binding the contract method 0x2828d7e8. +// +// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR() view returns(uint64) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) MINGASDYNAMICOVERHEADNUMERATOR() (uint64, error) { + return _L1CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADNUMERATOR(&_L1CrossDomainMessenger.CallOpts) +} + +// OTHERMESSENGER is a free data retrieval call binding the contract method 0x9fce812c. +// +// Solidity: function OTHER_MESSENGER() view returns(address) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) OTHERMESSENGER(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L1CrossDomainMessenger.contract.Call(opts, &out, "OTHER_MESSENGER") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OTHERMESSENGER is a free data retrieval call binding the contract method 0x9fce812c. +// +// Solidity: function OTHER_MESSENGER() view returns(address) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) OTHERMESSENGER() (common.Address, error) { + return _L1CrossDomainMessenger.Contract.OTHERMESSENGER(&_L1CrossDomainMessenger.CallOpts) +} + +// OTHERMESSENGER is a free data retrieval call binding the contract method 0x9fce812c. +// +// Solidity: function OTHER_MESSENGER() view returns(address) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) OTHERMESSENGER() (common.Address, error) { + return _L1CrossDomainMessenger.Contract.OTHERMESSENGER(&_L1CrossDomainMessenger.CallOpts) +} + +// PORTAL is a free data retrieval call binding the contract method 0x0ff754ea. +// +// Solidity: function PORTAL() view returns(address) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) PORTAL(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L1CrossDomainMessenger.contract.Call(opts, &out, "PORTAL") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// PORTAL is a free data retrieval call binding the contract method 0x0ff754ea. +// +// Solidity: function PORTAL() view returns(address) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) PORTAL() (common.Address, error) { + return _L1CrossDomainMessenger.Contract.PORTAL(&_L1CrossDomainMessenger.CallOpts) +} + +// PORTAL is a free data retrieval call binding the contract method 0x0ff754ea. +// +// Solidity: function PORTAL() view returns(address) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) PORTAL() (common.Address, error) { + return _L1CrossDomainMessenger.Contract.PORTAL(&_L1CrossDomainMessenger.CallOpts) +} + +// RELAYCALLOVERHEAD is a free data retrieval call binding the contract method 0x4c1d6a69. +// +// Solidity: function RELAY_CALL_OVERHEAD() view returns(uint64) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) RELAYCALLOVERHEAD(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _L1CrossDomainMessenger.contract.Call(opts, &out, "RELAY_CALL_OVERHEAD") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// RELAYCALLOVERHEAD is a free data retrieval call binding the contract method 0x4c1d6a69. +// +// Solidity: function RELAY_CALL_OVERHEAD() view returns(uint64) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) RELAYCALLOVERHEAD() (uint64, error) { + return _L1CrossDomainMessenger.Contract.RELAYCALLOVERHEAD(&_L1CrossDomainMessenger.CallOpts) +} + +// RELAYCALLOVERHEAD is a free data retrieval call binding the contract method 0x4c1d6a69. +// +// Solidity: function RELAY_CALL_OVERHEAD() view returns(uint64) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) RELAYCALLOVERHEAD() (uint64, error) { + return _L1CrossDomainMessenger.Contract.RELAYCALLOVERHEAD(&_L1CrossDomainMessenger.CallOpts) +} + +// RELAYCONSTANTOVERHEAD is a free data retrieval call binding the contract method 0x83a74074. +// +// Solidity: function RELAY_CONSTANT_OVERHEAD() view returns(uint64) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) RELAYCONSTANTOVERHEAD(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _L1CrossDomainMessenger.contract.Call(opts, &out, "RELAY_CONSTANT_OVERHEAD") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// RELAYCONSTANTOVERHEAD is a free data retrieval call binding the contract method 0x83a74074. +// +// Solidity: function RELAY_CONSTANT_OVERHEAD() view returns(uint64) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) RELAYCONSTANTOVERHEAD() (uint64, error) { + return _L1CrossDomainMessenger.Contract.RELAYCONSTANTOVERHEAD(&_L1CrossDomainMessenger.CallOpts) +} + +// RELAYCONSTANTOVERHEAD is a free data retrieval call binding the contract method 0x83a74074. +// +// Solidity: function RELAY_CONSTANT_OVERHEAD() view returns(uint64) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) RELAYCONSTANTOVERHEAD() (uint64, error) { + return _L1CrossDomainMessenger.Contract.RELAYCONSTANTOVERHEAD(&_L1CrossDomainMessenger.CallOpts) +} + +// RELAYGASCHECKBUFFER is a free data retrieval call binding the contract method 0x5644cfdf. +// +// Solidity: function RELAY_GAS_CHECK_BUFFER() view returns(uint64) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) RELAYGASCHECKBUFFER(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _L1CrossDomainMessenger.contract.Call(opts, &out, "RELAY_GAS_CHECK_BUFFER") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// RELAYGASCHECKBUFFER is a free data retrieval call binding the contract method 0x5644cfdf. +// +// Solidity: function RELAY_GAS_CHECK_BUFFER() view returns(uint64) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) RELAYGASCHECKBUFFER() (uint64, error) { + return _L1CrossDomainMessenger.Contract.RELAYGASCHECKBUFFER(&_L1CrossDomainMessenger.CallOpts) +} + +// RELAYGASCHECKBUFFER is a free data retrieval call binding the contract method 0x5644cfdf. +// +// Solidity: function RELAY_GAS_CHECK_BUFFER() view returns(uint64) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) RELAYGASCHECKBUFFER() (uint64, error) { + return _L1CrossDomainMessenger.Contract.RELAYGASCHECKBUFFER(&_L1CrossDomainMessenger.CallOpts) +} + +// RELAYRESERVEDGAS is a free data retrieval call binding the contract method 0x8cbeeef2. +// +// Solidity: function RELAY_RESERVED_GAS() view returns(uint64) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) RELAYRESERVEDGAS(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _L1CrossDomainMessenger.contract.Call(opts, &out, "RELAY_RESERVED_GAS") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// RELAYRESERVEDGAS is a free data retrieval call binding the contract method 0x8cbeeef2. +// +// Solidity: function RELAY_RESERVED_GAS() view returns(uint64) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) RELAYRESERVEDGAS() (uint64, error) { + return _L1CrossDomainMessenger.Contract.RELAYRESERVEDGAS(&_L1CrossDomainMessenger.CallOpts) +} + +// RELAYRESERVEDGAS is a free data retrieval call binding the contract method 0x8cbeeef2. +// +// Solidity: function RELAY_RESERVED_GAS() view returns(uint64) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) RELAYRESERVEDGAS() (uint64, error) { + return _L1CrossDomainMessenger.Contract.RELAYRESERVEDGAS(&_L1CrossDomainMessenger.CallOpts) +} + +// BaseGas is a free data retrieval call binding the contract method 0xb28ade25. +// +// Solidity: function baseGas(bytes _message, uint32 _minGasLimit) pure returns(uint64) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) BaseGas(opts *bind.CallOpts, _message []byte, _minGasLimit uint32) (uint64, error) { + var out []interface{} + err := _L1CrossDomainMessenger.contract.Call(opts, &out, "baseGas", _message, _minGasLimit) + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// BaseGas is a free data retrieval call binding the contract method 0xb28ade25. +// +// Solidity: function baseGas(bytes _message, uint32 _minGasLimit) pure returns(uint64) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) BaseGas(_message []byte, _minGasLimit uint32) (uint64, error) { + return _L1CrossDomainMessenger.Contract.BaseGas(&_L1CrossDomainMessenger.CallOpts, _message, _minGasLimit) +} + +// BaseGas is a free data retrieval call binding the contract method 0xb28ade25. +// +// Solidity: function baseGas(bytes _message, uint32 _minGasLimit) pure returns(uint64) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) BaseGas(_message []byte, _minGasLimit uint32) (uint64, error) { + return _L1CrossDomainMessenger.Contract.BaseGas(&_L1CrossDomainMessenger.CallOpts, _message, _minGasLimit) +} + +// FailedMessages is a free data retrieval call binding the contract method 0xa4e7f8bd. +// +// Solidity: function failedMessages(bytes32 ) view returns(bool) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) FailedMessages(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { + var out []interface{} + err := _L1CrossDomainMessenger.contract.Call(opts, &out, "failedMessages", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// FailedMessages is a free data retrieval call binding the contract method 0xa4e7f8bd. +// +// Solidity: function failedMessages(bytes32 ) view returns(bool) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) FailedMessages(arg0 [32]byte) (bool, error) { + return _L1CrossDomainMessenger.Contract.FailedMessages(&_L1CrossDomainMessenger.CallOpts, arg0) +} + +// FailedMessages is a free data retrieval call binding the contract method 0xa4e7f8bd. +// +// Solidity: function failedMessages(bytes32 ) view returns(bool) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) FailedMessages(arg0 [32]byte) (bool, error) { + return _L1CrossDomainMessenger.Contract.FailedMessages(&_L1CrossDomainMessenger.CallOpts, arg0) +} + +// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. +// +// Solidity: function messageNonce() view returns(uint256) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) MessageNonce(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _L1CrossDomainMessenger.contract.Call(opts, &out, "messageNonce") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. +// +// Solidity: function messageNonce() view returns(uint256) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) MessageNonce() (*big.Int, error) { + return _L1CrossDomainMessenger.Contract.MessageNonce(&_L1CrossDomainMessenger.CallOpts) +} + +// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. +// +// Solidity: function messageNonce() view returns(uint256) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) MessageNonce() (*big.Int, error) { + return _L1CrossDomainMessenger.Contract.MessageNonce(&_L1CrossDomainMessenger.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) Paused(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _L1CrossDomainMessenger.contract.Call(opts, &out, "paused") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) Paused() (bool, error) { + return _L1CrossDomainMessenger.Contract.Paused(&_L1CrossDomainMessenger.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) Paused() (bool, error) { + return _L1CrossDomainMessenger.Contract.Paused(&_L1CrossDomainMessenger.CallOpts) +} + +// SuccessfulMessages is a free data retrieval call binding the contract method 0xb1b1b209. +// +// Solidity: function successfulMessages(bytes32 ) view returns(bool) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) SuccessfulMessages(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { + var out []interface{} + err := _L1CrossDomainMessenger.contract.Call(opts, &out, "successfulMessages", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// SuccessfulMessages is a free data retrieval call binding the contract method 0xb1b1b209. +// +// Solidity: function successfulMessages(bytes32 ) view returns(bool) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) SuccessfulMessages(arg0 [32]byte) (bool, error) { + return _L1CrossDomainMessenger.Contract.SuccessfulMessages(&_L1CrossDomainMessenger.CallOpts, arg0) +} + +// SuccessfulMessages is a free data retrieval call binding the contract method 0xb1b1b209. +// +// Solidity: function successfulMessages(bytes32 ) view returns(bool) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) SuccessfulMessages(arg0 [32]byte) (bool, error) { + return _L1CrossDomainMessenger.Contract.SuccessfulMessages(&_L1CrossDomainMessenger.CallOpts, arg0) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _L1CrossDomainMessenger.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) Version() (string, error) { + return _L1CrossDomainMessenger.Contract.Version(&_L1CrossDomainMessenger.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) Version() (string, error) { + return _L1CrossDomainMessenger.Contract.Version(&_L1CrossDomainMessenger.CallOpts) +} + +// XDomainMessageSender is a free data retrieval call binding the contract method 0x6e296e45. +// +// Solidity: function xDomainMessageSender() view returns(address) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) XDomainMessageSender(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L1CrossDomainMessenger.contract.Call(opts, &out, "xDomainMessageSender") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// XDomainMessageSender is a free data retrieval call binding the contract method 0x6e296e45. +// +// Solidity: function xDomainMessageSender() view returns(address) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) XDomainMessageSender() (common.Address, error) { + return _L1CrossDomainMessenger.Contract.XDomainMessageSender(&_L1CrossDomainMessenger.CallOpts) +} + +// XDomainMessageSender is a free data retrieval call binding the contract method 0x6e296e45. +// +// Solidity: function xDomainMessageSender() view returns(address) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) XDomainMessageSender() (common.Address, error) { + return _L1CrossDomainMessenger.Contract.XDomainMessageSender(&_L1CrossDomainMessenger.CallOpts) +} + +// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c. +// +// Solidity: function initialize() returns() +func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactor) Initialize(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L1CrossDomainMessenger.contract.Transact(opts, "initialize") +} + +// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c. +// +// Solidity: function initialize() returns() +func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) Initialize() (*types.Transaction, error) { + return _L1CrossDomainMessenger.Contract.Initialize(&_L1CrossDomainMessenger.TransactOpts) +} + +// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c. +// +// Solidity: function initialize() returns() +func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactorSession) Initialize() (*types.Transaction, error) { + return _L1CrossDomainMessenger.Contract.Initialize(&_L1CrossDomainMessenger.TransactOpts) +} + +// RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. +// +// Solidity: function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes _message) payable returns() +func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactor) RelayMessage(opts *bind.TransactOpts, _nonce *big.Int, _sender common.Address, _target common.Address, _value *big.Int, _minGasLimit *big.Int, _message []byte) (*types.Transaction, error) { + return _L1CrossDomainMessenger.contract.Transact(opts, "relayMessage", _nonce, _sender, _target, _value, _minGasLimit, _message) +} + +// RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. +// +// Solidity: function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes _message) payable returns() +func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) RelayMessage(_nonce *big.Int, _sender common.Address, _target common.Address, _value *big.Int, _minGasLimit *big.Int, _message []byte) (*types.Transaction, error) { + return _L1CrossDomainMessenger.Contract.RelayMessage(&_L1CrossDomainMessenger.TransactOpts, _nonce, _sender, _target, _value, _minGasLimit, _message) +} + +// RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. +// +// Solidity: function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes _message) payable returns() +func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactorSession) RelayMessage(_nonce *big.Int, _sender common.Address, _target common.Address, _value *big.Int, _minGasLimit *big.Int, _message []byte) (*types.Transaction, error) { + return _L1CrossDomainMessenger.Contract.RelayMessage(&_L1CrossDomainMessenger.TransactOpts, _nonce, _sender, _target, _value, _minGasLimit, _message) +} + +// SendMessage is a paid mutator transaction binding the contract method 0x3dbb202b. +// +// Solidity: function sendMessage(address _target, bytes _message, uint32 _minGasLimit) payable returns() +func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactor) SendMessage(opts *bind.TransactOpts, _target common.Address, _message []byte, _minGasLimit uint32) (*types.Transaction, error) { + return _L1CrossDomainMessenger.contract.Transact(opts, "sendMessage", _target, _message, _minGasLimit) +} + +// SendMessage is a paid mutator transaction binding the contract method 0x3dbb202b. +// +// Solidity: function sendMessage(address _target, bytes _message, uint32 _minGasLimit) payable returns() +func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) SendMessage(_target common.Address, _message []byte, _minGasLimit uint32) (*types.Transaction, error) { + return _L1CrossDomainMessenger.Contract.SendMessage(&_L1CrossDomainMessenger.TransactOpts, _target, _message, _minGasLimit) +} + +// SendMessage is a paid mutator transaction binding the contract method 0x3dbb202b. +// +// Solidity: function sendMessage(address _target, bytes _message, uint32 _minGasLimit) payable returns() +func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactorSession) SendMessage(_target common.Address, _message []byte, _minGasLimit uint32) (*types.Transaction, error) { + return _L1CrossDomainMessenger.Contract.SendMessage(&_L1CrossDomainMessenger.TransactOpts, _target, _message, _minGasLimit) +} + +// L1CrossDomainMessengerFailedRelayedMessageIterator is returned from FilterFailedRelayedMessage and is used to iterate over the raw logs and unpacked data for FailedRelayedMessage events raised by the L1CrossDomainMessenger contract. +type L1CrossDomainMessengerFailedRelayedMessageIterator struct { + Event *L1CrossDomainMessengerFailedRelayedMessage // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L1CrossDomainMessengerFailedRelayedMessageIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L1CrossDomainMessengerFailedRelayedMessage) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L1CrossDomainMessengerFailedRelayedMessage) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L1CrossDomainMessengerFailedRelayedMessageIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L1CrossDomainMessengerFailedRelayedMessageIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L1CrossDomainMessengerFailedRelayedMessage represents a FailedRelayedMessage event raised by the L1CrossDomainMessenger contract. +type L1CrossDomainMessengerFailedRelayedMessage struct { + MsgHash [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterFailedRelayedMessage is a free log retrieval operation binding the contract event 0x99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f. +// +// Solidity: event FailedRelayedMessage(bytes32 indexed msgHash) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) FilterFailedRelayedMessage(opts *bind.FilterOpts, msgHash [][32]byte) (*L1CrossDomainMessengerFailedRelayedMessageIterator, error) { + + var msgHashRule []interface{} + for _, msgHashItem := range msgHash { + msgHashRule = append(msgHashRule, msgHashItem) + } + + logs, sub, err := _L1CrossDomainMessenger.contract.FilterLogs(opts, "FailedRelayedMessage", msgHashRule) + if err != nil { + return nil, err + } + return &L1CrossDomainMessengerFailedRelayedMessageIterator{contract: _L1CrossDomainMessenger.contract, event: "FailedRelayedMessage", logs: logs, sub: sub}, nil +} + +// WatchFailedRelayedMessage is a free log subscription operation binding the contract event 0x99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f. +// +// Solidity: event FailedRelayedMessage(bytes32 indexed msgHash) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) WatchFailedRelayedMessage(opts *bind.WatchOpts, sink chan<- *L1CrossDomainMessengerFailedRelayedMessage, msgHash [][32]byte) (event.Subscription, error) { + + var msgHashRule []interface{} + for _, msgHashItem := range msgHash { + msgHashRule = append(msgHashRule, msgHashItem) + } + + logs, sub, err := _L1CrossDomainMessenger.contract.WatchLogs(opts, "FailedRelayedMessage", msgHashRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L1CrossDomainMessengerFailedRelayedMessage) + if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "FailedRelayedMessage", 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 +} + +// ParseFailedRelayedMessage is a log parse operation binding the contract event 0x99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f. +// +// Solidity: event FailedRelayedMessage(bytes32 indexed msgHash) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) ParseFailedRelayedMessage(log types.Log) (*L1CrossDomainMessengerFailedRelayedMessage, error) { + event := new(L1CrossDomainMessengerFailedRelayedMessage) + if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "FailedRelayedMessage", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// L1CrossDomainMessengerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the L1CrossDomainMessenger contract. +type L1CrossDomainMessengerInitializedIterator struct { + Event *L1CrossDomainMessengerInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L1CrossDomainMessengerInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L1CrossDomainMessengerInitialized) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L1CrossDomainMessengerInitialized) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L1CrossDomainMessengerInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L1CrossDomainMessengerInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L1CrossDomainMessengerInitialized represents a Initialized event raised by the L1CrossDomainMessenger contract. +type L1CrossDomainMessengerInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) FilterInitialized(opts *bind.FilterOpts) (*L1CrossDomainMessengerInitializedIterator, error) { + + logs, sub, err := _L1CrossDomainMessenger.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &L1CrossDomainMessengerInitializedIterator{contract: _L1CrossDomainMessenger.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *L1CrossDomainMessengerInitialized) (event.Subscription, error) { + + logs, sub, err := _L1CrossDomainMessenger.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: + // New log arrived, parse the event and forward to the user + event := new(L1CrossDomainMessengerInitialized) + if err := _L1CrossDomainMessenger.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 +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) ParseInitialized(log types.Log) (*L1CrossDomainMessengerInitialized, error) { + event := new(L1CrossDomainMessengerInitialized) + if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// L1CrossDomainMessengerPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the L1CrossDomainMessenger contract. +type L1CrossDomainMessengerPausedIterator struct { + Event *L1CrossDomainMessengerPaused // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L1CrossDomainMessengerPausedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L1CrossDomainMessengerPaused) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L1CrossDomainMessengerPaused) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L1CrossDomainMessengerPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L1CrossDomainMessengerPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L1CrossDomainMessengerPaused represents a Paused event raised by the L1CrossDomainMessenger contract. +type L1CrossDomainMessengerPaused struct { + Account common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPaused is a free log retrieval operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) FilterPaused(opts *bind.FilterOpts) (*L1CrossDomainMessengerPausedIterator, error) { + + logs, sub, err := _L1CrossDomainMessenger.contract.FilterLogs(opts, "Paused") + if err != nil { + return nil, err + } + return &L1CrossDomainMessengerPausedIterator{contract: _L1CrossDomainMessenger.contract, event: "Paused", logs: logs, sub: sub}, nil +} + +// WatchPaused is a free log subscription operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *L1CrossDomainMessengerPaused) (event.Subscription, error) { + + logs, sub, err := _L1CrossDomainMessenger.contract.WatchLogs(opts, "Paused") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L1CrossDomainMessengerPaused) + if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "Paused", 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 +} + +// ParsePaused is a log parse operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) ParsePaused(log types.Log) (*L1CrossDomainMessengerPaused, error) { + event := new(L1CrossDomainMessengerPaused) + if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// L1CrossDomainMessengerRelayedMessageIterator is returned from FilterRelayedMessage and is used to iterate over the raw logs and unpacked data for RelayedMessage events raised by the L1CrossDomainMessenger contract. +type L1CrossDomainMessengerRelayedMessageIterator struct { + Event *L1CrossDomainMessengerRelayedMessage // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L1CrossDomainMessengerRelayedMessageIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L1CrossDomainMessengerRelayedMessage) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L1CrossDomainMessengerRelayedMessage) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L1CrossDomainMessengerRelayedMessageIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L1CrossDomainMessengerRelayedMessageIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L1CrossDomainMessengerRelayedMessage represents a RelayedMessage event raised by the L1CrossDomainMessenger contract. +type L1CrossDomainMessengerRelayedMessage struct { + MsgHash [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRelayedMessage is a free log retrieval operation binding the contract event 0x4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c. +// +// Solidity: event RelayedMessage(bytes32 indexed msgHash) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) FilterRelayedMessage(opts *bind.FilterOpts, msgHash [][32]byte) (*L1CrossDomainMessengerRelayedMessageIterator, error) { + + var msgHashRule []interface{} + for _, msgHashItem := range msgHash { + msgHashRule = append(msgHashRule, msgHashItem) + } + + logs, sub, err := _L1CrossDomainMessenger.contract.FilterLogs(opts, "RelayedMessage", msgHashRule) + if err != nil { + return nil, err + } + return &L1CrossDomainMessengerRelayedMessageIterator{contract: _L1CrossDomainMessenger.contract, event: "RelayedMessage", logs: logs, sub: sub}, nil +} + +// WatchRelayedMessage is a free log subscription operation binding the contract event 0x4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c. +// +// Solidity: event RelayedMessage(bytes32 indexed msgHash) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) WatchRelayedMessage(opts *bind.WatchOpts, sink chan<- *L1CrossDomainMessengerRelayedMessage, msgHash [][32]byte) (event.Subscription, error) { + + var msgHashRule []interface{} + for _, msgHashItem := range msgHash { + msgHashRule = append(msgHashRule, msgHashItem) + } + + logs, sub, err := _L1CrossDomainMessenger.contract.WatchLogs(opts, "RelayedMessage", msgHashRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L1CrossDomainMessengerRelayedMessage) + if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "RelayedMessage", 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 +} + +// ParseRelayedMessage is a log parse operation binding the contract event 0x4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c. +// +// Solidity: event RelayedMessage(bytes32 indexed msgHash) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) ParseRelayedMessage(log types.Log) (*L1CrossDomainMessengerRelayedMessage, error) { + event := new(L1CrossDomainMessengerRelayedMessage) + if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "RelayedMessage", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// L1CrossDomainMessengerSentMessageIterator is returned from FilterSentMessage and is used to iterate over the raw logs and unpacked data for SentMessage events raised by the L1CrossDomainMessenger contract. +type L1CrossDomainMessengerSentMessageIterator struct { + Event *L1CrossDomainMessengerSentMessage // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L1CrossDomainMessengerSentMessageIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L1CrossDomainMessengerSentMessage) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L1CrossDomainMessengerSentMessage) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L1CrossDomainMessengerSentMessageIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L1CrossDomainMessengerSentMessageIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L1CrossDomainMessengerSentMessage represents a SentMessage event raised by the L1CrossDomainMessenger contract. +type L1CrossDomainMessengerSentMessage struct { + Target common.Address + Sender common.Address + Value *big.Int + Message []byte + MessageNonce *big.Int + GasLimit *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSentMessage is a free log retrieval operation binding the contract event 0xdd28cef75ff18fb538e43317144469f339702f973eace2bc808f2acc37db310e. +// +// Solidity: event SentMessage(address indexed target, address indexed sender, uint256 value, bytes message, uint256 messageNonce, uint256 gasLimit) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) FilterSentMessage(opts *bind.FilterOpts, target []common.Address, sender []common.Address) (*L1CrossDomainMessengerSentMessageIterator, error) { + + var targetRule []interface{} + for _, targetItem := range target { + targetRule = append(targetRule, targetItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _L1CrossDomainMessenger.contract.FilterLogs(opts, "SentMessage", targetRule, senderRule) + if err != nil { + return nil, err + } + return &L1CrossDomainMessengerSentMessageIterator{contract: _L1CrossDomainMessenger.contract, event: "SentMessage", logs: logs, sub: sub}, nil +} + +// WatchSentMessage is a free log subscription operation binding the contract event 0xdd28cef75ff18fb538e43317144469f339702f973eace2bc808f2acc37db310e. +// +// Solidity: event SentMessage(address indexed target, address indexed sender, uint256 value, bytes message, uint256 messageNonce, uint256 gasLimit) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) WatchSentMessage(opts *bind.WatchOpts, sink chan<- *L1CrossDomainMessengerSentMessage, target []common.Address, sender []common.Address) (event.Subscription, error) { + + var targetRule []interface{} + for _, targetItem := range target { + targetRule = append(targetRule, targetItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _L1CrossDomainMessenger.contract.WatchLogs(opts, "SentMessage", targetRule, senderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L1CrossDomainMessengerSentMessage) + if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "SentMessage", 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 +} + +// ParseSentMessage is a log parse operation binding the contract event 0xdd28cef75ff18fb538e43317144469f339702f973eace2bc808f2acc37db310e. +// +// Solidity: event SentMessage(address indexed target, address indexed sender, uint256 value, bytes message, uint256 messageNonce, uint256 gasLimit) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) ParseSentMessage(log types.Log) (*L1CrossDomainMessengerSentMessage, error) { + event := new(L1CrossDomainMessengerSentMessage) + if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "SentMessage", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// L1CrossDomainMessengerUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the L1CrossDomainMessenger contract. +type L1CrossDomainMessengerUnpausedIterator struct { + Event *L1CrossDomainMessengerUnpaused // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L1CrossDomainMessengerUnpausedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L1CrossDomainMessengerUnpaused) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L1CrossDomainMessengerUnpaused) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L1CrossDomainMessengerUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L1CrossDomainMessengerUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L1CrossDomainMessengerUnpaused represents a Unpaused event raised by the L1CrossDomainMessenger contract. +type L1CrossDomainMessengerUnpaused struct { + Account common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUnpaused is a free log retrieval operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) FilterUnpaused(opts *bind.FilterOpts) (*L1CrossDomainMessengerUnpausedIterator, error) { + + logs, sub, err := _L1CrossDomainMessenger.contract.FilterLogs(opts, "Unpaused") + if err != nil { + return nil, err + } + return &L1CrossDomainMessengerUnpausedIterator{contract: _L1CrossDomainMessenger.contract, event: "Unpaused", logs: logs, sub: sub}, nil +} + +// WatchUnpaused is a free log subscription operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *L1CrossDomainMessengerUnpaused) (event.Subscription, error) { + + logs, sub, err := _L1CrossDomainMessenger.contract.WatchLogs(opts, "Unpaused") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L1CrossDomainMessengerUnpaused) + if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "Unpaused", 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 +} + +// ParseUnpaused is a log parse operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) ParseUnpaused(log types.Log) (*L1CrossDomainMessengerUnpaused, error) { + event := new(L1CrossDomainMessengerUnpaused) + if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/kroma-bindings/bindings/l1crossdomainmessenger_more.go b/kroma-bindings/bindings/l1crossdomainmessenger_more.go new file mode 100644 index 000000000..caa02d873 --- /dev/null +++ b/kroma-bindings/bindings/l1crossdomainmessenger_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const L1CrossDomainMessengerStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)50_storage\"},{\"astId\":1003,\"contract\":\"contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"_paused\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_bool\"},{\"astId\":1004,\"contract\":\"contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_array(t_uint256)49_storage\"},{\"astId\":1005,\"contract\":\"contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"successfulMessages\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1006,\"contract\":\"contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"xDomainMsgSender\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_address\"},{\"astId\":1007,\"contract\":\"contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"msgNonce\",\"offset\":0,\"slot\":\"103\",\"type\":\"t_uint240\"},{\"astId\":1008,\"contract\":\"contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"failedMessages\",\"offset\":0,\"slot\":\"104\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1009,\"contract\":\"contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"105\",\"type\":\"t_array(t_uint256)45_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)45_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[45]\",\"numberOfBytes\":\"1440\",\"base\":\"t_uint256\"},\"t_array(t_uint256)49_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\",\"base\":\"t_uint256\"},\"t_array(t_uint256)50_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\",\"base\":\"t_uint256\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_bytes32,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_bool\"},\"t_uint240\":{\"encoding\":\"inplace\",\"label\":\"uint240\",\"numberOfBytes\":\"30\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" + +var L1CrossDomainMessengerStorageLayout = new(solc.StorageLayout) + +var L1CrossDomainMessengerDeployedBin = "0x60806040526004361061015f5760003560e01c80636e296e45116100c0578063a4e7f8bd11610074578063b28ade2511610059578063b28ade251461039e578063d764ad0b146103be578063ecc70428146103d157600080fd5b8063a4e7f8bd1461033e578063b1b1b2091461036e57600080fd5b806383a74074116100a557806383a74074146102f35780638cbeeef2146102575780639fce812c1461030a57600080fd5b80636e296e45146102c95780638129fc1c146102de57600080fd5b80633f827a5a1161011757806354fd4d50116100fc57806354fd4d501461026d5780635644cfdf1461028f5780635c975abb146102a557600080fd5b80633f827a5a1461022f5780634c1d6a691461025757600080fd5b80630ff754ea116101485780630ff754ea146101ac5780632828d7e8146102055780633dbb202b1461021a57600080fd5b8063028f85f7146101645780630c56849814610197575b600080fd5b34801561017057600080fd5b50610179601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101a357600080fd5b50610179603f81565b3480156101b857600080fd5b506101e07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161018e565b34801561021157600080fd5b50610179604081565b61022d610228366004611772565b61040f565b005b34801561023b57600080fd5b50610244600081565b60405161ffff909116815260200161018e565b34801561026357600080fd5b50610179619c4081565b34801561027957600080fd5b506102826105fd565b60405161018e9190611853565b34801561029b57600080fd5b5061017961138881565b3480156102b157600080fd5b5060335460ff165b604051901515815260200161018e565b3480156102d557600080fd5b506101e06106a0565b3480156102ea57600080fd5b5061022d61078c565b3480156102ff57600080fd5b5061017962030d4081565b34801561031657600080fd5b506101e07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034a57600080fd5b506102b961035936600461186d565b60686020526000908152604090205460ff1681565b34801561037a57600080fd5b506102b961038936600461186d565b60656020526000908152604090205460ff1681565b3480156103aa57600080fd5b506101796103b9366004611886565b61091e565b61022d6103cc3660046118da565b61098c565b3480156103dd57600080fd5b506067547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660405190815260200161018e565b6105277f000000000000000000000000000000000000000000000000000000000000000061043e85858561091e565b347fd764ad0b000000000000000000000000000000000000000000000000000000006104896067547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b338a34898c8c6040516024016104a597969594939291906119a9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261113f565b3373ffffffffffffffffffffffffffffffffffffffff85167fdd28cef75ff18fb538e43317144469f339702f973eace2bc808f2acc37db310e34868661058c6067547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b8760405161059e959493929190611a08565b60405180910390a35050606780547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60606106287f00000000000000000000000000000000000000000000000000000000000000006111f4565b6106517f00000000000000000000000000000000000000000000000000000000000000006111f4565b61067a7f00000000000000000000000000000000000000000000000000000000000000006111f4565b60405160200161068c93929190611a40565b604051602081830303815290604052905090565b60665460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21530161076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084015b60405180910390fd5b5060665473ffffffffffffffffffffffffffffffffffffffff1690565b600054610100900460ff16158080156107ac5750600054600160ff909116105b806107c65750303b1580156107c6575060005460ff166001145b610852576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610766565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156108b057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6108b86112b2565b801561091b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6000611388619c4080603f61093a604063ffffffff8816611ae5565b6109449190611b15565b61094f601088611ae5565b61095c9062030d40611b63565b6109669190611b63565b6109709190611b63565b61097a9190611b63565b6109849190611b63565b949350505050565b60f087901c60018110610a47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206d6573736167657320697320737570706f7274656420617420746860648201527f69732074696d6500000000000000000000000000000000000000000000000000608482015260a401610766565b6000610a8d898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061137792505050565b9050610a9761139a565b15610acf57853414610aab57610aab611b8f565b60008181526068602052604090205460ff1615610aca57610aca611b8f565b610c21565b3415610b83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610766565b60008181526068602052604090205460ff16610c21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610766565b610c2a876114be565b15610cdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610766565b60008181526065602052604090205460ff1615610d7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610766565b610d9d85610d8e611388619c40611b63565b67ffffffffffffffff16611535565b1580610dc3575060665473ffffffffffffffffffffffffffffffffffffffff1661dead14155b15610edc5760008181526068602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201610ed5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610766565b5050611115565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a161790556000610f6d88619c405a610f309190611bbe565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061155392505050565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156110045760008281526065602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2611111565b60008281526068602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610766565b5050505b50505050505050565b905090565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e9e05c429084906111bc908890839089906000908990600401611bd5565b6000604051808303818588803b1580156111d557600080fd5b505af11580156111e9573d6000803e3d6000fd5b505050505050505050565b606060006112018361156d565b600101905060008167ffffffffffffffff81111561122157611221611c2d565b6040519080825280601f01601f19166020018201604052801561124b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461125557509392505050565b600054610100900460ff16611349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610766565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055565b600061138787878787878761164f565b8051906020012090509695505050505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561111e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639bf62d826040518163ffffffff1660e01b8152600401602060405180830381865afa15801561147e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a29190611c5c565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff821630148061152f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115b6577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115e2576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061160057662386f26fc10000830492506010015b6305f5e1008310611618576305f5e100830492506008015b612710831061162c57612710830492506004015b6064831061163e576064830492506002015b600a831061152f5760010192915050565b606086868686868660405160240161166c96959493929190611c79565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461091b57600080fd5b60008083601f84011261172257600080fd5b50813567ffffffffffffffff81111561173a57600080fd5b60208301915083602082850101111561175257600080fd5b9250929050565b803563ffffffff8116811461176d57600080fd5b919050565b6000806000806060858703121561178857600080fd5b8435611793816116ee565b9350602085013567ffffffffffffffff8111156117af57600080fd5b6117bb87828801611710565b90945092506117ce905060408601611759565b905092959194509250565b60005b838110156117f45781810151838201526020016117dc565b83811115611803576000848401525b50505050565b600081518084526118218160208601602086016117d9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006118666020830184611809565b9392505050565b60006020828403121561187f57600080fd5b5035919050565b60008060006040848603121561189b57600080fd5b833567ffffffffffffffff8111156118b257600080fd5b6118be86828701611710565b90945092506118d1905060208501611759565b90509250925092565b600080600080600080600060c0888a0312156118f557600080fd5b873596506020880135611907816116ee565b95506040880135611917816116ee565b9450606088013593506080880135925060a088013567ffffffffffffffff81111561194157600080fd5b61194d8a828b01611710565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a08301526119fb60c083018486611960565b9998505050505050505050565b858152608060208201526000611a22608083018688611960565b905083604083015263ffffffff831660608301529695505050505050565b60008451611a528184602089016117d9565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611a8e816001850160208a016117d9565b60019201918201528351611aa98160028401602088016117d9565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611b0c57611b0c611ab6565b02949350505050565b600067ffffffffffffffff80841680611b57577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611b8657611b86611ab6565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611bd057611bd0611ab6565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a060808201526000611c2260a0830184611809565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215611c6e57600080fd5b8151611866816116ee565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611cc460c0830184611809565b9897505050505050505056fea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(L1CrossDomainMessengerStorageLayoutJSON), L1CrossDomainMessengerStorageLayout); err != nil { + panic(err) + } + + layouts["L1CrossDomainMessenger"] = L1CrossDomainMessengerStorageLayout + deployedBytecodes["L1CrossDomainMessenger"] = L1CrossDomainMessengerDeployedBin +} diff --git a/kroma-bindings/bindings/l1erc721bridge.go b/kroma-bindings/bindings/l1erc721bridge.go new file mode 100644 index 000000000..b4499f9a9 --- /dev/null +++ b/kroma-bindings/bindings/l1erc721bridge.go @@ -0,0 +1,720 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// L1ERC721BridgeMetaData contains all meta data concerning the L1ERC721Bridge contract. +var L1ERC721BridgeMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_messenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_otherBridge\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC721BridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC721BridgeInitiated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSENGER\",\"outputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_BRIDGE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC721\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC721To\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"deposits\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeERC721\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x61012060405234801561001157600080fd5b5060405162001413380380620014138339810160408190526100329161015a565b600160008084846001600160a01b0382166100a95760405162461bcd60e51b815260206004820152602c60248201527f4552433732314272696467653a206d657373656e6765722063616e6e6f74206260448201526b65206164647265737328302960a01b60648201526084015b60405180910390fd5b6001600160a01b0381166101175760405162461bcd60e51b815260206004820152602f60248201527f4552433732314272696467653a206f74686572206272696467652063616e6e6f60448201526e74206265206164647265737328302960881b60648201526084016100a0565b6001600160a01b039182166080521660a05260c09290925260e052610100525061018d9050565b80516001600160a01b038116811461015557600080fd5b919050565b6000806040838503121561016d57600080fd5b6101768361013e565b91506101846020840161013e565b90509250929050565b60805160a05160c05160e0516101005161121e620001f560003960006102970152600061026e01526000610245015260008181610111015281816103230152610aaa01526000818161015d015281816102f90152818161035a0152610a7b015261121e6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063761f44931161005b578063761f4493146100f95780637f46ddb21461010c578063927ede2d14610158578063aa5574521461017f57600080fd5b80633687011a1461008257806354fd4d50146100975780635d93a3fc146100b5575b600080fd5b610095610090366004610dbd565b610192565b005b61009f61023e565b6040516100ac9190610eba565b60405180910390f35b6100e96100c3366004610ed4565b603160209081526000938452604080852082529284528284209052825290205460ff1681565b60405190151581526020016100ac565b610095610107366004610f15565b6102e1565b6101337f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ac565b6101337f000000000000000000000000000000000000000000000000000000000000000081565b61009561018d366004610fad565b610762565b333b15610226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b610236868633338888888861081e565b505050505050565b60606102697f0000000000000000000000000000000000000000000000000000000000000000610b95565b6102927f0000000000000000000000000000000000000000000000000000000000000000610b95565b6102bb7f0000000000000000000000000000000000000000000000000000000000000000610b95565b6040516020016102cd93929190611024565b604051602081830303815290604052905090565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156103ff57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e7919061109a565b73ffffffffffffffffffffffffffffffffffffffff16145b61048b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f746865722062726964676500606482015260840161021d565b3073ffffffffffffffffffffffffffffffffffffffff881603610530576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c314552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c6600000000000000000000000000000000000000000000606482015260840161021d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152603160209081526040808320938a1683529281528282208683529052205460ff1615156001146105ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4c314552433732314272696467653a20546f6b656e204944206973206e6f742060448201527f657363726f77656420696e20746865204c312042726964676500000000000000606482015260840161021d565b73ffffffffffffffffffffffffffffffffffffffff87811660008181526031602090815260408083208b8616845282528083208884529091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152918616602483015260448201859052906342842e0e90606401600060405180830381600087803b1580156106bf57600080fd5b505af11580156106d3573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac878787876040516107519493929190611100565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516610805576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f74206265206164647265737328302900000000000000000000000000000000606482015260840161021d565b610815878733888888888861081e565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff87166108c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c314552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f742062652061646472657373283029000000000000000000000000000000606482015260840161021d565b600063761f449360e01b888a89898988886040516024016108e89796959493929190611140565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000959095169490941790935273ffffffffffffffffffffffffffffffffffffffff8c81166000818152603186528381208e8416825286528381208b82529095529382902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590517f23b872dd000000000000000000000000000000000000000000000000000000008152908a166004820152306024820152604481018890529092506323b872dd90606401600060405180830381600087803b158015610a2857600080fd5b505af1158015610a3c573d6000803e3d6000fd5b50506040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250633dbb202b9150610ad6907f0000000000000000000000000000000000000000000000000000000000000000908590899060040161119d565b600060405180830381600087803b158015610af057600080fd5b505af1158015610b04573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a589898888604051610b829493929190611100565b60405180910390a4505050505050505050565b60606000610ba283610c53565b600101905060008167ffffffffffffffff811115610bc257610bc26111e2565b6040519080825280601f01601f191660200182016040528015610bec576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084610bf657509392505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610c9c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610cc8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ce657662386f26fc10000830492506010015b6305f5e1008310610cfe576305f5e100830492506008015b6127108310610d1257612710830492506004015b60648310610d24576064830492506002015b600a8310610d30576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff81168114610d5857600080fd5b50565b803563ffffffff81168114610d6f57600080fd5b919050565b60008083601f840112610d8657600080fd5b50813567ffffffffffffffff811115610d9e57600080fd5b602083019150836020828501011115610db657600080fd5b9250929050565b60008060008060008060a08789031215610dd657600080fd5b8635610de181610d36565b95506020870135610df181610d36565b945060408701359350610e0660608801610d5b565b9250608087013567ffffffffffffffff811115610e2257600080fd5b610e2e89828a01610d74565b979a9699509497509295939492505050565b60005b83811015610e5b578181015183820152602001610e43565b83811115610e6a576000848401525b50505050565b60008151808452610e88816020860160208601610e40565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610ecd6020830184610e70565b9392505050565b600080600060608486031215610ee957600080fd5b8335610ef481610d36565b92506020840135610f0481610d36565b929592945050506040919091013590565b600080600080600080600060c0888a031215610f3057600080fd5b8735610f3b81610d36565b96506020880135610f4b81610d36565b95506040880135610f5b81610d36565b94506060880135610f6b81610d36565b93506080880135925060a088013567ffffffffffffffff811115610f8e57600080fd5b610f9a8a828b01610d74565b989b979a50959850939692959293505050565b600080600080600080600060c0888a031215610fc857600080fd5b8735610fd381610d36565b96506020880135610fe381610d36565b95506040880135610ff381610d36565b94506060880135935061100860808901610d5b565b925060a088013567ffffffffffffffff811115610f8e57600080fd5b60008451611036818460208901610e40565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611072816001850160208a01610e40565b6001920191820152835161108d816002840160208801610e40565b0160020195945050505050565b6000602082840312156110ac57600080fd5b8151610ecd81610d36565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff851681528360208201526060604082015260006111366060830184866110b7565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a083015261119060c0830184866110b7565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006111cc6060830185610e70565b905063ffffffff83166040830152949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a", +} + +// L1ERC721BridgeABI is the input ABI used to generate the binding from. +// Deprecated: Use L1ERC721BridgeMetaData.ABI instead. +var L1ERC721BridgeABI = L1ERC721BridgeMetaData.ABI + +// L1ERC721BridgeBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use L1ERC721BridgeMetaData.Bin instead. +var L1ERC721BridgeBin = L1ERC721BridgeMetaData.Bin + +// DeployL1ERC721Bridge deploys a new Ethereum contract, binding an instance of L1ERC721Bridge to it. +func DeployL1ERC721Bridge(auth *bind.TransactOpts, backend bind.ContractBackend, _messenger common.Address, _otherBridge common.Address) (common.Address, *types.Transaction, *L1ERC721Bridge, error) { + parsed, err := L1ERC721BridgeMetaData.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(L1ERC721BridgeBin), backend, _messenger, _otherBridge) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &L1ERC721Bridge{L1ERC721BridgeCaller: L1ERC721BridgeCaller{contract: contract}, L1ERC721BridgeTransactor: L1ERC721BridgeTransactor{contract: contract}, L1ERC721BridgeFilterer: L1ERC721BridgeFilterer{contract: contract}}, nil +} + +// L1ERC721Bridge is an auto generated Go binding around an Ethereum contract. +type L1ERC721Bridge struct { + L1ERC721BridgeCaller // Read-only binding to the contract + L1ERC721BridgeTransactor // Write-only binding to the contract + L1ERC721BridgeFilterer // Log filterer for contract events +} + +// L1ERC721BridgeCaller is an auto generated read-only Go binding around an Ethereum contract. +type L1ERC721BridgeCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L1ERC721BridgeTransactor is an auto generated write-only Go binding around an Ethereum contract. +type L1ERC721BridgeTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L1ERC721BridgeFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type L1ERC721BridgeFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L1ERC721BridgeSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type L1ERC721BridgeSession struct { + Contract *L1ERC721Bridge // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// L1ERC721BridgeCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type L1ERC721BridgeCallerSession struct { + Contract *L1ERC721BridgeCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// L1ERC721BridgeTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type L1ERC721BridgeTransactorSession struct { + Contract *L1ERC721BridgeTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// L1ERC721BridgeRaw is an auto generated low-level Go binding around an Ethereum contract. +type L1ERC721BridgeRaw struct { + Contract *L1ERC721Bridge // Generic contract binding to access the raw methods on +} + +// L1ERC721BridgeCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type L1ERC721BridgeCallerRaw struct { + Contract *L1ERC721BridgeCaller // Generic read-only contract binding to access the raw methods on +} + +// L1ERC721BridgeTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type L1ERC721BridgeTransactorRaw struct { + Contract *L1ERC721BridgeTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewL1ERC721Bridge creates a new instance of L1ERC721Bridge, bound to a specific deployed contract. +func NewL1ERC721Bridge(address common.Address, backend bind.ContractBackend) (*L1ERC721Bridge, error) { + contract, err := bindL1ERC721Bridge(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &L1ERC721Bridge{L1ERC721BridgeCaller: L1ERC721BridgeCaller{contract: contract}, L1ERC721BridgeTransactor: L1ERC721BridgeTransactor{contract: contract}, L1ERC721BridgeFilterer: L1ERC721BridgeFilterer{contract: contract}}, nil +} + +// NewL1ERC721BridgeCaller creates a new read-only instance of L1ERC721Bridge, bound to a specific deployed contract. +func NewL1ERC721BridgeCaller(address common.Address, caller bind.ContractCaller) (*L1ERC721BridgeCaller, error) { + contract, err := bindL1ERC721Bridge(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &L1ERC721BridgeCaller{contract: contract}, nil +} + +// NewL1ERC721BridgeTransactor creates a new write-only instance of L1ERC721Bridge, bound to a specific deployed contract. +func NewL1ERC721BridgeTransactor(address common.Address, transactor bind.ContractTransactor) (*L1ERC721BridgeTransactor, error) { + contract, err := bindL1ERC721Bridge(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &L1ERC721BridgeTransactor{contract: contract}, nil +} + +// NewL1ERC721BridgeFilterer creates a new log filterer instance of L1ERC721Bridge, bound to a specific deployed contract. +func NewL1ERC721BridgeFilterer(address common.Address, filterer bind.ContractFilterer) (*L1ERC721BridgeFilterer, error) { + contract, err := bindL1ERC721Bridge(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &L1ERC721BridgeFilterer{contract: contract}, nil +} + +// bindL1ERC721Bridge binds a generic wrapper to an already deployed contract. +func bindL1ERC721Bridge(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := L1ERC721BridgeMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_L1ERC721Bridge *L1ERC721BridgeRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _L1ERC721Bridge.Contract.L1ERC721BridgeCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_L1ERC721Bridge *L1ERC721BridgeRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L1ERC721Bridge.Contract.L1ERC721BridgeTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_L1ERC721Bridge *L1ERC721BridgeRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _L1ERC721Bridge.Contract.L1ERC721BridgeTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_L1ERC721Bridge *L1ERC721BridgeCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _L1ERC721Bridge.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_L1ERC721Bridge *L1ERC721BridgeTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L1ERC721Bridge.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_L1ERC721Bridge *L1ERC721BridgeTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _L1ERC721Bridge.Contract.contract.Transact(opts, method, params...) +} + +// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. +// +// Solidity: function MESSENGER() view returns(address) +func (_L1ERC721Bridge *L1ERC721BridgeCaller) MESSENGER(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L1ERC721Bridge.contract.Call(opts, &out, "MESSENGER") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. +// +// Solidity: function MESSENGER() view returns(address) +func (_L1ERC721Bridge *L1ERC721BridgeSession) MESSENGER() (common.Address, error) { + return _L1ERC721Bridge.Contract.MESSENGER(&_L1ERC721Bridge.CallOpts) +} + +// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. +// +// Solidity: function MESSENGER() view returns(address) +func (_L1ERC721Bridge *L1ERC721BridgeCallerSession) MESSENGER() (common.Address, error) { + return _L1ERC721Bridge.Contract.MESSENGER(&_L1ERC721Bridge.CallOpts) +} + +// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. +// +// Solidity: function OTHER_BRIDGE() view returns(address) +func (_L1ERC721Bridge *L1ERC721BridgeCaller) OTHERBRIDGE(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L1ERC721Bridge.contract.Call(opts, &out, "OTHER_BRIDGE") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. +// +// Solidity: function OTHER_BRIDGE() view returns(address) +func (_L1ERC721Bridge *L1ERC721BridgeSession) OTHERBRIDGE() (common.Address, error) { + return _L1ERC721Bridge.Contract.OTHERBRIDGE(&_L1ERC721Bridge.CallOpts) +} + +// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. +// +// Solidity: function OTHER_BRIDGE() view returns(address) +func (_L1ERC721Bridge *L1ERC721BridgeCallerSession) OTHERBRIDGE() (common.Address, error) { + return _L1ERC721Bridge.Contract.OTHERBRIDGE(&_L1ERC721Bridge.CallOpts) +} + +// Deposits is a free data retrieval call binding the contract method 0x5d93a3fc. +// +// Solidity: function deposits(address , address , uint256 ) view returns(bool) +func (_L1ERC721Bridge *L1ERC721BridgeCaller) Deposits(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address, arg2 *big.Int) (bool, error) { + var out []interface{} + err := _L1ERC721Bridge.contract.Call(opts, &out, "deposits", arg0, arg1, arg2) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// Deposits is a free data retrieval call binding the contract method 0x5d93a3fc. +// +// Solidity: function deposits(address , address , uint256 ) view returns(bool) +func (_L1ERC721Bridge *L1ERC721BridgeSession) Deposits(arg0 common.Address, arg1 common.Address, arg2 *big.Int) (bool, error) { + return _L1ERC721Bridge.Contract.Deposits(&_L1ERC721Bridge.CallOpts, arg0, arg1, arg2) +} + +// Deposits is a free data retrieval call binding the contract method 0x5d93a3fc. +// +// Solidity: function deposits(address , address , uint256 ) view returns(bool) +func (_L1ERC721Bridge *L1ERC721BridgeCallerSession) Deposits(arg0 common.Address, arg1 common.Address, arg2 *big.Int) (bool, error) { + return _L1ERC721Bridge.Contract.Deposits(&_L1ERC721Bridge.CallOpts, arg0, arg1, arg2) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L1ERC721Bridge *L1ERC721BridgeCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _L1ERC721Bridge.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L1ERC721Bridge *L1ERC721BridgeSession) Version() (string, error) { + return _L1ERC721Bridge.Contract.Version(&_L1ERC721Bridge.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L1ERC721Bridge *L1ERC721BridgeCallerSession) Version() (string, error) { + return _L1ERC721Bridge.Contract.Version(&_L1ERC721Bridge.CallOpts) +} + +// BridgeERC721 is a paid mutator transaction binding the contract method 0x3687011a. +// +// Solidity: function bridgeERC721(address _localToken, address _remoteToken, uint256 _tokenId, uint32 _minGasLimit, bytes _extraData) returns() +func (_L1ERC721Bridge *L1ERC721BridgeTransactor) BridgeERC721(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _tokenId *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1ERC721Bridge.contract.Transact(opts, "bridgeERC721", _localToken, _remoteToken, _tokenId, _minGasLimit, _extraData) +} + +// BridgeERC721 is a paid mutator transaction binding the contract method 0x3687011a. +// +// Solidity: function bridgeERC721(address _localToken, address _remoteToken, uint256 _tokenId, uint32 _minGasLimit, bytes _extraData) returns() +func (_L1ERC721Bridge *L1ERC721BridgeSession) BridgeERC721(_localToken common.Address, _remoteToken common.Address, _tokenId *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1ERC721Bridge.Contract.BridgeERC721(&_L1ERC721Bridge.TransactOpts, _localToken, _remoteToken, _tokenId, _minGasLimit, _extraData) +} + +// BridgeERC721 is a paid mutator transaction binding the contract method 0x3687011a. +// +// Solidity: function bridgeERC721(address _localToken, address _remoteToken, uint256 _tokenId, uint32 _minGasLimit, bytes _extraData) returns() +func (_L1ERC721Bridge *L1ERC721BridgeTransactorSession) BridgeERC721(_localToken common.Address, _remoteToken common.Address, _tokenId *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1ERC721Bridge.Contract.BridgeERC721(&_L1ERC721Bridge.TransactOpts, _localToken, _remoteToken, _tokenId, _minGasLimit, _extraData) +} + +// BridgeERC721To is a paid mutator transaction binding the contract method 0xaa557452. +// +// Solidity: function bridgeERC721To(address _localToken, address _remoteToken, address _to, uint256 _tokenId, uint32 _minGasLimit, bytes _extraData) returns() +func (_L1ERC721Bridge *L1ERC721BridgeTransactor) BridgeERC721To(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _to common.Address, _tokenId *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1ERC721Bridge.contract.Transact(opts, "bridgeERC721To", _localToken, _remoteToken, _to, _tokenId, _minGasLimit, _extraData) +} + +// BridgeERC721To is a paid mutator transaction binding the contract method 0xaa557452. +// +// Solidity: function bridgeERC721To(address _localToken, address _remoteToken, address _to, uint256 _tokenId, uint32 _minGasLimit, bytes _extraData) returns() +func (_L1ERC721Bridge *L1ERC721BridgeSession) BridgeERC721To(_localToken common.Address, _remoteToken common.Address, _to common.Address, _tokenId *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1ERC721Bridge.Contract.BridgeERC721To(&_L1ERC721Bridge.TransactOpts, _localToken, _remoteToken, _to, _tokenId, _minGasLimit, _extraData) +} + +// BridgeERC721To is a paid mutator transaction binding the contract method 0xaa557452. +// +// Solidity: function bridgeERC721To(address _localToken, address _remoteToken, address _to, uint256 _tokenId, uint32 _minGasLimit, bytes _extraData) returns() +func (_L1ERC721Bridge *L1ERC721BridgeTransactorSession) BridgeERC721To(_localToken common.Address, _remoteToken common.Address, _to common.Address, _tokenId *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1ERC721Bridge.Contract.BridgeERC721To(&_L1ERC721Bridge.TransactOpts, _localToken, _remoteToken, _to, _tokenId, _minGasLimit, _extraData) +} + +// FinalizeBridgeERC721 is a paid mutator transaction binding the contract method 0x761f4493. +// +// Solidity: function finalizeBridgeERC721(address _localToken, address _remoteToken, address _from, address _to, uint256 _tokenId, bytes _extraData) returns() +func (_L1ERC721Bridge *L1ERC721BridgeTransactor) FinalizeBridgeERC721(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _tokenId *big.Int, _extraData []byte) (*types.Transaction, error) { + return _L1ERC721Bridge.contract.Transact(opts, "finalizeBridgeERC721", _localToken, _remoteToken, _from, _to, _tokenId, _extraData) +} + +// FinalizeBridgeERC721 is a paid mutator transaction binding the contract method 0x761f4493. +// +// Solidity: function finalizeBridgeERC721(address _localToken, address _remoteToken, address _from, address _to, uint256 _tokenId, bytes _extraData) returns() +func (_L1ERC721Bridge *L1ERC721BridgeSession) FinalizeBridgeERC721(_localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _tokenId *big.Int, _extraData []byte) (*types.Transaction, error) { + return _L1ERC721Bridge.Contract.FinalizeBridgeERC721(&_L1ERC721Bridge.TransactOpts, _localToken, _remoteToken, _from, _to, _tokenId, _extraData) +} + +// FinalizeBridgeERC721 is a paid mutator transaction binding the contract method 0x761f4493. +// +// Solidity: function finalizeBridgeERC721(address _localToken, address _remoteToken, address _from, address _to, uint256 _tokenId, bytes _extraData) returns() +func (_L1ERC721Bridge *L1ERC721BridgeTransactorSession) FinalizeBridgeERC721(_localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _tokenId *big.Int, _extraData []byte) (*types.Transaction, error) { + return _L1ERC721Bridge.Contract.FinalizeBridgeERC721(&_L1ERC721Bridge.TransactOpts, _localToken, _remoteToken, _from, _to, _tokenId, _extraData) +} + +// L1ERC721BridgeERC721BridgeFinalizedIterator is returned from FilterERC721BridgeFinalized and is used to iterate over the raw logs and unpacked data for ERC721BridgeFinalized events raised by the L1ERC721Bridge contract. +type L1ERC721BridgeERC721BridgeFinalizedIterator struct { + Event *L1ERC721BridgeERC721BridgeFinalized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L1ERC721BridgeERC721BridgeFinalizedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L1ERC721BridgeERC721BridgeFinalized) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L1ERC721BridgeERC721BridgeFinalized) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L1ERC721BridgeERC721BridgeFinalizedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L1ERC721BridgeERC721BridgeFinalizedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L1ERC721BridgeERC721BridgeFinalized represents a ERC721BridgeFinalized event raised by the L1ERC721Bridge contract. +type L1ERC721BridgeERC721BridgeFinalized struct { + LocalToken common.Address + RemoteToken common.Address + From common.Address + To common.Address + TokenId *big.Int + ExtraData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterERC721BridgeFinalized is a free log retrieval operation binding the contract event 0x1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac. +// +// Solidity: event ERC721BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 tokenId, bytes extraData) +func (_L1ERC721Bridge *L1ERC721BridgeFilterer) FilterERC721BridgeFinalized(opts *bind.FilterOpts, localToken []common.Address, remoteToken []common.Address, from []common.Address) (*L1ERC721BridgeERC721BridgeFinalizedIterator, error) { + + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _L1ERC721Bridge.contract.FilterLogs(opts, "ERC721BridgeFinalized", localTokenRule, remoteTokenRule, fromRule) + if err != nil { + return nil, err + } + return &L1ERC721BridgeERC721BridgeFinalizedIterator{contract: _L1ERC721Bridge.contract, event: "ERC721BridgeFinalized", logs: logs, sub: sub}, nil +} + +// WatchERC721BridgeFinalized is a free log subscription operation binding the contract event 0x1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac. +// +// Solidity: event ERC721BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 tokenId, bytes extraData) +func (_L1ERC721Bridge *L1ERC721BridgeFilterer) WatchERC721BridgeFinalized(opts *bind.WatchOpts, sink chan<- *L1ERC721BridgeERC721BridgeFinalized, localToken []common.Address, remoteToken []common.Address, from []common.Address) (event.Subscription, error) { + + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _L1ERC721Bridge.contract.WatchLogs(opts, "ERC721BridgeFinalized", localTokenRule, remoteTokenRule, fromRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L1ERC721BridgeERC721BridgeFinalized) + if err := _L1ERC721Bridge.contract.UnpackLog(event, "ERC721BridgeFinalized", 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 +} + +// ParseERC721BridgeFinalized is a log parse operation binding the contract event 0x1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac. +// +// Solidity: event ERC721BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 tokenId, bytes extraData) +func (_L1ERC721Bridge *L1ERC721BridgeFilterer) ParseERC721BridgeFinalized(log types.Log) (*L1ERC721BridgeERC721BridgeFinalized, error) { + event := new(L1ERC721BridgeERC721BridgeFinalized) + if err := _L1ERC721Bridge.contract.UnpackLog(event, "ERC721BridgeFinalized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// L1ERC721BridgeERC721BridgeInitiatedIterator is returned from FilterERC721BridgeInitiated and is used to iterate over the raw logs and unpacked data for ERC721BridgeInitiated events raised by the L1ERC721Bridge contract. +type L1ERC721BridgeERC721BridgeInitiatedIterator struct { + Event *L1ERC721BridgeERC721BridgeInitiated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L1ERC721BridgeERC721BridgeInitiatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L1ERC721BridgeERC721BridgeInitiated) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L1ERC721BridgeERC721BridgeInitiated) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L1ERC721BridgeERC721BridgeInitiatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L1ERC721BridgeERC721BridgeInitiatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L1ERC721BridgeERC721BridgeInitiated represents a ERC721BridgeInitiated event raised by the L1ERC721Bridge contract. +type L1ERC721BridgeERC721BridgeInitiated struct { + LocalToken common.Address + RemoteToken common.Address + From common.Address + To common.Address + TokenId *big.Int + ExtraData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterERC721BridgeInitiated is a free log retrieval operation binding the contract event 0xb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a5. +// +// Solidity: event ERC721BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 tokenId, bytes extraData) +func (_L1ERC721Bridge *L1ERC721BridgeFilterer) FilterERC721BridgeInitiated(opts *bind.FilterOpts, localToken []common.Address, remoteToken []common.Address, from []common.Address) (*L1ERC721BridgeERC721BridgeInitiatedIterator, error) { + + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _L1ERC721Bridge.contract.FilterLogs(opts, "ERC721BridgeInitiated", localTokenRule, remoteTokenRule, fromRule) + if err != nil { + return nil, err + } + return &L1ERC721BridgeERC721BridgeInitiatedIterator{contract: _L1ERC721Bridge.contract, event: "ERC721BridgeInitiated", logs: logs, sub: sub}, nil +} + +// WatchERC721BridgeInitiated is a free log subscription operation binding the contract event 0xb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a5. +// +// Solidity: event ERC721BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 tokenId, bytes extraData) +func (_L1ERC721Bridge *L1ERC721BridgeFilterer) WatchERC721BridgeInitiated(opts *bind.WatchOpts, sink chan<- *L1ERC721BridgeERC721BridgeInitiated, localToken []common.Address, remoteToken []common.Address, from []common.Address) (event.Subscription, error) { + + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _L1ERC721Bridge.contract.WatchLogs(opts, "ERC721BridgeInitiated", localTokenRule, remoteTokenRule, fromRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L1ERC721BridgeERC721BridgeInitiated) + if err := _L1ERC721Bridge.contract.UnpackLog(event, "ERC721BridgeInitiated", 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 +} + +// ParseERC721BridgeInitiated is a log parse operation binding the contract event 0xb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a5. +// +// Solidity: event ERC721BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 tokenId, bytes extraData) +func (_L1ERC721Bridge *L1ERC721BridgeFilterer) ParseERC721BridgeInitiated(log types.Log) (*L1ERC721BridgeERC721BridgeInitiated, error) { + event := new(L1ERC721BridgeERC721BridgeInitiated) + if err := _L1ERC721Bridge.contract.UnpackLog(event, "ERC721BridgeInitiated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/kroma-bindings/bindings/l1erc721bridge_more.go b/kroma-bindings/bindings/l1erc721bridge_more.go new file mode 100644 index 000000000..a740a4ecc --- /dev/null +++ b/kroma-bindings/bindings/l1erc721bridge_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const L1ERC721BridgeStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L1/L1ERC721Bridge.sol:L1ERC721Bridge\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_array(t_uint256)49_storage\"},{\"astId\":1001,\"contract\":\"contracts/L1/L1ERC721Bridge.sol:L1ERC721Bridge\",\"label\":\"deposits\",\"offset\":0,\"slot\":\"49\",\"type\":\"t_mapping(t_address,t_mapping(t_address,t_mapping(t_uint256,t_bool)))\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)49_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\",\"base\":\"t_uint256\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_mapping(t_address,t_mapping(t_address,t_mapping(t_uint256,t_bool)))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(address =\u003e mapping(uint256 =\u003e bool)))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_address,t_mapping(t_uint256,t_bool))\"},\"t_mapping(t_address,t_mapping(t_uint256,t_bool))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(uint256 =\u003e bool))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_uint256,t_bool)\"},\"t_mapping(t_uint256,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_bool\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"}}}" + +var L1ERC721BridgeStorageLayout = new(solc.StorageLayout) + +var L1ERC721BridgeDeployedBin = "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063761f44931161005b578063761f4493146100f95780637f46ddb21461010c578063927ede2d14610158578063aa5574521461017f57600080fd5b80633687011a1461008257806354fd4d50146100975780635d93a3fc146100b5575b600080fd5b610095610090366004610dbd565b610192565b005b61009f61023e565b6040516100ac9190610eba565b60405180910390f35b6100e96100c3366004610ed4565b603160209081526000938452604080852082529284528284209052825290205460ff1681565b60405190151581526020016100ac565b610095610107366004610f15565b6102e1565b6101337f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ac565b6101337f000000000000000000000000000000000000000000000000000000000000000081565b61009561018d366004610fad565b610762565b333b15610226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b610236868633338888888861081e565b505050505050565b60606102697f0000000000000000000000000000000000000000000000000000000000000000610b95565b6102927f0000000000000000000000000000000000000000000000000000000000000000610b95565b6102bb7f0000000000000000000000000000000000000000000000000000000000000000610b95565b6040516020016102cd93929190611024565b604051602081830303815290604052905090565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156103ff57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e7919061109a565b73ffffffffffffffffffffffffffffffffffffffff16145b61048b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f746865722062726964676500606482015260840161021d565b3073ffffffffffffffffffffffffffffffffffffffff881603610530576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c314552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c6600000000000000000000000000000000000000000000606482015260840161021d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152603160209081526040808320938a1683529281528282208683529052205460ff1615156001146105ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4c314552433732314272696467653a20546f6b656e204944206973206e6f742060448201527f657363726f77656420696e20746865204c312042726964676500000000000000606482015260840161021d565b73ffffffffffffffffffffffffffffffffffffffff87811660008181526031602090815260408083208b8616845282528083208884529091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152918616602483015260448201859052906342842e0e90606401600060405180830381600087803b1580156106bf57600080fd5b505af11580156106d3573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac878787876040516107519493929190611100565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516610805576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f74206265206164647265737328302900000000000000000000000000000000606482015260840161021d565b610815878733888888888861081e565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff87166108c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c314552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f742062652061646472657373283029000000000000000000000000000000606482015260840161021d565b600063761f449360e01b888a89898988886040516024016108e89796959493929190611140565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000959095169490941790935273ffffffffffffffffffffffffffffffffffffffff8c81166000818152603186528381208e8416825286528381208b82529095529382902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590517f23b872dd000000000000000000000000000000000000000000000000000000008152908a166004820152306024820152604481018890529092506323b872dd90606401600060405180830381600087803b158015610a2857600080fd5b505af1158015610a3c573d6000803e3d6000fd5b50506040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250633dbb202b9150610ad6907f0000000000000000000000000000000000000000000000000000000000000000908590899060040161119d565b600060405180830381600087803b158015610af057600080fd5b505af1158015610b04573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a589898888604051610b829493929190611100565b60405180910390a4505050505050505050565b60606000610ba283610c53565b600101905060008167ffffffffffffffff811115610bc257610bc26111e2565b6040519080825280601f01601f191660200182016040528015610bec576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084610bf657509392505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610c9c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610cc8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ce657662386f26fc10000830492506010015b6305f5e1008310610cfe576305f5e100830492506008015b6127108310610d1257612710830492506004015b60648310610d24576064830492506002015b600a8310610d30576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff81168114610d5857600080fd5b50565b803563ffffffff81168114610d6f57600080fd5b919050565b60008083601f840112610d8657600080fd5b50813567ffffffffffffffff811115610d9e57600080fd5b602083019150836020828501011115610db657600080fd5b9250929050565b60008060008060008060a08789031215610dd657600080fd5b8635610de181610d36565b95506020870135610df181610d36565b945060408701359350610e0660608801610d5b565b9250608087013567ffffffffffffffff811115610e2257600080fd5b610e2e89828a01610d74565b979a9699509497509295939492505050565b60005b83811015610e5b578181015183820152602001610e43565b83811115610e6a576000848401525b50505050565b60008151808452610e88816020860160208601610e40565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610ecd6020830184610e70565b9392505050565b600080600060608486031215610ee957600080fd5b8335610ef481610d36565b92506020840135610f0481610d36565b929592945050506040919091013590565b600080600080600080600060c0888a031215610f3057600080fd5b8735610f3b81610d36565b96506020880135610f4b81610d36565b95506040880135610f5b81610d36565b94506060880135610f6b81610d36565b93506080880135925060a088013567ffffffffffffffff811115610f8e57600080fd5b610f9a8a828b01610d74565b989b979a50959850939692959293505050565b600080600080600080600060c0888a031215610fc857600080fd5b8735610fd381610d36565b96506020880135610fe381610d36565b95506040880135610ff381610d36565b94506060880135935061100860808901610d5b565b925060a088013567ffffffffffffffff811115610f8e57600080fd5b60008451611036818460208901610e40565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611072816001850160208a01610e40565b6001920191820152835161108d816002840160208801610e40565b0160020195945050505050565b6000602082840312156110ac57600080fd5b8151610ecd81610d36565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff851681528360208201526060604082015260006111366060830184866110b7565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a083015261119060c0830184866110b7565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006111cc6060830185610e70565b905063ffffffff83166040830152949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(L1ERC721BridgeStorageLayoutJSON), L1ERC721BridgeStorageLayout); err != nil { + panic(err) + } + + layouts["L1ERC721Bridge"] = L1ERC721BridgeStorageLayout + deployedBytecodes["L1ERC721Bridge"] = L1ERC721BridgeDeployedBin +} diff --git a/kroma-bindings/bindings/l1feevault.go b/kroma-bindings/bindings/l1feevault.go new file mode 100644 index 000000000..de7c5ecdd --- /dev/null +++ b/kroma-bindings/bindings/l1feevault.go @@ -0,0 +1,505 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// L1FeeVaultMetaData contains all meta data concerning the L1FeeVault contract. +var L1FeeVaultMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MIN_WITHDRAWAL_AMOUNT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RECIPIENT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalProcessed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x61012060405234801561001157600080fd5b5060405161086c38038061086c8339810160408190526100309161005d565b678ac7230489e800006080526001600160a01b031660a052600160c0819052600060e0526101005261008d565b60006020828403121561006f57600080fd5b81516001600160a01b038116811461008657600080fd5b9392505050565b60805160a05160c05160e051610100516107876100e560003960006103d3015260006103aa01526000610381015260008181607c015281816102570152610319015260008181610137015261015b01526107876000f3fe60806040526004361061005e5760003560e01c806354fd4d501161004357806354fd4d50146100df57806384411d6514610101578063d3e5792b1461012557600080fd5b80630d9019e11461006a5780633ccfd60b146100c857600080fd5b3661006557005b600080fd5b34801561007657600080fd5b5061009e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156100d457600080fd5b506100dd610159565b005b3480156100eb57600080fd5b506100f461037a565b6040516100bf9190610638565b34801561010d57600080fd5b5061011760005481565b6040519081526020016100bf565b34801561013157600080fd5b506101177f000000000000000000000000000000000000000000000000000000000000000081565b7f0000000000000000000000000000000000000000000000000000000000000000471015610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4665655661756c743a207769746864726177616c20616d6f756e74206d75737460448201527f2062652067726561746572207468616e206d696e696d756d207769746864726160648201527f77616c20616d6f756e7400000000000000000000000000000000000000000000608482015260a40160405180910390fd5b6000479050806000808282546102499190610652565b9091555050604080518281527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166020820152338183015290517fc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba9181900360600190a1604080516020810182526000815290517fe11013dd0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000099163e11013dd918491610345917f0000000000000000000000000000000000000000000000000000000000000000916188b891600401610691565b6000604051808303818588803b15801561035e57600080fd5b505af1158015610372573d6000803e3d6000fd5b505050505050565b60606103a57f000000000000000000000000000000000000000000000000000000000000000061041d565b6103ce7f000000000000000000000000000000000000000000000000000000000000000061041d565b6103f77f000000000000000000000000000000000000000000000000000000000000000061041d565b604051602001610409939291906106d5565b604051602081830303815290604052905090565b6060600061042a836104db565b600101905060008167ffffffffffffffff81111561044a5761044a61074b565b6040519080825280601f01601f191660200182016040528015610474576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461047e57509392505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610524577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610550576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061056e57662386f26fc10000830492506010015b6305f5e1008310610586576305f5e100830492506008015b612710831061059a57612710830492506004015b606483106105ac576064830492506002015b600a83106105b8576001015b92915050565b60005b838110156105d95781810151838201526020016105c1565b838111156105e8576000848401525b50505050565b600081518084526106068160208601602086016105be565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061064b60208301846105ee565b9392505050565b6000821982111561068c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff831660208201526060604082015260006106cc60608301846105ee565b95945050505050565b600084516106e78184602089016105be565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610723816001850160208a016105be565b6001920191820152835161073e8160028401602088016105be565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a", +} + +// L1FeeVaultABI is the input ABI used to generate the binding from. +// Deprecated: Use L1FeeVaultMetaData.ABI instead. +var L1FeeVaultABI = L1FeeVaultMetaData.ABI + +// L1FeeVaultBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use L1FeeVaultMetaData.Bin instead. +var L1FeeVaultBin = L1FeeVaultMetaData.Bin + +// DeployL1FeeVault deploys a new Ethereum contract, binding an instance of L1FeeVault to it. +func DeployL1FeeVault(auth *bind.TransactOpts, backend bind.ContractBackend, _recipient common.Address) (common.Address, *types.Transaction, *L1FeeVault, error) { + parsed, err := L1FeeVaultMetaData.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(L1FeeVaultBin), backend, _recipient) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &L1FeeVault{L1FeeVaultCaller: L1FeeVaultCaller{contract: contract}, L1FeeVaultTransactor: L1FeeVaultTransactor{contract: contract}, L1FeeVaultFilterer: L1FeeVaultFilterer{contract: contract}}, nil +} + +// L1FeeVault is an auto generated Go binding around an Ethereum contract. +type L1FeeVault struct { + L1FeeVaultCaller // Read-only binding to the contract + L1FeeVaultTransactor // Write-only binding to the contract + L1FeeVaultFilterer // Log filterer for contract events +} + +// L1FeeVaultCaller is an auto generated read-only Go binding around an Ethereum contract. +type L1FeeVaultCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L1FeeVaultTransactor is an auto generated write-only Go binding around an Ethereum contract. +type L1FeeVaultTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L1FeeVaultFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type L1FeeVaultFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L1FeeVaultSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type L1FeeVaultSession struct { + Contract *L1FeeVault // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// L1FeeVaultCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type L1FeeVaultCallerSession struct { + Contract *L1FeeVaultCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// L1FeeVaultTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type L1FeeVaultTransactorSession struct { + Contract *L1FeeVaultTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// L1FeeVaultRaw is an auto generated low-level Go binding around an Ethereum contract. +type L1FeeVaultRaw struct { + Contract *L1FeeVault // Generic contract binding to access the raw methods on +} + +// L1FeeVaultCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type L1FeeVaultCallerRaw struct { + Contract *L1FeeVaultCaller // Generic read-only contract binding to access the raw methods on +} + +// L1FeeVaultTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type L1FeeVaultTransactorRaw struct { + Contract *L1FeeVaultTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewL1FeeVault creates a new instance of L1FeeVault, bound to a specific deployed contract. +func NewL1FeeVault(address common.Address, backend bind.ContractBackend) (*L1FeeVault, error) { + contract, err := bindL1FeeVault(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &L1FeeVault{L1FeeVaultCaller: L1FeeVaultCaller{contract: contract}, L1FeeVaultTransactor: L1FeeVaultTransactor{contract: contract}, L1FeeVaultFilterer: L1FeeVaultFilterer{contract: contract}}, nil +} + +// NewL1FeeVaultCaller creates a new read-only instance of L1FeeVault, bound to a specific deployed contract. +func NewL1FeeVaultCaller(address common.Address, caller bind.ContractCaller) (*L1FeeVaultCaller, error) { + contract, err := bindL1FeeVault(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &L1FeeVaultCaller{contract: contract}, nil +} + +// NewL1FeeVaultTransactor creates a new write-only instance of L1FeeVault, bound to a specific deployed contract. +func NewL1FeeVaultTransactor(address common.Address, transactor bind.ContractTransactor) (*L1FeeVaultTransactor, error) { + contract, err := bindL1FeeVault(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &L1FeeVaultTransactor{contract: contract}, nil +} + +// NewL1FeeVaultFilterer creates a new log filterer instance of L1FeeVault, bound to a specific deployed contract. +func NewL1FeeVaultFilterer(address common.Address, filterer bind.ContractFilterer) (*L1FeeVaultFilterer, error) { + contract, err := bindL1FeeVault(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &L1FeeVaultFilterer{contract: contract}, nil +} + +// bindL1FeeVault binds a generic wrapper to an already deployed contract. +func bindL1FeeVault(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := L1FeeVaultMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_L1FeeVault *L1FeeVaultRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _L1FeeVault.Contract.L1FeeVaultCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_L1FeeVault *L1FeeVaultRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L1FeeVault.Contract.L1FeeVaultTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_L1FeeVault *L1FeeVaultRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _L1FeeVault.Contract.L1FeeVaultTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_L1FeeVault *L1FeeVaultCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _L1FeeVault.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_L1FeeVault *L1FeeVaultTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L1FeeVault.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_L1FeeVault *L1FeeVaultTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _L1FeeVault.Contract.contract.Transact(opts, method, params...) +} + +// MINWITHDRAWALAMOUNT is a free data retrieval call binding the contract method 0xd3e5792b. +// +// Solidity: function MIN_WITHDRAWAL_AMOUNT() view returns(uint256) +func (_L1FeeVault *L1FeeVaultCaller) MINWITHDRAWALAMOUNT(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _L1FeeVault.contract.Call(opts, &out, "MIN_WITHDRAWAL_AMOUNT") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MINWITHDRAWALAMOUNT is a free data retrieval call binding the contract method 0xd3e5792b. +// +// Solidity: function MIN_WITHDRAWAL_AMOUNT() view returns(uint256) +func (_L1FeeVault *L1FeeVaultSession) MINWITHDRAWALAMOUNT() (*big.Int, error) { + return _L1FeeVault.Contract.MINWITHDRAWALAMOUNT(&_L1FeeVault.CallOpts) +} + +// MINWITHDRAWALAMOUNT is a free data retrieval call binding the contract method 0xd3e5792b. +// +// Solidity: function MIN_WITHDRAWAL_AMOUNT() view returns(uint256) +func (_L1FeeVault *L1FeeVaultCallerSession) MINWITHDRAWALAMOUNT() (*big.Int, error) { + return _L1FeeVault.Contract.MINWITHDRAWALAMOUNT(&_L1FeeVault.CallOpts) +} + +// RECIPIENT is a free data retrieval call binding the contract method 0x0d9019e1. +// +// Solidity: function RECIPIENT() view returns(address) +func (_L1FeeVault *L1FeeVaultCaller) RECIPIENT(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L1FeeVault.contract.Call(opts, &out, "RECIPIENT") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// RECIPIENT is a free data retrieval call binding the contract method 0x0d9019e1. +// +// Solidity: function RECIPIENT() view returns(address) +func (_L1FeeVault *L1FeeVaultSession) RECIPIENT() (common.Address, error) { + return _L1FeeVault.Contract.RECIPIENT(&_L1FeeVault.CallOpts) +} + +// RECIPIENT is a free data retrieval call binding the contract method 0x0d9019e1. +// +// Solidity: function RECIPIENT() view returns(address) +func (_L1FeeVault *L1FeeVaultCallerSession) RECIPIENT() (common.Address, error) { + return _L1FeeVault.Contract.RECIPIENT(&_L1FeeVault.CallOpts) +} + +// TotalProcessed is a free data retrieval call binding the contract method 0x84411d65. +// +// Solidity: function totalProcessed() view returns(uint256) +func (_L1FeeVault *L1FeeVaultCaller) TotalProcessed(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _L1FeeVault.contract.Call(opts, &out, "totalProcessed") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalProcessed is a free data retrieval call binding the contract method 0x84411d65. +// +// Solidity: function totalProcessed() view returns(uint256) +func (_L1FeeVault *L1FeeVaultSession) TotalProcessed() (*big.Int, error) { + return _L1FeeVault.Contract.TotalProcessed(&_L1FeeVault.CallOpts) +} + +// TotalProcessed is a free data retrieval call binding the contract method 0x84411d65. +// +// Solidity: function totalProcessed() view returns(uint256) +func (_L1FeeVault *L1FeeVaultCallerSession) TotalProcessed() (*big.Int, error) { + return _L1FeeVault.Contract.TotalProcessed(&_L1FeeVault.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L1FeeVault *L1FeeVaultCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _L1FeeVault.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L1FeeVault *L1FeeVaultSession) Version() (string, error) { + return _L1FeeVault.Contract.Version(&_L1FeeVault.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L1FeeVault *L1FeeVaultCallerSession) Version() (string, error) { + return _L1FeeVault.Contract.Version(&_L1FeeVault.CallOpts) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x3ccfd60b. +// +// Solidity: function withdraw() returns() +func (_L1FeeVault *L1FeeVaultTransactor) Withdraw(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L1FeeVault.contract.Transact(opts, "withdraw") +} + +// Withdraw is a paid mutator transaction binding the contract method 0x3ccfd60b. +// +// Solidity: function withdraw() returns() +func (_L1FeeVault *L1FeeVaultSession) Withdraw() (*types.Transaction, error) { + return _L1FeeVault.Contract.Withdraw(&_L1FeeVault.TransactOpts) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x3ccfd60b. +// +// Solidity: function withdraw() returns() +func (_L1FeeVault *L1FeeVaultTransactorSession) Withdraw() (*types.Transaction, error) { + return _L1FeeVault.Contract.Withdraw(&_L1FeeVault.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_L1FeeVault *L1FeeVaultTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L1FeeVault.contract.RawTransact(opts, nil) // calldata is disallowed for receive function +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_L1FeeVault *L1FeeVaultSession) Receive() (*types.Transaction, error) { + return _L1FeeVault.Contract.Receive(&_L1FeeVault.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_L1FeeVault *L1FeeVaultTransactorSession) Receive() (*types.Transaction, error) { + return _L1FeeVault.Contract.Receive(&_L1FeeVault.TransactOpts) +} + +// L1FeeVaultWithdrawalIterator is returned from FilterWithdrawal and is used to iterate over the raw logs and unpacked data for Withdrawal events raised by the L1FeeVault contract. +type L1FeeVaultWithdrawalIterator struct { + Event *L1FeeVaultWithdrawal // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L1FeeVaultWithdrawalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L1FeeVaultWithdrawal) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L1FeeVaultWithdrawal) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L1FeeVaultWithdrawalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L1FeeVaultWithdrawalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L1FeeVaultWithdrawal represents a Withdrawal event raised by the L1FeeVault contract. +type L1FeeVaultWithdrawal struct { + Value *big.Int + To common.Address + From common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawal is a free log retrieval operation binding the contract event 0xc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba. +// +// Solidity: event Withdrawal(uint256 value, address to, address from) +func (_L1FeeVault *L1FeeVaultFilterer) FilterWithdrawal(opts *bind.FilterOpts) (*L1FeeVaultWithdrawalIterator, error) { + + logs, sub, err := _L1FeeVault.contract.FilterLogs(opts, "Withdrawal") + if err != nil { + return nil, err + } + return &L1FeeVaultWithdrawalIterator{contract: _L1FeeVault.contract, event: "Withdrawal", logs: logs, sub: sub}, nil +} + +// WatchWithdrawal is a free log subscription operation binding the contract event 0xc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba. +// +// Solidity: event Withdrawal(uint256 value, address to, address from) +func (_L1FeeVault *L1FeeVaultFilterer) WatchWithdrawal(opts *bind.WatchOpts, sink chan<- *L1FeeVaultWithdrawal) (event.Subscription, error) { + + logs, sub, err := _L1FeeVault.contract.WatchLogs(opts, "Withdrawal") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L1FeeVaultWithdrawal) + if err := _L1FeeVault.contract.UnpackLog(event, "Withdrawal", 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 +} + +// ParseWithdrawal is a log parse operation binding the contract event 0xc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba. +// +// Solidity: event Withdrawal(uint256 value, address to, address from) +func (_L1FeeVault *L1FeeVaultFilterer) ParseWithdrawal(log types.Log) (*L1FeeVaultWithdrawal, error) { + event := new(L1FeeVaultWithdrawal) + if err := _L1FeeVault.contract.UnpackLog(event, "Withdrawal", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/kroma-bindings/bindings/l1feevault_more.go b/kroma-bindings/bindings/l1feevault_more.go new file mode 100644 index 000000000..fcbf88878 --- /dev/null +++ b/kroma-bindings/bindings/l1feevault_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const L1FeeVaultStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L2/L1FeeVault.sol:L1FeeVault\",\"label\":\"totalProcessed\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint256\"}],\"types\":{\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"}}}" + +var L1FeeVaultStorageLayout = new(solc.StorageLayout) + +var L1FeeVaultDeployedBin = "0x60806040526004361061005e5760003560e01c806354fd4d501161004357806354fd4d50146100df57806384411d6514610101578063d3e5792b1461012557600080fd5b80630d9019e11461006a5780633ccfd60b146100c857600080fd5b3661006557005b600080fd5b34801561007657600080fd5b5061009e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156100d457600080fd5b506100dd610159565b005b3480156100eb57600080fd5b506100f461037a565b6040516100bf9190610638565b34801561010d57600080fd5b5061011760005481565b6040519081526020016100bf565b34801561013157600080fd5b506101177f000000000000000000000000000000000000000000000000000000000000000081565b7f0000000000000000000000000000000000000000000000000000000000000000471015610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4665655661756c743a207769746864726177616c20616d6f756e74206d75737460448201527f2062652067726561746572207468616e206d696e696d756d207769746864726160648201527f77616c20616d6f756e7400000000000000000000000000000000000000000000608482015260a40160405180910390fd5b6000479050806000808282546102499190610652565b9091555050604080518281527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166020820152338183015290517fc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba9181900360600190a1604080516020810182526000815290517fe11013dd0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000099163e11013dd918491610345917f0000000000000000000000000000000000000000000000000000000000000000916188b891600401610691565b6000604051808303818588803b15801561035e57600080fd5b505af1158015610372573d6000803e3d6000fd5b505050505050565b60606103a57f000000000000000000000000000000000000000000000000000000000000000061041d565b6103ce7f000000000000000000000000000000000000000000000000000000000000000061041d565b6103f77f000000000000000000000000000000000000000000000000000000000000000061041d565b604051602001610409939291906106d5565b604051602081830303815290604052905090565b6060600061042a836104db565b600101905060008167ffffffffffffffff81111561044a5761044a61074b565b6040519080825280601f01601f191660200182016040528015610474576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461047e57509392505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610524577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610550576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061056e57662386f26fc10000830492506010015b6305f5e1008310610586576305f5e100830492506008015b612710831061059a57612710830492506004015b606483106105ac576064830492506002015b600a83106105b8576001015b92915050565b60005b838110156105d95781810151838201526020016105c1565b838111156105e8576000848401525b50505050565b600081518084526106068160208601602086016105be565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061064b60208301846105ee565b9392505050565b6000821982111561068c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff831660208201526060604082015260006106cc60608301846105ee565b95945050505050565b600084516106e78184602089016105be565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610723816001850160208a016105be565b6001920191820152835161073e8160028401602088016105be565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(L1FeeVaultStorageLayoutJSON), L1FeeVaultStorageLayout); err != nil { + panic(err) + } + + layouts["L1FeeVault"] = L1FeeVaultStorageLayout + deployedBytecodes["L1FeeVault"] = L1FeeVaultDeployedBin +} diff --git a/kroma-bindings/bindings/l1standardbridge.go b/kroma-bindings/bindings/l1standardbridge.go new file mode 100644 index 000000000..9984c59bf --- /dev/null +++ b/kroma-bindings/bindings/l1standardbridge.go @@ -0,0 +1,1114 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// L1StandardBridgeMetaData contains all meta data concerning the L1StandardBridge contract. +var L1StandardBridgeMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_messenger\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC20BridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC20BridgeInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ETHBridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ETHBridgeInitiated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSENGER\",\"outputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_BRIDGE\",\"outputs\":[{\"internalType\":\"contractStandardBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC20To\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeETHTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"deposits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x61012060405234801561001157600080fd5b5060405162002389380380620023898339810160408190526100329161006b565b6001600160a01b031660805273420000000000000000000000000000000000000960a052600160c052600060e08190526101005261009b565b60006020828403121561007d57600080fd5b81516001600160a01b038116811461009457600080fd5b9392505050565b60805160a05160c05160e0516101005161225c6200012d6000396000610eed01526000610ec401526000610e9b0152600081816101fd015281816104090152818161055501528181610a0e015261148e0152600081816102b9015281816103cc0152818161052b0152818161058c015281816109e401528181610a4501528181610c840152611452015261225c6000f3fe6080604052600436106100b55760003560e01c80637f46ddb2116100695780638f601f661161004e5780638f601f6614610264578063927ede2d146102a7578063e11013dd146102db57600080fd5b80637f46ddb2146101eb578063870876231461024457600080fd5b80631635f5fd1161009a5780631635f5fd1461018d578063540abf73146101a057806354fd4d50146101c057600080fd5b80630166a07a1461015a57806309fc88431461017a57600080fd5b3661015557333b156101345760405162461bcd60e51b815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61015333333462030d40604051806020016040528060008152506102ee565b005b600080fd5b34801561016657600080fd5b50610153610175366004611b82565b610513565b610153610188366004611c33565b61090f565b61015361019b366004611c86565b6109cc565b3480156101ac57600080fd5b506101536101bb366004611cf9565b610e46565b3480156101cc57600080fd5b506101d5610e94565b6040516101e29190611de6565b60405180910390f35b3480156101f757600080fd5b5061021f7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e2565b34801561025057600080fd5b5061015361025f366004611df9565b610f37565b34801561027057600080fd5b5061029961027f366004611e7c565b600060208181529281526040808220909352908152205481565b6040519081526020016101e2565b3480156102b357600080fd5b5061021f7f000000000000000000000000000000000000000000000000000000000000000081565b6101536102e9366004611eb5565b610ff1565b8234146103635760405162461bcd60e51b815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161012b565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af585846040516103c2929190611f18565b60405180910390a37f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633dbb202b847f0000000000000000000000000000000000000000000000000000000000000000631635f5fd60e01b898989886040516024016104479493929190611f31565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526104da92918890600401611f7a565b6000604051808303818588803b1580156104f357600080fd5b505af1158015610507573d6000803e3d6000fd5b50505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561063157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106199190611fbf565b73ffffffffffffffffffffffffffffffffffffffff16145b6106c95760405162461bcd60e51b815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161012b565b6106d28761103a565b15610806576106e1878761106c565b6107795760405162461bcd60e51b815260206004820152604760248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204b726f6d61204d696e7461626c65204552433230206c6f636160648201527f6c20746f6b656e00000000000000000000000000000000000000000000000000608482015260a40161012b565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b50505050610884565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260208181526040808320938a168352929052205461084290849061200b565b73ffffffffffffffffffffffffffffffffffffffff808916600081815260208181526040808320948c1683529390529190912091909155610884908585611113565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd878787876040516108fe949392919061206b565b60405180910390a450505050505050565b333b156109845760405162461bcd60e51b815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161012b565b6109c73333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506102ee92505050565b505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148015610aea57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad29190611fbf565b73ffffffffffffffffffffffffffffffffffffffff16145b610b825760405162461bcd60e51b815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161012b565b823414610bf75760405162461bcd60e51b815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161012b565b3073ffffffffffffffffffffffffffffffffffffffff851603610c825760405162461bcd60e51b815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161012b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d435760405162461bcd60e51b815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161012b565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d858585604051610da4939291906120a1565b60405180910390a36000610dc9855a86604051806020016040528060008152506111e7565b905080610e3e5760405162461bcd60e51b815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161012b565b505050505050565b610e8b87873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061120392505050565b50505050505050565b6060610ebf7f000000000000000000000000000000000000000000000000000000000000000061159e565b610ee87f000000000000000000000000000000000000000000000000000000000000000061159e565b610f117f000000000000000000000000000000000000000000000000000000000000000061159e565b604051602001610f23939291906120c4565b604051602081830303815290604052905090565b333b15610fac5760405162461bcd60e51b815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161012b565b610e3e86863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061120392505050565b6110343385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506102ee92505050565b50505050565b6000611066827f30a0c5a90000000000000000000000000000000000000000000000000000000061165c565b92915050565b60008273ffffffffffffffffffffffffffffffffffffffff1663033964be6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dd9190611fbf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614905092915050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109c79084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261167f565b600080600080845160208601878a8af19150505b949350505050565b61120c8761103a565b156113405761121b878761106c565b6112b35760405162461bcd60e51b815260206004820152604760248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204b726f6d61204d696e7461626c65204552433230206c6f636160648201527f6c20746f6b656e00000000000000000000000000000000000000000000000000608482015260a40161012b565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561132357600080fd5b505af1158015611337573d6000803e3d6000fd5b505050506113d0565b61136273ffffffffffffffffffffffffffffffffffffffff8816863086611774565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260208181526040808320938a168352929052205461139e90849061213a565b73ffffffffffffffffffffffffffffffffffffffff808916600090815260208181526040808320938b16835292905220555b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf87878660405161144893929190612152565b60405180910390a47f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633dbb202b7f0000000000000000000000000000000000000000000000000000000000000000630166a07a60e01b898b8a8a8a896040516024016114d096959493929190612187565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261156392918790600401611f7a565b600060405180830381600087803b15801561157d57600080fd5b505af1158015611591573d6000803e3d6000fd5b5050505050505050505050565b606060006115ab836117d2565b600101905060008167ffffffffffffffff8111156115cb576115cb6121e2565b6040519080825280601f01601f1916602001820160405280156115f5576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846115ff57509392505050565b6000611667836118b4565b801561167857506116788383611918565b9392505050565b60006116e1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166119e79092919063ffffffff16565b90508051600014806117025750808060200190518101906117029190612211565b6109c75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161012b565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526110349085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611165565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061181b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611847576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061186557662386f26fc10000830492506010015b6305f5e100831061187d576305f5e100830492506008015b612710831061189157612710830492506004015b606483106118a3576064830492506002015b600a83106110665760010192915050565b60006118e0827f01ffc9a700000000000000000000000000000000000000000000000000000000611918565b80156110665750611911827fffffffff00000000000000000000000000000000000000000000000000000000611918565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156119d0575060208210155b80156119dc5750600081115b979650505050505050565b60606111fb8484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051611a1b9190612233565b60006040518083038185875af1925050503d8060008114611a58576040519150601f19603f3d011682016040523d82523d6000602084013e611a5d565b606091505b50915091506119dc8783838760608315611ae5578251600003611ade5773ffffffffffffffffffffffffffffffffffffffff85163b611ade5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161012b565b50816111fb565b6111fb8383815115611afa5781518083602001fd5b8060405162461bcd60e51b815260040161012b9190611de6565b73ffffffffffffffffffffffffffffffffffffffff81168114611b3657600080fd5b50565b60008083601f840112611b4b57600080fd5b50813567ffffffffffffffff811115611b6357600080fd5b602083019150836020828501011115611b7b57600080fd5b9250929050565b600080600080600080600060c0888a031215611b9d57600080fd5b8735611ba881611b14565b96506020880135611bb881611b14565b95506040880135611bc881611b14565b94506060880135611bd881611b14565b93506080880135925060a088013567ffffffffffffffff811115611bfb57600080fd5b611c078a828b01611b39565b989b979a50959850939692959293505050565b803563ffffffff81168114611c2e57600080fd5b919050565b600080600060408486031215611c4857600080fd5b611c5184611c1a565b9250602084013567ffffffffffffffff811115611c6d57600080fd5b611c7986828701611b39565b9497909650939450505050565b600080600080600060808688031215611c9e57600080fd5b8535611ca981611b14565b94506020860135611cb981611b14565b935060408601359250606086013567ffffffffffffffff811115611cdc57600080fd5b611ce888828901611b39565b969995985093965092949392505050565b600080600080600080600060c0888a031215611d1457600080fd5b8735611d1f81611b14565b96506020880135611d2f81611b14565b95506040880135611d3f81611b14565b945060608801359350611d5460808901611c1a565b925060a088013567ffffffffffffffff811115611bfb57600080fd5b60005b83811015611d8b578181015183820152602001611d73565b838111156110345750506000910152565b60008151808452611db4816020860160208601611d70565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006116786020830184611d9c565b60008060008060008060a08789031215611e1257600080fd5b8635611e1d81611b14565b95506020870135611e2d81611b14565b945060408701359350611e4260608801611c1a565b9250608087013567ffffffffffffffff811115611e5e57600080fd5b611e6a89828a01611b39565b979a9699509497509295939492505050565b60008060408385031215611e8f57600080fd5b8235611e9a81611b14565b91506020830135611eaa81611b14565b809150509250929050565b60008060008060608587031215611ecb57600080fd5b8435611ed681611b14565b9350611ee460208601611c1a565b9250604085013567ffffffffffffffff811115611f0057600080fd5b611f0c87828801611b39565b95989497509550505050565b8281526040602082015260006111fb6040830184611d9c565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152611f706080830184611d9c565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000611fa96060830185611d9c565b905063ffffffff83166040830152949350505050565b600060208284031215611fd157600080fd5b815161167881611b14565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561201d5761201d611fdc565b500390565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000611f70606083018486612022565b8381526040602082015260006120bb604083018486612022565b95945050505050565b600084516120d6818460208901611d70565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612112816001850160208a01611d70565b6001920191820152835161212d816002840160208801611d70565b0160020195945050505050565b6000821982111561214d5761214d611fdc565b500190565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006120bb6060830184611d9c565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a08301526121d660c0830184611d9c565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561222357600080fd5b8151801515811461167857600080fd5b60008251612245818460208701611d70565b919091019291505056fea164736f6c634300080f000a", +} + +// L1StandardBridgeABI is the input ABI used to generate the binding from. +// Deprecated: Use L1StandardBridgeMetaData.ABI instead. +var L1StandardBridgeABI = L1StandardBridgeMetaData.ABI + +// L1StandardBridgeBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use L1StandardBridgeMetaData.Bin instead. +var L1StandardBridgeBin = L1StandardBridgeMetaData.Bin + +// DeployL1StandardBridge deploys a new Ethereum contract, binding an instance of L1StandardBridge to it. +func DeployL1StandardBridge(auth *bind.TransactOpts, backend bind.ContractBackend, _messenger common.Address) (common.Address, *types.Transaction, *L1StandardBridge, error) { + parsed, err := L1StandardBridgeMetaData.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(L1StandardBridgeBin), backend, _messenger) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &L1StandardBridge{L1StandardBridgeCaller: L1StandardBridgeCaller{contract: contract}, L1StandardBridgeTransactor: L1StandardBridgeTransactor{contract: contract}, L1StandardBridgeFilterer: L1StandardBridgeFilterer{contract: contract}}, nil +} + +// L1StandardBridge is an auto generated Go binding around an Ethereum contract. +type L1StandardBridge struct { + L1StandardBridgeCaller // Read-only binding to the contract + L1StandardBridgeTransactor // Write-only binding to the contract + L1StandardBridgeFilterer // Log filterer for contract events +} + +// L1StandardBridgeCaller is an auto generated read-only Go binding around an Ethereum contract. +type L1StandardBridgeCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L1StandardBridgeTransactor is an auto generated write-only Go binding around an Ethereum contract. +type L1StandardBridgeTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L1StandardBridgeFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type L1StandardBridgeFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L1StandardBridgeSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type L1StandardBridgeSession struct { + Contract *L1StandardBridge // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// L1StandardBridgeCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type L1StandardBridgeCallerSession struct { + Contract *L1StandardBridgeCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// L1StandardBridgeTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type L1StandardBridgeTransactorSession struct { + Contract *L1StandardBridgeTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// L1StandardBridgeRaw is an auto generated low-level Go binding around an Ethereum contract. +type L1StandardBridgeRaw struct { + Contract *L1StandardBridge // Generic contract binding to access the raw methods on +} + +// L1StandardBridgeCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type L1StandardBridgeCallerRaw struct { + Contract *L1StandardBridgeCaller // Generic read-only contract binding to access the raw methods on +} + +// L1StandardBridgeTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type L1StandardBridgeTransactorRaw struct { + Contract *L1StandardBridgeTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewL1StandardBridge creates a new instance of L1StandardBridge, bound to a specific deployed contract. +func NewL1StandardBridge(address common.Address, backend bind.ContractBackend) (*L1StandardBridge, error) { + contract, err := bindL1StandardBridge(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &L1StandardBridge{L1StandardBridgeCaller: L1StandardBridgeCaller{contract: contract}, L1StandardBridgeTransactor: L1StandardBridgeTransactor{contract: contract}, L1StandardBridgeFilterer: L1StandardBridgeFilterer{contract: contract}}, nil +} + +// NewL1StandardBridgeCaller creates a new read-only instance of L1StandardBridge, bound to a specific deployed contract. +func NewL1StandardBridgeCaller(address common.Address, caller bind.ContractCaller) (*L1StandardBridgeCaller, error) { + contract, err := bindL1StandardBridge(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &L1StandardBridgeCaller{contract: contract}, nil +} + +// NewL1StandardBridgeTransactor creates a new write-only instance of L1StandardBridge, bound to a specific deployed contract. +func NewL1StandardBridgeTransactor(address common.Address, transactor bind.ContractTransactor) (*L1StandardBridgeTransactor, error) { + contract, err := bindL1StandardBridge(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &L1StandardBridgeTransactor{contract: contract}, nil +} + +// NewL1StandardBridgeFilterer creates a new log filterer instance of L1StandardBridge, bound to a specific deployed contract. +func NewL1StandardBridgeFilterer(address common.Address, filterer bind.ContractFilterer) (*L1StandardBridgeFilterer, error) { + contract, err := bindL1StandardBridge(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &L1StandardBridgeFilterer{contract: contract}, nil +} + +// bindL1StandardBridge binds a generic wrapper to an already deployed contract. +func bindL1StandardBridge(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := L1StandardBridgeMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_L1StandardBridge *L1StandardBridgeRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _L1StandardBridge.Contract.L1StandardBridgeCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_L1StandardBridge *L1StandardBridgeRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L1StandardBridge.Contract.L1StandardBridgeTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_L1StandardBridge *L1StandardBridgeRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _L1StandardBridge.Contract.L1StandardBridgeTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_L1StandardBridge *L1StandardBridgeCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _L1StandardBridge.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_L1StandardBridge *L1StandardBridgeTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L1StandardBridge.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_L1StandardBridge *L1StandardBridgeTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _L1StandardBridge.Contract.contract.Transact(opts, method, params...) +} + +// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. +// +// Solidity: function MESSENGER() view returns(address) +func (_L1StandardBridge *L1StandardBridgeCaller) MESSENGER(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L1StandardBridge.contract.Call(opts, &out, "MESSENGER") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. +// +// Solidity: function MESSENGER() view returns(address) +func (_L1StandardBridge *L1StandardBridgeSession) MESSENGER() (common.Address, error) { + return _L1StandardBridge.Contract.MESSENGER(&_L1StandardBridge.CallOpts) +} + +// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. +// +// Solidity: function MESSENGER() view returns(address) +func (_L1StandardBridge *L1StandardBridgeCallerSession) MESSENGER() (common.Address, error) { + return _L1StandardBridge.Contract.MESSENGER(&_L1StandardBridge.CallOpts) +} + +// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. +// +// Solidity: function OTHER_BRIDGE() view returns(address) +func (_L1StandardBridge *L1StandardBridgeCaller) OTHERBRIDGE(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L1StandardBridge.contract.Call(opts, &out, "OTHER_BRIDGE") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. +// +// Solidity: function OTHER_BRIDGE() view returns(address) +func (_L1StandardBridge *L1StandardBridgeSession) OTHERBRIDGE() (common.Address, error) { + return _L1StandardBridge.Contract.OTHERBRIDGE(&_L1StandardBridge.CallOpts) +} + +// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. +// +// Solidity: function OTHER_BRIDGE() view returns(address) +func (_L1StandardBridge *L1StandardBridgeCallerSession) OTHERBRIDGE() (common.Address, error) { + return _L1StandardBridge.Contract.OTHERBRIDGE(&_L1StandardBridge.CallOpts) +} + +// Deposits is a free data retrieval call binding the contract method 0x8f601f66. +// +// Solidity: function deposits(address , address ) view returns(uint256) +func (_L1StandardBridge *L1StandardBridgeCaller) Deposits(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) { + var out []interface{} + err := _L1StandardBridge.contract.Call(opts, &out, "deposits", arg0, arg1) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Deposits is a free data retrieval call binding the contract method 0x8f601f66. +// +// Solidity: function deposits(address , address ) view returns(uint256) +func (_L1StandardBridge *L1StandardBridgeSession) Deposits(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _L1StandardBridge.Contract.Deposits(&_L1StandardBridge.CallOpts, arg0, arg1) +} + +// Deposits is a free data retrieval call binding the contract method 0x8f601f66. +// +// Solidity: function deposits(address , address ) view returns(uint256) +func (_L1StandardBridge *L1StandardBridgeCallerSession) Deposits(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _L1StandardBridge.Contract.Deposits(&_L1StandardBridge.CallOpts, arg0, arg1) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L1StandardBridge *L1StandardBridgeCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _L1StandardBridge.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L1StandardBridge *L1StandardBridgeSession) Version() (string, error) { + return _L1StandardBridge.Contract.Version(&_L1StandardBridge.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L1StandardBridge *L1StandardBridgeCallerSession) Version() (string, error) { + return _L1StandardBridge.Contract.Version(&_L1StandardBridge.CallOpts) +} + +// BridgeERC20 is a paid mutator transaction binding the contract method 0x87087623. +// +// Solidity: function bridgeERC20(address _localToken, address _remoteToken, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_L1StandardBridge *L1StandardBridgeTransactor) BridgeERC20(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.contract.Transact(opts, "bridgeERC20", _localToken, _remoteToken, _amount, _minGasLimit, _extraData) +} + +// BridgeERC20 is a paid mutator transaction binding the contract method 0x87087623. +// +// Solidity: function bridgeERC20(address _localToken, address _remoteToken, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_L1StandardBridge *L1StandardBridgeSession) BridgeERC20(_localToken common.Address, _remoteToken common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.Contract.BridgeERC20(&_L1StandardBridge.TransactOpts, _localToken, _remoteToken, _amount, _minGasLimit, _extraData) +} + +// BridgeERC20 is a paid mutator transaction binding the contract method 0x87087623. +// +// Solidity: function bridgeERC20(address _localToken, address _remoteToken, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_L1StandardBridge *L1StandardBridgeTransactorSession) BridgeERC20(_localToken common.Address, _remoteToken common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.Contract.BridgeERC20(&_L1StandardBridge.TransactOpts, _localToken, _remoteToken, _amount, _minGasLimit, _extraData) +} + +// BridgeERC20To is a paid mutator transaction binding the contract method 0x540abf73. +// +// Solidity: function bridgeERC20To(address _localToken, address _remoteToken, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_L1StandardBridge *L1StandardBridgeTransactor) BridgeERC20To(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.contract.Transact(opts, "bridgeERC20To", _localToken, _remoteToken, _to, _amount, _minGasLimit, _extraData) +} + +// BridgeERC20To is a paid mutator transaction binding the contract method 0x540abf73. +// +// Solidity: function bridgeERC20To(address _localToken, address _remoteToken, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_L1StandardBridge *L1StandardBridgeSession) BridgeERC20To(_localToken common.Address, _remoteToken common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.Contract.BridgeERC20To(&_L1StandardBridge.TransactOpts, _localToken, _remoteToken, _to, _amount, _minGasLimit, _extraData) +} + +// BridgeERC20To is a paid mutator transaction binding the contract method 0x540abf73. +// +// Solidity: function bridgeERC20To(address _localToken, address _remoteToken, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_L1StandardBridge *L1StandardBridgeTransactorSession) BridgeERC20To(_localToken common.Address, _remoteToken common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.Contract.BridgeERC20To(&_L1StandardBridge.TransactOpts, _localToken, _remoteToken, _to, _amount, _minGasLimit, _extraData) +} + +// BridgeETH is a paid mutator transaction binding the contract method 0x09fc8843. +// +// Solidity: function bridgeETH(uint32 _minGasLimit, bytes _extraData) payable returns() +func (_L1StandardBridge *L1StandardBridgeTransactor) BridgeETH(opts *bind.TransactOpts, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.contract.Transact(opts, "bridgeETH", _minGasLimit, _extraData) +} + +// BridgeETH is a paid mutator transaction binding the contract method 0x09fc8843. +// +// Solidity: function bridgeETH(uint32 _minGasLimit, bytes _extraData) payable returns() +func (_L1StandardBridge *L1StandardBridgeSession) BridgeETH(_minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.Contract.BridgeETH(&_L1StandardBridge.TransactOpts, _minGasLimit, _extraData) +} + +// BridgeETH is a paid mutator transaction binding the contract method 0x09fc8843. +// +// Solidity: function bridgeETH(uint32 _minGasLimit, bytes _extraData) payable returns() +func (_L1StandardBridge *L1StandardBridgeTransactorSession) BridgeETH(_minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.Contract.BridgeETH(&_L1StandardBridge.TransactOpts, _minGasLimit, _extraData) +} + +// BridgeETHTo is a paid mutator transaction binding the contract method 0xe11013dd. +// +// Solidity: function bridgeETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() +func (_L1StandardBridge *L1StandardBridgeTransactor) BridgeETHTo(opts *bind.TransactOpts, _to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.contract.Transact(opts, "bridgeETHTo", _to, _minGasLimit, _extraData) +} + +// BridgeETHTo is a paid mutator transaction binding the contract method 0xe11013dd. +// +// Solidity: function bridgeETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() +func (_L1StandardBridge *L1StandardBridgeSession) BridgeETHTo(_to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.Contract.BridgeETHTo(&_L1StandardBridge.TransactOpts, _to, _minGasLimit, _extraData) +} + +// BridgeETHTo is a paid mutator transaction binding the contract method 0xe11013dd. +// +// Solidity: function bridgeETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() +func (_L1StandardBridge *L1StandardBridgeTransactorSession) BridgeETHTo(_to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.Contract.BridgeETHTo(&_L1StandardBridge.TransactOpts, _to, _minGasLimit, _extraData) +} + +// FinalizeBridgeERC20 is a paid mutator transaction binding the contract method 0x0166a07a. +// +// Solidity: function finalizeBridgeERC20(address _localToken, address _remoteToken, address _from, address _to, uint256 _amount, bytes _extraData) returns() +func (_L1StandardBridge *L1StandardBridgeTransactor) FinalizeBridgeERC20(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.contract.Transact(opts, "finalizeBridgeERC20", _localToken, _remoteToken, _from, _to, _amount, _extraData) +} + +// FinalizeBridgeERC20 is a paid mutator transaction binding the contract method 0x0166a07a. +// +// Solidity: function finalizeBridgeERC20(address _localToken, address _remoteToken, address _from, address _to, uint256 _amount, bytes _extraData) returns() +func (_L1StandardBridge *L1StandardBridgeSession) FinalizeBridgeERC20(_localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.Contract.FinalizeBridgeERC20(&_L1StandardBridge.TransactOpts, _localToken, _remoteToken, _from, _to, _amount, _extraData) +} + +// FinalizeBridgeERC20 is a paid mutator transaction binding the contract method 0x0166a07a. +// +// Solidity: function finalizeBridgeERC20(address _localToken, address _remoteToken, address _from, address _to, uint256 _amount, bytes _extraData) returns() +func (_L1StandardBridge *L1StandardBridgeTransactorSession) FinalizeBridgeERC20(_localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.Contract.FinalizeBridgeERC20(&_L1StandardBridge.TransactOpts, _localToken, _remoteToken, _from, _to, _amount, _extraData) +} + +// FinalizeBridgeETH is a paid mutator transaction binding the contract method 0x1635f5fd. +// +// Solidity: function finalizeBridgeETH(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() +func (_L1StandardBridge *L1StandardBridgeTransactor) FinalizeBridgeETH(opts *bind.TransactOpts, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.contract.Transact(opts, "finalizeBridgeETH", _from, _to, _amount, _extraData) +} + +// FinalizeBridgeETH is a paid mutator transaction binding the contract method 0x1635f5fd. +// +// Solidity: function finalizeBridgeETH(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() +func (_L1StandardBridge *L1StandardBridgeSession) FinalizeBridgeETH(_from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.Contract.FinalizeBridgeETH(&_L1StandardBridge.TransactOpts, _from, _to, _amount, _extraData) +} + +// FinalizeBridgeETH is a paid mutator transaction binding the contract method 0x1635f5fd. +// +// Solidity: function finalizeBridgeETH(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() +func (_L1StandardBridge *L1StandardBridgeTransactorSession) FinalizeBridgeETH(_from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.Contract.FinalizeBridgeETH(&_L1StandardBridge.TransactOpts, _from, _to, _amount, _extraData) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_L1StandardBridge *L1StandardBridgeTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L1StandardBridge.contract.RawTransact(opts, nil) // calldata is disallowed for receive function +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_L1StandardBridge *L1StandardBridgeSession) Receive() (*types.Transaction, error) { + return _L1StandardBridge.Contract.Receive(&_L1StandardBridge.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_L1StandardBridge *L1StandardBridgeTransactorSession) Receive() (*types.Transaction, error) { + return _L1StandardBridge.Contract.Receive(&_L1StandardBridge.TransactOpts) +} + +// L1StandardBridgeERC20BridgeFinalizedIterator is returned from FilterERC20BridgeFinalized and is used to iterate over the raw logs and unpacked data for ERC20BridgeFinalized events raised by the L1StandardBridge contract. +type L1StandardBridgeERC20BridgeFinalizedIterator struct { + Event *L1StandardBridgeERC20BridgeFinalized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L1StandardBridgeERC20BridgeFinalizedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L1StandardBridgeERC20BridgeFinalized) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L1StandardBridgeERC20BridgeFinalized) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L1StandardBridgeERC20BridgeFinalizedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L1StandardBridgeERC20BridgeFinalizedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L1StandardBridgeERC20BridgeFinalized represents a ERC20BridgeFinalized event raised by the L1StandardBridge contract. +type L1StandardBridgeERC20BridgeFinalized struct { + LocalToken common.Address + RemoteToken common.Address + From common.Address + To common.Address + Amount *big.Int + ExtraData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterERC20BridgeFinalized is a free log retrieval operation binding the contract event 0xd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd. +// +// Solidity: event ERC20BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) FilterERC20BridgeFinalized(opts *bind.FilterOpts, localToken []common.Address, remoteToken []common.Address, from []common.Address) (*L1StandardBridgeERC20BridgeFinalizedIterator, error) { + + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _L1StandardBridge.contract.FilterLogs(opts, "ERC20BridgeFinalized", localTokenRule, remoteTokenRule, fromRule) + if err != nil { + return nil, err + } + return &L1StandardBridgeERC20BridgeFinalizedIterator{contract: _L1StandardBridge.contract, event: "ERC20BridgeFinalized", logs: logs, sub: sub}, nil +} + +// WatchERC20BridgeFinalized is a free log subscription operation binding the contract event 0xd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd. +// +// Solidity: event ERC20BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) WatchERC20BridgeFinalized(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeERC20BridgeFinalized, localToken []common.Address, remoteToken []common.Address, from []common.Address) (event.Subscription, error) { + + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _L1StandardBridge.contract.WatchLogs(opts, "ERC20BridgeFinalized", localTokenRule, remoteTokenRule, fromRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L1StandardBridgeERC20BridgeFinalized) + if err := _L1StandardBridge.contract.UnpackLog(event, "ERC20BridgeFinalized", 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 +} + +// ParseERC20BridgeFinalized is a log parse operation binding the contract event 0xd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd. +// +// Solidity: event ERC20BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) ParseERC20BridgeFinalized(log types.Log) (*L1StandardBridgeERC20BridgeFinalized, error) { + event := new(L1StandardBridgeERC20BridgeFinalized) + if err := _L1StandardBridge.contract.UnpackLog(event, "ERC20BridgeFinalized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// L1StandardBridgeERC20BridgeInitiatedIterator is returned from FilterERC20BridgeInitiated and is used to iterate over the raw logs and unpacked data for ERC20BridgeInitiated events raised by the L1StandardBridge contract. +type L1StandardBridgeERC20BridgeInitiatedIterator struct { + Event *L1StandardBridgeERC20BridgeInitiated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L1StandardBridgeERC20BridgeInitiatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L1StandardBridgeERC20BridgeInitiated) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L1StandardBridgeERC20BridgeInitiated) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L1StandardBridgeERC20BridgeInitiatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L1StandardBridgeERC20BridgeInitiatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L1StandardBridgeERC20BridgeInitiated represents a ERC20BridgeInitiated event raised by the L1StandardBridge contract. +type L1StandardBridgeERC20BridgeInitiated struct { + LocalToken common.Address + RemoteToken common.Address + From common.Address + To common.Address + Amount *big.Int + ExtraData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterERC20BridgeInitiated is a free log retrieval operation binding the contract event 0x7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf. +// +// Solidity: event ERC20BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) FilterERC20BridgeInitiated(opts *bind.FilterOpts, localToken []common.Address, remoteToken []common.Address, from []common.Address) (*L1StandardBridgeERC20BridgeInitiatedIterator, error) { + + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _L1StandardBridge.contract.FilterLogs(opts, "ERC20BridgeInitiated", localTokenRule, remoteTokenRule, fromRule) + if err != nil { + return nil, err + } + return &L1StandardBridgeERC20BridgeInitiatedIterator{contract: _L1StandardBridge.contract, event: "ERC20BridgeInitiated", logs: logs, sub: sub}, nil +} + +// WatchERC20BridgeInitiated is a free log subscription operation binding the contract event 0x7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf. +// +// Solidity: event ERC20BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) WatchERC20BridgeInitiated(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeERC20BridgeInitiated, localToken []common.Address, remoteToken []common.Address, from []common.Address) (event.Subscription, error) { + + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _L1StandardBridge.contract.WatchLogs(opts, "ERC20BridgeInitiated", localTokenRule, remoteTokenRule, fromRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L1StandardBridgeERC20BridgeInitiated) + if err := _L1StandardBridge.contract.UnpackLog(event, "ERC20BridgeInitiated", 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 +} + +// ParseERC20BridgeInitiated is a log parse operation binding the contract event 0x7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf. +// +// Solidity: event ERC20BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) ParseERC20BridgeInitiated(log types.Log) (*L1StandardBridgeERC20BridgeInitiated, error) { + event := new(L1StandardBridgeERC20BridgeInitiated) + if err := _L1StandardBridge.contract.UnpackLog(event, "ERC20BridgeInitiated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// L1StandardBridgeETHBridgeFinalizedIterator is returned from FilterETHBridgeFinalized and is used to iterate over the raw logs and unpacked data for ETHBridgeFinalized events raised by the L1StandardBridge contract. +type L1StandardBridgeETHBridgeFinalizedIterator struct { + Event *L1StandardBridgeETHBridgeFinalized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L1StandardBridgeETHBridgeFinalizedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L1StandardBridgeETHBridgeFinalized) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L1StandardBridgeETHBridgeFinalized) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L1StandardBridgeETHBridgeFinalizedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L1StandardBridgeETHBridgeFinalizedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L1StandardBridgeETHBridgeFinalized represents a ETHBridgeFinalized event raised by the L1StandardBridge contract. +type L1StandardBridgeETHBridgeFinalized struct { + From common.Address + To common.Address + Amount *big.Int + ExtraData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterETHBridgeFinalized is a free log retrieval operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. +// +// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) FilterETHBridgeFinalized(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*L1StandardBridgeETHBridgeFinalizedIterator, 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 := _L1StandardBridge.contract.FilterLogs(opts, "ETHBridgeFinalized", fromRule, toRule) + if err != nil { + return nil, err + } + return &L1StandardBridgeETHBridgeFinalizedIterator{contract: _L1StandardBridge.contract, event: "ETHBridgeFinalized", logs: logs, sub: sub}, nil +} + +// WatchETHBridgeFinalized is a free log subscription operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. +// +// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) WatchETHBridgeFinalized(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeETHBridgeFinalized, 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 := _L1StandardBridge.contract.WatchLogs(opts, "ETHBridgeFinalized", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L1StandardBridgeETHBridgeFinalized) + if err := _L1StandardBridge.contract.UnpackLog(event, "ETHBridgeFinalized", 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 +} + +// ParseETHBridgeFinalized is a log parse operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. +// +// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) ParseETHBridgeFinalized(log types.Log) (*L1StandardBridgeETHBridgeFinalized, error) { + event := new(L1StandardBridgeETHBridgeFinalized) + if err := _L1StandardBridge.contract.UnpackLog(event, "ETHBridgeFinalized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// L1StandardBridgeETHBridgeInitiatedIterator is returned from FilterETHBridgeInitiated and is used to iterate over the raw logs and unpacked data for ETHBridgeInitiated events raised by the L1StandardBridge contract. +type L1StandardBridgeETHBridgeInitiatedIterator struct { + Event *L1StandardBridgeETHBridgeInitiated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L1StandardBridgeETHBridgeInitiatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L1StandardBridgeETHBridgeInitiated) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L1StandardBridgeETHBridgeInitiated) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L1StandardBridgeETHBridgeInitiatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L1StandardBridgeETHBridgeInitiatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L1StandardBridgeETHBridgeInitiated represents a ETHBridgeInitiated event raised by the L1StandardBridge contract. +type L1StandardBridgeETHBridgeInitiated struct { + From common.Address + To common.Address + Amount *big.Int + ExtraData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterETHBridgeInitiated is a free log retrieval operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. +// +// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) FilterETHBridgeInitiated(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*L1StandardBridgeETHBridgeInitiatedIterator, 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 := _L1StandardBridge.contract.FilterLogs(opts, "ETHBridgeInitiated", fromRule, toRule) + if err != nil { + return nil, err + } + return &L1StandardBridgeETHBridgeInitiatedIterator{contract: _L1StandardBridge.contract, event: "ETHBridgeInitiated", logs: logs, sub: sub}, nil +} + +// WatchETHBridgeInitiated is a free log subscription operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. +// +// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) WatchETHBridgeInitiated(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeETHBridgeInitiated, 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 := _L1StandardBridge.contract.WatchLogs(opts, "ETHBridgeInitiated", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L1StandardBridgeETHBridgeInitiated) + if err := _L1StandardBridge.contract.UnpackLog(event, "ETHBridgeInitiated", 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 +} + +// ParseETHBridgeInitiated is a log parse operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. +// +// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) ParseETHBridgeInitiated(log types.Log) (*L1StandardBridgeETHBridgeInitiated, error) { + event := new(L1StandardBridgeETHBridgeInitiated) + if err := _L1StandardBridge.contract.UnpackLog(event, "ETHBridgeInitiated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/kroma-bindings/bindings/l1standardbridge_more.go b/kroma-bindings/bindings/l1standardbridge_more.go new file mode 100644 index 000000000..1f20cd9e7 --- /dev/null +++ b/kroma-bindings/bindings/l1standardbridge_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const L1StandardBridgeStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L1/L1StandardBridge.sol:L1StandardBridge\",\"label\":\"deposits\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_mapping(t_address,t_mapping(t_address,t_uint256))\"},{\"astId\":1001,\"contract\":\"contracts/L1/L1StandardBridge.sol:L1StandardBridge\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)49_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)49_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\",\"base\":\"t_uint256\"},\"t_mapping(t_address,t_mapping(t_address,t_uint256))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(address =\u003e uint256))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_address,t_uint256)\"},\"t_mapping(t_address,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint256\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"}}}" + +var L1StandardBridgeStorageLayout = new(solc.StorageLayout) + +var L1StandardBridgeDeployedBin = "0x6080604052600436106100b55760003560e01c80637f46ddb2116100695780638f601f661161004e5780638f601f6614610264578063927ede2d146102a7578063e11013dd146102db57600080fd5b80637f46ddb2146101eb578063870876231461024457600080fd5b80631635f5fd1161009a5780631635f5fd1461018d578063540abf73146101a057806354fd4d50146101c057600080fd5b80630166a07a1461015a57806309fc88431461017a57600080fd5b3661015557333b156101345760405162461bcd60e51b815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61015333333462030d40604051806020016040528060008152506102ee565b005b600080fd5b34801561016657600080fd5b50610153610175366004611b82565b610513565b610153610188366004611c33565b61090f565b61015361019b366004611c86565b6109cc565b3480156101ac57600080fd5b506101536101bb366004611cf9565b610e46565b3480156101cc57600080fd5b506101d5610e94565b6040516101e29190611de6565b60405180910390f35b3480156101f757600080fd5b5061021f7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e2565b34801561025057600080fd5b5061015361025f366004611df9565b610f37565b34801561027057600080fd5b5061029961027f366004611e7c565b600060208181529281526040808220909352908152205481565b6040519081526020016101e2565b3480156102b357600080fd5b5061021f7f000000000000000000000000000000000000000000000000000000000000000081565b6101536102e9366004611eb5565b610ff1565b8234146103635760405162461bcd60e51b815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161012b565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af585846040516103c2929190611f18565b60405180910390a37f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633dbb202b847f0000000000000000000000000000000000000000000000000000000000000000631635f5fd60e01b898989886040516024016104479493929190611f31565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526104da92918890600401611f7a565b6000604051808303818588803b1580156104f357600080fd5b505af1158015610507573d6000803e3d6000fd5b50505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561063157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106199190611fbf565b73ffffffffffffffffffffffffffffffffffffffff16145b6106c95760405162461bcd60e51b815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161012b565b6106d28761103a565b15610806576106e1878761106c565b6107795760405162461bcd60e51b815260206004820152604760248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204b726f6d61204d696e7461626c65204552433230206c6f636160648201527f6c20746f6b656e00000000000000000000000000000000000000000000000000608482015260a40161012b565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b50505050610884565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260208181526040808320938a168352929052205461084290849061200b565b73ffffffffffffffffffffffffffffffffffffffff808916600081815260208181526040808320948c1683529390529190912091909155610884908585611113565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd878787876040516108fe949392919061206b565b60405180910390a450505050505050565b333b156109845760405162461bcd60e51b815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161012b565b6109c73333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506102ee92505050565b505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148015610aea57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad29190611fbf565b73ffffffffffffffffffffffffffffffffffffffff16145b610b825760405162461bcd60e51b815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161012b565b823414610bf75760405162461bcd60e51b815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161012b565b3073ffffffffffffffffffffffffffffffffffffffff851603610c825760405162461bcd60e51b815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161012b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d435760405162461bcd60e51b815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161012b565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d858585604051610da4939291906120a1565b60405180910390a36000610dc9855a86604051806020016040528060008152506111e7565b905080610e3e5760405162461bcd60e51b815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161012b565b505050505050565b610e8b87873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061120392505050565b50505050505050565b6060610ebf7f000000000000000000000000000000000000000000000000000000000000000061159e565b610ee87f000000000000000000000000000000000000000000000000000000000000000061159e565b610f117f000000000000000000000000000000000000000000000000000000000000000061159e565b604051602001610f23939291906120c4565b604051602081830303815290604052905090565b333b15610fac5760405162461bcd60e51b815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161012b565b610e3e86863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061120392505050565b6110343385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506102ee92505050565b50505050565b6000611066827f30a0c5a90000000000000000000000000000000000000000000000000000000061165c565b92915050565b60008273ffffffffffffffffffffffffffffffffffffffff1663033964be6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dd9190611fbf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614905092915050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109c79084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261167f565b600080600080845160208601878a8af19150505b949350505050565b61120c8761103a565b156113405761121b878761106c565b6112b35760405162461bcd60e51b815260206004820152604760248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204b726f6d61204d696e7461626c65204552433230206c6f636160648201527f6c20746f6b656e00000000000000000000000000000000000000000000000000608482015260a40161012b565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561132357600080fd5b505af1158015611337573d6000803e3d6000fd5b505050506113d0565b61136273ffffffffffffffffffffffffffffffffffffffff8816863086611774565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260208181526040808320938a168352929052205461139e90849061213a565b73ffffffffffffffffffffffffffffffffffffffff808916600090815260208181526040808320938b16835292905220555b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf87878660405161144893929190612152565b60405180910390a47f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633dbb202b7f0000000000000000000000000000000000000000000000000000000000000000630166a07a60e01b898b8a8a8a896040516024016114d096959493929190612187565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261156392918790600401611f7a565b600060405180830381600087803b15801561157d57600080fd5b505af1158015611591573d6000803e3d6000fd5b5050505050505050505050565b606060006115ab836117d2565b600101905060008167ffffffffffffffff8111156115cb576115cb6121e2565b6040519080825280601f01601f1916602001820160405280156115f5576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846115ff57509392505050565b6000611667836118b4565b801561167857506116788383611918565b9392505050565b60006116e1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166119e79092919063ffffffff16565b90508051600014806117025750808060200190518101906117029190612211565b6109c75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161012b565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526110349085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611165565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061181b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611847576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061186557662386f26fc10000830492506010015b6305f5e100831061187d576305f5e100830492506008015b612710831061189157612710830492506004015b606483106118a3576064830492506002015b600a83106110665760010192915050565b60006118e0827f01ffc9a700000000000000000000000000000000000000000000000000000000611918565b80156110665750611911827fffffffff00000000000000000000000000000000000000000000000000000000611918565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156119d0575060208210155b80156119dc5750600081115b979650505050505050565b60606111fb8484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051611a1b9190612233565b60006040518083038185875af1925050503d8060008114611a58576040519150601f19603f3d011682016040523d82523d6000602084013e611a5d565b606091505b50915091506119dc8783838760608315611ae5578251600003611ade5773ffffffffffffffffffffffffffffffffffffffff85163b611ade5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161012b565b50816111fb565b6111fb8383815115611afa5781518083602001fd5b8060405162461bcd60e51b815260040161012b9190611de6565b73ffffffffffffffffffffffffffffffffffffffff81168114611b3657600080fd5b50565b60008083601f840112611b4b57600080fd5b50813567ffffffffffffffff811115611b6357600080fd5b602083019150836020828501011115611b7b57600080fd5b9250929050565b600080600080600080600060c0888a031215611b9d57600080fd5b8735611ba881611b14565b96506020880135611bb881611b14565b95506040880135611bc881611b14565b94506060880135611bd881611b14565b93506080880135925060a088013567ffffffffffffffff811115611bfb57600080fd5b611c078a828b01611b39565b989b979a50959850939692959293505050565b803563ffffffff81168114611c2e57600080fd5b919050565b600080600060408486031215611c4857600080fd5b611c5184611c1a565b9250602084013567ffffffffffffffff811115611c6d57600080fd5b611c7986828701611b39565b9497909650939450505050565b600080600080600060808688031215611c9e57600080fd5b8535611ca981611b14565b94506020860135611cb981611b14565b935060408601359250606086013567ffffffffffffffff811115611cdc57600080fd5b611ce888828901611b39565b969995985093965092949392505050565b600080600080600080600060c0888a031215611d1457600080fd5b8735611d1f81611b14565b96506020880135611d2f81611b14565b95506040880135611d3f81611b14565b945060608801359350611d5460808901611c1a565b925060a088013567ffffffffffffffff811115611bfb57600080fd5b60005b83811015611d8b578181015183820152602001611d73565b838111156110345750506000910152565b60008151808452611db4816020860160208601611d70565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006116786020830184611d9c565b60008060008060008060a08789031215611e1257600080fd5b8635611e1d81611b14565b95506020870135611e2d81611b14565b945060408701359350611e4260608801611c1a565b9250608087013567ffffffffffffffff811115611e5e57600080fd5b611e6a89828a01611b39565b979a9699509497509295939492505050565b60008060408385031215611e8f57600080fd5b8235611e9a81611b14565b91506020830135611eaa81611b14565b809150509250929050565b60008060008060608587031215611ecb57600080fd5b8435611ed681611b14565b9350611ee460208601611c1a565b9250604085013567ffffffffffffffff811115611f0057600080fd5b611f0c87828801611b39565b95989497509550505050565b8281526040602082015260006111fb6040830184611d9c565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152611f706080830184611d9c565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000611fa96060830185611d9c565b905063ffffffff83166040830152949350505050565b600060208284031215611fd157600080fd5b815161167881611b14565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561201d5761201d611fdc565b500390565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000611f70606083018486612022565b8381526040602082015260006120bb604083018486612022565b95945050505050565b600084516120d6818460208901611d70565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612112816001850160208a01611d70565b6001920191820152835161212d816002840160208801611d70565b0160020195945050505050565b6000821982111561214d5761214d611fdc565b500190565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006120bb6060830184611d9c565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a08301526121d660c0830184611d9c565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561222357600080fd5b8151801515811461167857600080fd5b60008251612245818460208701611d70565b919091019291505056fea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(L1StandardBridgeStorageLayoutJSON), L1StandardBridgeStorageLayout); err != nil { + panic(err) + } + + layouts["L1StandardBridge"] = L1StandardBridgeStorageLayout + deployedBytecodes["L1StandardBridge"] = L1StandardBridgeDeployedBin +} diff --git a/kroma-bindings/bindings/l2crossdomainmessenger.go b/kroma-bindings/bindings/l2crossdomainmessenger.go new file mode 100644 index 000000000..ae34bfe48 --- /dev/null +++ b/kroma-bindings/bindings/l2crossdomainmessenger.go @@ -0,0 +1,1609 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// L2CrossDomainMessengerMetaData contains all meta data concerning the L2CrossDomainMessenger contract. +var L2CrossDomainMessengerMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1CrossDomainMessenger\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"FailedRelayedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"RelayedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"messageNonce\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"}],\"name\":\"SentMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSAGE_VERSION\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_MESSENGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_CALL_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_RESERVED_GAS\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"}],\"name\":\"baseGas\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"failedMessages\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"relayMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"}],\"name\":\"sendMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"successfulMessages\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"xDomainMessageSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x6101006040523480156200001257600080fd5b5060405162001de138038062001de1833981016040819052620000359162000226565b6001600160a01b038116608052600160a052600060c081905260e0526200005b62000062565b5062000258565b600054610100900460ff1615808015620000835750600054600160ff909116105b80620000b35750620000a0306200019460201b620011251760201c565b158015620000b3575060005460ff166001145b6200011c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000140576000805461ff0019166101001790555b6200014a620001a3565b801562000191576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6001600160a01b03163b151590565b600054610100900460ff16620002105760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000113565b606680546001600160a01b03191661dead179055565b6000602082840312156200023957600080fd5b81516001600160a01b03811681146200025157600080fd5b9392505050565b60805160a05160c05160e051611b41620002a06000396000610607015260006105de015260006105b50152600081816102cd015281816103c50152610a7c0152611b416000f3fe6080604052600436106101445760003560e01c80636e296e45116100c0578063a4e7f8bd11610074578063b28ade2511610059578063b28ade251461034f578063d764ad0b1461036f578063ecc704281461038257600080fd5b8063a4e7f8bd146102ef578063b1b1b2091461031f57600080fd5b806383a74074116100a557806383a74074146102a45780638cbeeef2146101e35780639fce812c146102bb57600080fd5b80636e296e45146102555780638129fc1c1461028f57600080fd5b80633f827a5a1161011757806354fd4d50116100fc57806354fd4d50146101f95780635644cfdf1461021b5780635c975abb1461023157600080fd5b80633f827a5a146101bb5780634c1d6a69146101e357600080fd5b8063028f85f7146101495780630c5684981461017c5780632828d7e8146101915780633dbb202b146101a6575b600080fd5b34801561015557600080fd5b5061015e601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561018857600080fd5b5061015e603f81565b34801561019d57600080fd5b5061015e604081565b6101b96101b4366004611609565b6103c0565b005b3480156101c757600080fd5b506101d0600081565b60405161ffff9091168152602001610173565b3480156101ef57600080fd5b5061015e619c4081565b34801561020557600080fd5b5061020e6105ae565b60405161017391906116e8565b34801561022757600080fd5b5061015e61138881565b34801561023d57600080fd5b5060335460ff165b6040519015158152602001610173565b34801561026157600080fd5b5061026a610651565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610173565b34801561029b57600080fd5b506101b961073d565b3480156102b057600080fd5b5061015e62030d4081565b3480156102c757600080fd5b5061026a7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102fb57600080fd5b5061024561030a366004611702565b60686020526000908152604090205460ff1681565b34801561032b57600080fd5b5061024561033a366004611702565b60656020526000908152604090205460ff1681565b34801561035b57600080fd5b5061015e61036a36600461171b565b6108cf565b6101b961037d36600461176f565b61093d565b34801561038e57600080fd5b506067547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16604051908152602001610173565b6104d87f00000000000000000000000000000000000000000000000000000000000000006103ef8585856108cf565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061043a6067547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b338a34898c8c604051602401610456979695949392919061183a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611141565b3373ffffffffffffffffffffffffffffffffffffffff85167fdd28cef75ff18fb538e43317144469f339702f973eace2bc808f2acc37db310e34868661053d6067547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b8760405161054f959493929190611899565b60405180910390a35050606780547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60606105d97f00000000000000000000000000000000000000000000000000000000000000006111cf565b6106027f00000000000000000000000000000000000000000000000000000000000000006111cf565b61062b7f00000000000000000000000000000000000000000000000000000000000000006111cf565b60405160200161063d939291906118d1565b604051602081830303815290604052905090565b60665460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610720576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084015b60405180910390fd5b5060665473ffffffffffffffffffffffffffffffffffffffff1690565b600054610100900460ff161580801561075d5750600054600160ff909116105b806107775750303b158015610777575060005460ff166001145b610803576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610717565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561086157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61086961128d565b80156108cc57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6000611388619c4080603f6108eb604063ffffffff8816611976565b6108f591906119a6565b610900601088611976565b61090d9062030d406119f4565b61091791906119f4565b61092191906119f4565b61092b91906119f4565b61093591906119f4565b949350505050565b60f087901c600181106109f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206d6573736167657320697320737570706f7274656420617420746860648201527f69732074696d6500000000000000000000000000000000000000000000000000608482015260a401610717565b6000610a3e898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061135292505050565b905073ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef330181167f000000000000000000000000000000000000000000000000000000000000000090911603610ad657853414610ab257610ab2611a20565b60008181526068602052604090205460ff1615610ad157610ad1611a20565b610c28565b3415610b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610717565b60008181526068602052604090205460ff16610c28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610717565b610c3187611375565b15610ce4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610717565b60008181526065602052604090205460ff1615610d83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610717565b610da485610d95611388619c406119f4565b67ffffffffffffffff166113ca565b1580610dca575060665473ffffffffffffffffffffffffffffffffffffffff1661dead14155b15610ee35760008181526068602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201610edc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610717565b505061111c565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a161790556000610f7488619c405a610f379190611a4f565b8988888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113e892505050565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801561100b5760008281526065602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2611118565b60008281526068602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610717565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6040517fc2b3e5ac0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000039063c2b3e5ac90849061119790889088908790600401611a66565b6000604051808303818588803b1580156111b057600080fd5b505af11580156111c4573d6000803e3d6000fd5b505050505050505050565b606060006111dc83611402565b600101905060008167ffffffffffffffff8111156111fc576111fc611aae565b6040519080825280601f01601f191660200182016040528015611226576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461123057509392505050565b600054610100900460ff16611324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610717565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055565b60006113628787878787876114e4565b8051906020012090509695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82163014806113c4575073ffffffffffffffffffffffffffffffffffffffff8216734200000000000000000000000000000000000003145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061144b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611477576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061149557662386f26fc10000830492506010015b6305f5e10083106114ad576305f5e100830492506008015b61271083106114c157612710830492506004015b606483106114d3576064830492506002015b600a83106113c45760010192915050565b606086868686868660405160240161150196959493929190611add565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146115a757600080fd5b919050565b60008083601f8401126115be57600080fd5b50813567ffffffffffffffff8111156115d657600080fd5b6020830191508360208285010111156115ee57600080fd5b9250929050565b803563ffffffff811681146115a757600080fd5b6000806000806060858703121561161f57600080fd5b61162885611583565b9350602085013567ffffffffffffffff81111561164457600080fd5b611650878288016115ac565b90945092506116639050604086016115f5565b905092959194509250565b60005b83811015611689578181015183820152602001611671565b83811115611698576000848401525b50505050565b600081518084526116b681602086016020860161166e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006116fb602083018461169e565b9392505050565b60006020828403121561171457600080fd5b5035919050565b60008060006040848603121561173057600080fd5b833567ffffffffffffffff81111561174757600080fd5b611753868287016115ac565b90945092506117669050602085016115f5565b90509250925092565b600080600080600080600060c0888a03121561178a57600080fd5b8735965061179a60208901611583565b95506117a860408901611583565b9450606088013593506080880135925060a088013567ffffffffffffffff8111156117d257600080fd5b6117de8a828b016115ac565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a083015261188c60c0830184866117f1565b9998505050505050505050565b8581526080602082015260006118b36080830186886117f1565b905083604083015263ffffffff831660608301529695505050505050565b600084516118e381846020890161166e565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161191f816001850160208a0161166e565b6001920191820152835161193a81600284016020880161166e565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168183048111821515161561199d5761199d611947565b02949350505050565b600067ffffffffffffffff808416806119e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611a1757611a17611947565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611a6157611a61611947565b500390565b73ffffffffffffffffffffffffffffffffffffffff8416815267ffffffffffffffff83166020820152606060408201526000611aa5606083018461169e565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611b2860c083018461169e565b9897505050505050505056fea164736f6c634300080f000a", +} + +// L2CrossDomainMessengerABI is the input ABI used to generate the binding from. +// Deprecated: Use L2CrossDomainMessengerMetaData.ABI instead. +var L2CrossDomainMessengerABI = L2CrossDomainMessengerMetaData.ABI + +// L2CrossDomainMessengerBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use L2CrossDomainMessengerMetaData.Bin instead. +var L2CrossDomainMessengerBin = L2CrossDomainMessengerMetaData.Bin + +// DeployL2CrossDomainMessenger deploys a new Ethereum contract, binding an instance of L2CrossDomainMessenger to it. +func DeployL2CrossDomainMessenger(auth *bind.TransactOpts, backend bind.ContractBackend, _l1CrossDomainMessenger common.Address) (common.Address, *types.Transaction, *L2CrossDomainMessenger, error) { + parsed, err := L2CrossDomainMessengerMetaData.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(L2CrossDomainMessengerBin), backend, _l1CrossDomainMessenger) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &L2CrossDomainMessenger{L2CrossDomainMessengerCaller: L2CrossDomainMessengerCaller{contract: contract}, L2CrossDomainMessengerTransactor: L2CrossDomainMessengerTransactor{contract: contract}, L2CrossDomainMessengerFilterer: L2CrossDomainMessengerFilterer{contract: contract}}, nil +} + +// L2CrossDomainMessenger is an auto generated Go binding around an Ethereum contract. +type L2CrossDomainMessenger struct { + L2CrossDomainMessengerCaller // Read-only binding to the contract + L2CrossDomainMessengerTransactor // Write-only binding to the contract + L2CrossDomainMessengerFilterer // Log filterer for contract events +} + +// L2CrossDomainMessengerCaller is an auto generated read-only Go binding around an Ethereum contract. +type L2CrossDomainMessengerCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L2CrossDomainMessengerTransactor is an auto generated write-only Go binding around an Ethereum contract. +type L2CrossDomainMessengerTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L2CrossDomainMessengerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type L2CrossDomainMessengerFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L2CrossDomainMessengerSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type L2CrossDomainMessengerSession struct { + Contract *L2CrossDomainMessenger // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// L2CrossDomainMessengerCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type L2CrossDomainMessengerCallerSession struct { + Contract *L2CrossDomainMessengerCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// L2CrossDomainMessengerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type L2CrossDomainMessengerTransactorSession struct { + Contract *L2CrossDomainMessengerTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// L2CrossDomainMessengerRaw is an auto generated low-level Go binding around an Ethereum contract. +type L2CrossDomainMessengerRaw struct { + Contract *L2CrossDomainMessenger // Generic contract binding to access the raw methods on +} + +// L2CrossDomainMessengerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type L2CrossDomainMessengerCallerRaw struct { + Contract *L2CrossDomainMessengerCaller // Generic read-only contract binding to access the raw methods on +} + +// L2CrossDomainMessengerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type L2CrossDomainMessengerTransactorRaw struct { + Contract *L2CrossDomainMessengerTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewL2CrossDomainMessenger creates a new instance of L2CrossDomainMessenger, bound to a specific deployed contract. +func NewL2CrossDomainMessenger(address common.Address, backend bind.ContractBackend) (*L2CrossDomainMessenger, error) { + contract, err := bindL2CrossDomainMessenger(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &L2CrossDomainMessenger{L2CrossDomainMessengerCaller: L2CrossDomainMessengerCaller{contract: contract}, L2CrossDomainMessengerTransactor: L2CrossDomainMessengerTransactor{contract: contract}, L2CrossDomainMessengerFilterer: L2CrossDomainMessengerFilterer{contract: contract}}, nil +} + +// NewL2CrossDomainMessengerCaller creates a new read-only instance of L2CrossDomainMessenger, bound to a specific deployed contract. +func NewL2CrossDomainMessengerCaller(address common.Address, caller bind.ContractCaller) (*L2CrossDomainMessengerCaller, error) { + contract, err := bindL2CrossDomainMessenger(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &L2CrossDomainMessengerCaller{contract: contract}, nil +} + +// NewL2CrossDomainMessengerTransactor creates a new write-only instance of L2CrossDomainMessenger, bound to a specific deployed contract. +func NewL2CrossDomainMessengerTransactor(address common.Address, transactor bind.ContractTransactor) (*L2CrossDomainMessengerTransactor, error) { + contract, err := bindL2CrossDomainMessenger(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &L2CrossDomainMessengerTransactor{contract: contract}, nil +} + +// NewL2CrossDomainMessengerFilterer creates a new log filterer instance of L2CrossDomainMessenger, bound to a specific deployed contract. +func NewL2CrossDomainMessengerFilterer(address common.Address, filterer bind.ContractFilterer) (*L2CrossDomainMessengerFilterer, error) { + contract, err := bindL2CrossDomainMessenger(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &L2CrossDomainMessengerFilterer{contract: contract}, nil +} + +// bindL2CrossDomainMessenger binds a generic wrapper to an already deployed contract. +func bindL2CrossDomainMessenger(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := L2CrossDomainMessengerMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_L2CrossDomainMessenger *L2CrossDomainMessengerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _L2CrossDomainMessenger.Contract.L2CrossDomainMessengerCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_L2CrossDomainMessenger *L2CrossDomainMessengerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L2CrossDomainMessenger.Contract.L2CrossDomainMessengerTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_L2CrossDomainMessenger *L2CrossDomainMessengerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _L2CrossDomainMessenger.Contract.L2CrossDomainMessengerTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _L2CrossDomainMessenger.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_L2CrossDomainMessenger *L2CrossDomainMessengerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L2CrossDomainMessenger.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_L2CrossDomainMessenger *L2CrossDomainMessengerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _L2CrossDomainMessenger.Contract.contract.Transact(opts, method, params...) +} + +// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. +// +// Solidity: function MESSAGE_VERSION() view returns(uint16) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) MESSAGEVERSION(opts *bind.CallOpts) (uint16, error) { + var out []interface{} + err := _L2CrossDomainMessenger.contract.Call(opts, &out, "MESSAGE_VERSION") + + if err != nil { + return *new(uint16), err + } + + out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) + + return out0, err + +} + +// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. +// +// Solidity: function MESSAGE_VERSION() view returns(uint16) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) MESSAGEVERSION() (uint16, error) { + return _L2CrossDomainMessenger.Contract.MESSAGEVERSION(&_L2CrossDomainMessenger.CallOpts) +} + +// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. +// +// Solidity: function MESSAGE_VERSION() view returns(uint16) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) MESSAGEVERSION() (uint16, error) { + return _L2CrossDomainMessenger.Contract.MESSAGEVERSION(&_L2CrossDomainMessenger.CallOpts) +} + +// MINGASCALLDATAOVERHEAD is a free data retrieval call binding the contract method 0x028f85f7. +// +// Solidity: function MIN_GAS_CALLDATA_OVERHEAD() view returns(uint64) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) MINGASCALLDATAOVERHEAD(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _L2CrossDomainMessenger.contract.Call(opts, &out, "MIN_GAS_CALLDATA_OVERHEAD") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// MINGASCALLDATAOVERHEAD is a free data retrieval call binding the contract method 0x028f85f7. +// +// Solidity: function MIN_GAS_CALLDATA_OVERHEAD() view returns(uint64) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) MINGASCALLDATAOVERHEAD() (uint64, error) { + return _L2CrossDomainMessenger.Contract.MINGASCALLDATAOVERHEAD(&_L2CrossDomainMessenger.CallOpts) +} + +// MINGASCALLDATAOVERHEAD is a free data retrieval call binding the contract method 0x028f85f7. +// +// Solidity: function MIN_GAS_CALLDATA_OVERHEAD() view returns(uint64) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) MINGASCALLDATAOVERHEAD() (uint64, error) { + return _L2CrossDomainMessenger.Contract.MINGASCALLDATAOVERHEAD(&_L2CrossDomainMessenger.CallOpts) +} + +// MINGASDYNAMICOVERHEADDENOMINATOR is a free data retrieval call binding the contract method 0x0c568498. +// +// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR() view returns(uint64) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) MINGASDYNAMICOVERHEADDENOMINATOR(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _L2CrossDomainMessenger.contract.Call(opts, &out, "MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// MINGASDYNAMICOVERHEADDENOMINATOR is a free data retrieval call binding the contract method 0x0c568498. +// +// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR() view returns(uint64) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) MINGASDYNAMICOVERHEADDENOMINATOR() (uint64, error) { + return _L2CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADDENOMINATOR(&_L2CrossDomainMessenger.CallOpts) +} + +// MINGASDYNAMICOVERHEADDENOMINATOR is a free data retrieval call binding the contract method 0x0c568498. +// +// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR() view returns(uint64) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) MINGASDYNAMICOVERHEADDENOMINATOR() (uint64, error) { + return _L2CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADDENOMINATOR(&_L2CrossDomainMessenger.CallOpts) +} + +// MINGASDYNAMICOVERHEADNUMERATOR is a free data retrieval call binding the contract method 0x2828d7e8. +// +// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR() view returns(uint64) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) MINGASDYNAMICOVERHEADNUMERATOR(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _L2CrossDomainMessenger.contract.Call(opts, &out, "MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// MINGASDYNAMICOVERHEADNUMERATOR is a free data retrieval call binding the contract method 0x2828d7e8. +// +// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR() view returns(uint64) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) MINGASDYNAMICOVERHEADNUMERATOR() (uint64, error) { + return _L2CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADNUMERATOR(&_L2CrossDomainMessenger.CallOpts) +} + +// MINGASDYNAMICOVERHEADNUMERATOR is a free data retrieval call binding the contract method 0x2828d7e8. +// +// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR() view returns(uint64) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) MINGASDYNAMICOVERHEADNUMERATOR() (uint64, error) { + return _L2CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADNUMERATOR(&_L2CrossDomainMessenger.CallOpts) +} + +// OTHERMESSENGER is a free data retrieval call binding the contract method 0x9fce812c. +// +// Solidity: function OTHER_MESSENGER() view returns(address) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) OTHERMESSENGER(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L2CrossDomainMessenger.contract.Call(opts, &out, "OTHER_MESSENGER") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OTHERMESSENGER is a free data retrieval call binding the contract method 0x9fce812c. +// +// Solidity: function OTHER_MESSENGER() view returns(address) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) OTHERMESSENGER() (common.Address, error) { + return _L2CrossDomainMessenger.Contract.OTHERMESSENGER(&_L2CrossDomainMessenger.CallOpts) +} + +// OTHERMESSENGER is a free data retrieval call binding the contract method 0x9fce812c. +// +// Solidity: function OTHER_MESSENGER() view returns(address) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) OTHERMESSENGER() (common.Address, error) { + return _L2CrossDomainMessenger.Contract.OTHERMESSENGER(&_L2CrossDomainMessenger.CallOpts) +} + +// RELAYCALLOVERHEAD is a free data retrieval call binding the contract method 0x4c1d6a69. +// +// Solidity: function RELAY_CALL_OVERHEAD() view returns(uint64) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) RELAYCALLOVERHEAD(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _L2CrossDomainMessenger.contract.Call(opts, &out, "RELAY_CALL_OVERHEAD") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// RELAYCALLOVERHEAD is a free data retrieval call binding the contract method 0x4c1d6a69. +// +// Solidity: function RELAY_CALL_OVERHEAD() view returns(uint64) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) RELAYCALLOVERHEAD() (uint64, error) { + return _L2CrossDomainMessenger.Contract.RELAYCALLOVERHEAD(&_L2CrossDomainMessenger.CallOpts) +} + +// RELAYCALLOVERHEAD is a free data retrieval call binding the contract method 0x4c1d6a69. +// +// Solidity: function RELAY_CALL_OVERHEAD() view returns(uint64) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) RELAYCALLOVERHEAD() (uint64, error) { + return _L2CrossDomainMessenger.Contract.RELAYCALLOVERHEAD(&_L2CrossDomainMessenger.CallOpts) +} + +// RELAYCONSTANTOVERHEAD is a free data retrieval call binding the contract method 0x83a74074. +// +// Solidity: function RELAY_CONSTANT_OVERHEAD() view returns(uint64) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) RELAYCONSTANTOVERHEAD(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _L2CrossDomainMessenger.contract.Call(opts, &out, "RELAY_CONSTANT_OVERHEAD") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// RELAYCONSTANTOVERHEAD is a free data retrieval call binding the contract method 0x83a74074. +// +// Solidity: function RELAY_CONSTANT_OVERHEAD() view returns(uint64) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) RELAYCONSTANTOVERHEAD() (uint64, error) { + return _L2CrossDomainMessenger.Contract.RELAYCONSTANTOVERHEAD(&_L2CrossDomainMessenger.CallOpts) +} + +// RELAYCONSTANTOVERHEAD is a free data retrieval call binding the contract method 0x83a74074. +// +// Solidity: function RELAY_CONSTANT_OVERHEAD() view returns(uint64) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) RELAYCONSTANTOVERHEAD() (uint64, error) { + return _L2CrossDomainMessenger.Contract.RELAYCONSTANTOVERHEAD(&_L2CrossDomainMessenger.CallOpts) +} + +// RELAYGASCHECKBUFFER is a free data retrieval call binding the contract method 0x5644cfdf. +// +// Solidity: function RELAY_GAS_CHECK_BUFFER() view returns(uint64) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) RELAYGASCHECKBUFFER(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _L2CrossDomainMessenger.contract.Call(opts, &out, "RELAY_GAS_CHECK_BUFFER") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// RELAYGASCHECKBUFFER is a free data retrieval call binding the contract method 0x5644cfdf. +// +// Solidity: function RELAY_GAS_CHECK_BUFFER() view returns(uint64) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) RELAYGASCHECKBUFFER() (uint64, error) { + return _L2CrossDomainMessenger.Contract.RELAYGASCHECKBUFFER(&_L2CrossDomainMessenger.CallOpts) +} + +// RELAYGASCHECKBUFFER is a free data retrieval call binding the contract method 0x5644cfdf. +// +// Solidity: function RELAY_GAS_CHECK_BUFFER() view returns(uint64) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) RELAYGASCHECKBUFFER() (uint64, error) { + return _L2CrossDomainMessenger.Contract.RELAYGASCHECKBUFFER(&_L2CrossDomainMessenger.CallOpts) +} + +// RELAYRESERVEDGAS is a free data retrieval call binding the contract method 0x8cbeeef2. +// +// Solidity: function RELAY_RESERVED_GAS() view returns(uint64) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) RELAYRESERVEDGAS(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _L2CrossDomainMessenger.contract.Call(opts, &out, "RELAY_RESERVED_GAS") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// RELAYRESERVEDGAS is a free data retrieval call binding the contract method 0x8cbeeef2. +// +// Solidity: function RELAY_RESERVED_GAS() view returns(uint64) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) RELAYRESERVEDGAS() (uint64, error) { + return _L2CrossDomainMessenger.Contract.RELAYRESERVEDGAS(&_L2CrossDomainMessenger.CallOpts) +} + +// RELAYRESERVEDGAS is a free data retrieval call binding the contract method 0x8cbeeef2. +// +// Solidity: function RELAY_RESERVED_GAS() view returns(uint64) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) RELAYRESERVEDGAS() (uint64, error) { + return _L2CrossDomainMessenger.Contract.RELAYRESERVEDGAS(&_L2CrossDomainMessenger.CallOpts) +} + +// BaseGas is a free data retrieval call binding the contract method 0xb28ade25. +// +// Solidity: function baseGas(bytes _message, uint32 _minGasLimit) pure returns(uint64) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) BaseGas(opts *bind.CallOpts, _message []byte, _minGasLimit uint32) (uint64, error) { + var out []interface{} + err := _L2CrossDomainMessenger.contract.Call(opts, &out, "baseGas", _message, _minGasLimit) + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// BaseGas is a free data retrieval call binding the contract method 0xb28ade25. +// +// Solidity: function baseGas(bytes _message, uint32 _minGasLimit) pure returns(uint64) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) BaseGas(_message []byte, _minGasLimit uint32) (uint64, error) { + return _L2CrossDomainMessenger.Contract.BaseGas(&_L2CrossDomainMessenger.CallOpts, _message, _minGasLimit) +} + +// BaseGas is a free data retrieval call binding the contract method 0xb28ade25. +// +// Solidity: function baseGas(bytes _message, uint32 _minGasLimit) pure returns(uint64) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) BaseGas(_message []byte, _minGasLimit uint32) (uint64, error) { + return _L2CrossDomainMessenger.Contract.BaseGas(&_L2CrossDomainMessenger.CallOpts, _message, _minGasLimit) +} + +// FailedMessages is a free data retrieval call binding the contract method 0xa4e7f8bd. +// +// Solidity: function failedMessages(bytes32 ) view returns(bool) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) FailedMessages(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { + var out []interface{} + err := _L2CrossDomainMessenger.contract.Call(opts, &out, "failedMessages", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// FailedMessages is a free data retrieval call binding the contract method 0xa4e7f8bd. +// +// Solidity: function failedMessages(bytes32 ) view returns(bool) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) FailedMessages(arg0 [32]byte) (bool, error) { + return _L2CrossDomainMessenger.Contract.FailedMessages(&_L2CrossDomainMessenger.CallOpts, arg0) +} + +// FailedMessages is a free data retrieval call binding the contract method 0xa4e7f8bd. +// +// Solidity: function failedMessages(bytes32 ) view returns(bool) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) FailedMessages(arg0 [32]byte) (bool, error) { + return _L2CrossDomainMessenger.Contract.FailedMessages(&_L2CrossDomainMessenger.CallOpts, arg0) +} + +// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. +// +// Solidity: function messageNonce() view returns(uint256) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) MessageNonce(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _L2CrossDomainMessenger.contract.Call(opts, &out, "messageNonce") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. +// +// Solidity: function messageNonce() view returns(uint256) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) MessageNonce() (*big.Int, error) { + return _L2CrossDomainMessenger.Contract.MessageNonce(&_L2CrossDomainMessenger.CallOpts) +} + +// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. +// +// Solidity: function messageNonce() view returns(uint256) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) MessageNonce() (*big.Int, error) { + return _L2CrossDomainMessenger.Contract.MessageNonce(&_L2CrossDomainMessenger.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) Paused(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _L2CrossDomainMessenger.contract.Call(opts, &out, "paused") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) Paused() (bool, error) { + return _L2CrossDomainMessenger.Contract.Paused(&_L2CrossDomainMessenger.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) Paused() (bool, error) { + return _L2CrossDomainMessenger.Contract.Paused(&_L2CrossDomainMessenger.CallOpts) +} + +// SuccessfulMessages is a free data retrieval call binding the contract method 0xb1b1b209. +// +// Solidity: function successfulMessages(bytes32 ) view returns(bool) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) SuccessfulMessages(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { + var out []interface{} + err := _L2CrossDomainMessenger.contract.Call(opts, &out, "successfulMessages", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// SuccessfulMessages is a free data retrieval call binding the contract method 0xb1b1b209. +// +// Solidity: function successfulMessages(bytes32 ) view returns(bool) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) SuccessfulMessages(arg0 [32]byte) (bool, error) { + return _L2CrossDomainMessenger.Contract.SuccessfulMessages(&_L2CrossDomainMessenger.CallOpts, arg0) +} + +// SuccessfulMessages is a free data retrieval call binding the contract method 0xb1b1b209. +// +// Solidity: function successfulMessages(bytes32 ) view returns(bool) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) SuccessfulMessages(arg0 [32]byte) (bool, error) { + return _L2CrossDomainMessenger.Contract.SuccessfulMessages(&_L2CrossDomainMessenger.CallOpts, arg0) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _L2CrossDomainMessenger.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) Version() (string, error) { + return _L2CrossDomainMessenger.Contract.Version(&_L2CrossDomainMessenger.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) Version() (string, error) { + return _L2CrossDomainMessenger.Contract.Version(&_L2CrossDomainMessenger.CallOpts) +} + +// XDomainMessageSender is a free data retrieval call binding the contract method 0x6e296e45. +// +// Solidity: function xDomainMessageSender() view returns(address) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) XDomainMessageSender(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L2CrossDomainMessenger.contract.Call(opts, &out, "xDomainMessageSender") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// XDomainMessageSender is a free data retrieval call binding the contract method 0x6e296e45. +// +// Solidity: function xDomainMessageSender() view returns(address) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) XDomainMessageSender() (common.Address, error) { + return _L2CrossDomainMessenger.Contract.XDomainMessageSender(&_L2CrossDomainMessenger.CallOpts) +} + +// XDomainMessageSender is a free data retrieval call binding the contract method 0x6e296e45. +// +// Solidity: function xDomainMessageSender() view returns(address) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) XDomainMessageSender() (common.Address, error) { + return _L2CrossDomainMessenger.Contract.XDomainMessageSender(&_L2CrossDomainMessenger.CallOpts) +} + +// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c. +// +// Solidity: function initialize() returns() +func (_L2CrossDomainMessenger *L2CrossDomainMessengerTransactor) Initialize(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L2CrossDomainMessenger.contract.Transact(opts, "initialize") +} + +// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c. +// +// Solidity: function initialize() returns() +func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) Initialize() (*types.Transaction, error) { + return _L2CrossDomainMessenger.Contract.Initialize(&_L2CrossDomainMessenger.TransactOpts) +} + +// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c. +// +// Solidity: function initialize() returns() +func (_L2CrossDomainMessenger *L2CrossDomainMessengerTransactorSession) Initialize() (*types.Transaction, error) { + return _L2CrossDomainMessenger.Contract.Initialize(&_L2CrossDomainMessenger.TransactOpts) +} + +// RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. +// +// Solidity: function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes _message) payable returns() +func (_L2CrossDomainMessenger *L2CrossDomainMessengerTransactor) RelayMessage(opts *bind.TransactOpts, _nonce *big.Int, _sender common.Address, _target common.Address, _value *big.Int, _minGasLimit *big.Int, _message []byte) (*types.Transaction, error) { + return _L2CrossDomainMessenger.contract.Transact(opts, "relayMessage", _nonce, _sender, _target, _value, _minGasLimit, _message) +} + +// RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. +// +// Solidity: function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes _message) payable returns() +func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) RelayMessage(_nonce *big.Int, _sender common.Address, _target common.Address, _value *big.Int, _minGasLimit *big.Int, _message []byte) (*types.Transaction, error) { + return _L2CrossDomainMessenger.Contract.RelayMessage(&_L2CrossDomainMessenger.TransactOpts, _nonce, _sender, _target, _value, _minGasLimit, _message) +} + +// RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. +// +// Solidity: function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes _message) payable returns() +func (_L2CrossDomainMessenger *L2CrossDomainMessengerTransactorSession) RelayMessage(_nonce *big.Int, _sender common.Address, _target common.Address, _value *big.Int, _minGasLimit *big.Int, _message []byte) (*types.Transaction, error) { + return _L2CrossDomainMessenger.Contract.RelayMessage(&_L2CrossDomainMessenger.TransactOpts, _nonce, _sender, _target, _value, _minGasLimit, _message) +} + +// SendMessage is a paid mutator transaction binding the contract method 0x3dbb202b. +// +// Solidity: function sendMessage(address _target, bytes _message, uint32 _minGasLimit) payable returns() +func (_L2CrossDomainMessenger *L2CrossDomainMessengerTransactor) SendMessage(opts *bind.TransactOpts, _target common.Address, _message []byte, _minGasLimit uint32) (*types.Transaction, error) { + return _L2CrossDomainMessenger.contract.Transact(opts, "sendMessage", _target, _message, _minGasLimit) +} + +// SendMessage is a paid mutator transaction binding the contract method 0x3dbb202b. +// +// Solidity: function sendMessage(address _target, bytes _message, uint32 _minGasLimit) payable returns() +func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) SendMessage(_target common.Address, _message []byte, _minGasLimit uint32) (*types.Transaction, error) { + return _L2CrossDomainMessenger.Contract.SendMessage(&_L2CrossDomainMessenger.TransactOpts, _target, _message, _minGasLimit) +} + +// SendMessage is a paid mutator transaction binding the contract method 0x3dbb202b. +// +// Solidity: function sendMessage(address _target, bytes _message, uint32 _minGasLimit) payable returns() +func (_L2CrossDomainMessenger *L2CrossDomainMessengerTransactorSession) SendMessage(_target common.Address, _message []byte, _minGasLimit uint32) (*types.Transaction, error) { + return _L2CrossDomainMessenger.Contract.SendMessage(&_L2CrossDomainMessenger.TransactOpts, _target, _message, _minGasLimit) +} + +// L2CrossDomainMessengerFailedRelayedMessageIterator is returned from FilterFailedRelayedMessage and is used to iterate over the raw logs and unpacked data for FailedRelayedMessage events raised by the L2CrossDomainMessenger contract. +type L2CrossDomainMessengerFailedRelayedMessageIterator struct { + Event *L2CrossDomainMessengerFailedRelayedMessage // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L2CrossDomainMessengerFailedRelayedMessageIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L2CrossDomainMessengerFailedRelayedMessage) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L2CrossDomainMessengerFailedRelayedMessage) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L2CrossDomainMessengerFailedRelayedMessageIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L2CrossDomainMessengerFailedRelayedMessageIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L2CrossDomainMessengerFailedRelayedMessage represents a FailedRelayedMessage event raised by the L2CrossDomainMessenger contract. +type L2CrossDomainMessengerFailedRelayedMessage struct { + MsgHash [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterFailedRelayedMessage is a free log retrieval operation binding the contract event 0x99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f. +// +// Solidity: event FailedRelayedMessage(bytes32 indexed msgHash) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) FilterFailedRelayedMessage(opts *bind.FilterOpts, msgHash [][32]byte) (*L2CrossDomainMessengerFailedRelayedMessageIterator, error) { + + var msgHashRule []interface{} + for _, msgHashItem := range msgHash { + msgHashRule = append(msgHashRule, msgHashItem) + } + + logs, sub, err := _L2CrossDomainMessenger.contract.FilterLogs(opts, "FailedRelayedMessage", msgHashRule) + if err != nil { + return nil, err + } + return &L2CrossDomainMessengerFailedRelayedMessageIterator{contract: _L2CrossDomainMessenger.contract, event: "FailedRelayedMessage", logs: logs, sub: sub}, nil +} + +// WatchFailedRelayedMessage is a free log subscription operation binding the contract event 0x99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f. +// +// Solidity: event FailedRelayedMessage(bytes32 indexed msgHash) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) WatchFailedRelayedMessage(opts *bind.WatchOpts, sink chan<- *L2CrossDomainMessengerFailedRelayedMessage, msgHash [][32]byte) (event.Subscription, error) { + + var msgHashRule []interface{} + for _, msgHashItem := range msgHash { + msgHashRule = append(msgHashRule, msgHashItem) + } + + logs, sub, err := _L2CrossDomainMessenger.contract.WatchLogs(opts, "FailedRelayedMessage", msgHashRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L2CrossDomainMessengerFailedRelayedMessage) + if err := _L2CrossDomainMessenger.contract.UnpackLog(event, "FailedRelayedMessage", 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 +} + +// ParseFailedRelayedMessage is a log parse operation binding the contract event 0x99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f. +// +// Solidity: event FailedRelayedMessage(bytes32 indexed msgHash) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) ParseFailedRelayedMessage(log types.Log) (*L2CrossDomainMessengerFailedRelayedMessage, error) { + event := new(L2CrossDomainMessengerFailedRelayedMessage) + if err := _L2CrossDomainMessenger.contract.UnpackLog(event, "FailedRelayedMessage", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// L2CrossDomainMessengerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the L2CrossDomainMessenger contract. +type L2CrossDomainMessengerInitializedIterator struct { + Event *L2CrossDomainMessengerInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L2CrossDomainMessengerInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L2CrossDomainMessengerInitialized) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L2CrossDomainMessengerInitialized) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L2CrossDomainMessengerInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L2CrossDomainMessengerInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L2CrossDomainMessengerInitialized represents a Initialized event raised by the L2CrossDomainMessenger contract. +type L2CrossDomainMessengerInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) FilterInitialized(opts *bind.FilterOpts) (*L2CrossDomainMessengerInitializedIterator, error) { + + logs, sub, err := _L2CrossDomainMessenger.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &L2CrossDomainMessengerInitializedIterator{contract: _L2CrossDomainMessenger.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *L2CrossDomainMessengerInitialized) (event.Subscription, error) { + + logs, sub, err := _L2CrossDomainMessenger.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: + // New log arrived, parse the event and forward to the user + event := new(L2CrossDomainMessengerInitialized) + if err := _L2CrossDomainMessenger.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 +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) ParseInitialized(log types.Log) (*L2CrossDomainMessengerInitialized, error) { + event := new(L2CrossDomainMessengerInitialized) + if err := _L2CrossDomainMessenger.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// L2CrossDomainMessengerPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the L2CrossDomainMessenger contract. +type L2CrossDomainMessengerPausedIterator struct { + Event *L2CrossDomainMessengerPaused // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L2CrossDomainMessengerPausedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L2CrossDomainMessengerPaused) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L2CrossDomainMessengerPaused) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L2CrossDomainMessengerPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L2CrossDomainMessengerPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L2CrossDomainMessengerPaused represents a Paused event raised by the L2CrossDomainMessenger contract. +type L2CrossDomainMessengerPaused struct { + Account common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPaused is a free log retrieval operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) FilterPaused(opts *bind.FilterOpts) (*L2CrossDomainMessengerPausedIterator, error) { + + logs, sub, err := _L2CrossDomainMessenger.contract.FilterLogs(opts, "Paused") + if err != nil { + return nil, err + } + return &L2CrossDomainMessengerPausedIterator{contract: _L2CrossDomainMessenger.contract, event: "Paused", logs: logs, sub: sub}, nil +} + +// WatchPaused is a free log subscription operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *L2CrossDomainMessengerPaused) (event.Subscription, error) { + + logs, sub, err := _L2CrossDomainMessenger.contract.WatchLogs(opts, "Paused") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L2CrossDomainMessengerPaused) + if err := _L2CrossDomainMessenger.contract.UnpackLog(event, "Paused", 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 +} + +// ParsePaused is a log parse operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) ParsePaused(log types.Log) (*L2CrossDomainMessengerPaused, error) { + event := new(L2CrossDomainMessengerPaused) + if err := _L2CrossDomainMessenger.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// L2CrossDomainMessengerRelayedMessageIterator is returned from FilterRelayedMessage and is used to iterate over the raw logs and unpacked data for RelayedMessage events raised by the L2CrossDomainMessenger contract. +type L2CrossDomainMessengerRelayedMessageIterator struct { + Event *L2CrossDomainMessengerRelayedMessage // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L2CrossDomainMessengerRelayedMessageIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L2CrossDomainMessengerRelayedMessage) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L2CrossDomainMessengerRelayedMessage) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L2CrossDomainMessengerRelayedMessageIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L2CrossDomainMessengerRelayedMessageIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L2CrossDomainMessengerRelayedMessage represents a RelayedMessage event raised by the L2CrossDomainMessenger contract. +type L2CrossDomainMessengerRelayedMessage struct { + MsgHash [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRelayedMessage is a free log retrieval operation binding the contract event 0x4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c. +// +// Solidity: event RelayedMessage(bytes32 indexed msgHash) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) FilterRelayedMessage(opts *bind.FilterOpts, msgHash [][32]byte) (*L2CrossDomainMessengerRelayedMessageIterator, error) { + + var msgHashRule []interface{} + for _, msgHashItem := range msgHash { + msgHashRule = append(msgHashRule, msgHashItem) + } + + logs, sub, err := _L2CrossDomainMessenger.contract.FilterLogs(opts, "RelayedMessage", msgHashRule) + if err != nil { + return nil, err + } + return &L2CrossDomainMessengerRelayedMessageIterator{contract: _L2CrossDomainMessenger.contract, event: "RelayedMessage", logs: logs, sub: sub}, nil +} + +// WatchRelayedMessage is a free log subscription operation binding the contract event 0x4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c. +// +// Solidity: event RelayedMessage(bytes32 indexed msgHash) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) WatchRelayedMessage(opts *bind.WatchOpts, sink chan<- *L2CrossDomainMessengerRelayedMessage, msgHash [][32]byte) (event.Subscription, error) { + + var msgHashRule []interface{} + for _, msgHashItem := range msgHash { + msgHashRule = append(msgHashRule, msgHashItem) + } + + logs, sub, err := _L2CrossDomainMessenger.contract.WatchLogs(opts, "RelayedMessage", msgHashRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L2CrossDomainMessengerRelayedMessage) + if err := _L2CrossDomainMessenger.contract.UnpackLog(event, "RelayedMessage", 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 +} + +// ParseRelayedMessage is a log parse operation binding the contract event 0x4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c. +// +// Solidity: event RelayedMessage(bytes32 indexed msgHash) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) ParseRelayedMessage(log types.Log) (*L2CrossDomainMessengerRelayedMessage, error) { + event := new(L2CrossDomainMessengerRelayedMessage) + if err := _L2CrossDomainMessenger.contract.UnpackLog(event, "RelayedMessage", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// L2CrossDomainMessengerSentMessageIterator is returned from FilterSentMessage and is used to iterate over the raw logs and unpacked data for SentMessage events raised by the L2CrossDomainMessenger contract. +type L2CrossDomainMessengerSentMessageIterator struct { + Event *L2CrossDomainMessengerSentMessage // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L2CrossDomainMessengerSentMessageIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L2CrossDomainMessengerSentMessage) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L2CrossDomainMessengerSentMessage) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L2CrossDomainMessengerSentMessageIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L2CrossDomainMessengerSentMessageIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L2CrossDomainMessengerSentMessage represents a SentMessage event raised by the L2CrossDomainMessenger contract. +type L2CrossDomainMessengerSentMessage struct { + Target common.Address + Sender common.Address + Value *big.Int + Message []byte + MessageNonce *big.Int + GasLimit *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSentMessage is a free log retrieval operation binding the contract event 0xdd28cef75ff18fb538e43317144469f339702f973eace2bc808f2acc37db310e. +// +// Solidity: event SentMessage(address indexed target, address indexed sender, uint256 value, bytes message, uint256 messageNonce, uint256 gasLimit) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) FilterSentMessage(opts *bind.FilterOpts, target []common.Address, sender []common.Address) (*L2CrossDomainMessengerSentMessageIterator, error) { + + var targetRule []interface{} + for _, targetItem := range target { + targetRule = append(targetRule, targetItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _L2CrossDomainMessenger.contract.FilterLogs(opts, "SentMessage", targetRule, senderRule) + if err != nil { + return nil, err + } + return &L2CrossDomainMessengerSentMessageIterator{contract: _L2CrossDomainMessenger.contract, event: "SentMessage", logs: logs, sub: sub}, nil +} + +// WatchSentMessage is a free log subscription operation binding the contract event 0xdd28cef75ff18fb538e43317144469f339702f973eace2bc808f2acc37db310e. +// +// Solidity: event SentMessage(address indexed target, address indexed sender, uint256 value, bytes message, uint256 messageNonce, uint256 gasLimit) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) WatchSentMessage(opts *bind.WatchOpts, sink chan<- *L2CrossDomainMessengerSentMessage, target []common.Address, sender []common.Address) (event.Subscription, error) { + + var targetRule []interface{} + for _, targetItem := range target { + targetRule = append(targetRule, targetItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _L2CrossDomainMessenger.contract.WatchLogs(opts, "SentMessage", targetRule, senderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L2CrossDomainMessengerSentMessage) + if err := _L2CrossDomainMessenger.contract.UnpackLog(event, "SentMessage", 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 +} + +// ParseSentMessage is a log parse operation binding the contract event 0xdd28cef75ff18fb538e43317144469f339702f973eace2bc808f2acc37db310e. +// +// Solidity: event SentMessage(address indexed target, address indexed sender, uint256 value, bytes message, uint256 messageNonce, uint256 gasLimit) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) ParseSentMessage(log types.Log) (*L2CrossDomainMessengerSentMessage, error) { + event := new(L2CrossDomainMessengerSentMessage) + if err := _L2CrossDomainMessenger.contract.UnpackLog(event, "SentMessage", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// L2CrossDomainMessengerUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the L2CrossDomainMessenger contract. +type L2CrossDomainMessengerUnpausedIterator struct { + Event *L2CrossDomainMessengerUnpaused // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L2CrossDomainMessengerUnpausedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L2CrossDomainMessengerUnpaused) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L2CrossDomainMessengerUnpaused) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L2CrossDomainMessengerUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L2CrossDomainMessengerUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L2CrossDomainMessengerUnpaused represents a Unpaused event raised by the L2CrossDomainMessenger contract. +type L2CrossDomainMessengerUnpaused struct { + Account common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUnpaused is a free log retrieval operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) FilterUnpaused(opts *bind.FilterOpts) (*L2CrossDomainMessengerUnpausedIterator, error) { + + logs, sub, err := _L2CrossDomainMessenger.contract.FilterLogs(opts, "Unpaused") + if err != nil { + return nil, err + } + return &L2CrossDomainMessengerUnpausedIterator{contract: _L2CrossDomainMessenger.contract, event: "Unpaused", logs: logs, sub: sub}, nil +} + +// WatchUnpaused is a free log subscription operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *L2CrossDomainMessengerUnpaused) (event.Subscription, error) { + + logs, sub, err := _L2CrossDomainMessenger.contract.WatchLogs(opts, "Unpaused") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L2CrossDomainMessengerUnpaused) + if err := _L2CrossDomainMessenger.contract.UnpackLog(event, "Unpaused", 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 +} + +// ParseUnpaused is a log parse operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) ParseUnpaused(log types.Log) (*L2CrossDomainMessengerUnpaused, error) { + event := new(L2CrossDomainMessengerUnpaused) + if err := _L2CrossDomainMessenger.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/kroma-bindings/bindings/l2crossdomainmessenger_more.go b/kroma-bindings/bindings/l2crossdomainmessenger_more.go new file mode 100644 index 000000000..8e5b5c6a2 --- /dev/null +++ b/kroma-bindings/bindings/l2crossdomainmessenger_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const L2CrossDomainMessengerStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)50_storage\"},{\"astId\":1003,\"contract\":\"contracts/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"_paused\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_bool\"},{\"astId\":1004,\"contract\":\"contracts/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_array(t_uint256)49_storage\"},{\"astId\":1005,\"contract\":\"contracts/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"successfulMessages\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1006,\"contract\":\"contracts/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"xDomainMsgSender\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_address\"},{\"astId\":1007,\"contract\":\"contracts/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"msgNonce\",\"offset\":0,\"slot\":\"103\",\"type\":\"t_uint240\"},{\"astId\":1008,\"contract\":\"contracts/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"failedMessages\",\"offset\":0,\"slot\":\"104\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1009,\"contract\":\"contracts/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"105\",\"type\":\"t_array(t_uint256)45_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)45_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[45]\",\"numberOfBytes\":\"1440\",\"base\":\"t_uint256\"},\"t_array(t_uint256)49_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\",\"base\":\"t_uint256\"},\"t_array(t_uint256)50_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\",\"base\":\"t_uint256\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_bytes32,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_bool\"},\"t_uint240\":{\"encoding\":\"inplace\",\"label\":\"uint240\",\"numberOfBytes\":\"30\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" + +var L2CrossDomainMessengerStorageLayout = new(solc.StorageLayout) + +var L2CrossDomainMessengerDeployedBin = "0x6080604052600436106101445760003560e01c80636e296e45116100c0578063a4e7f8bd11610074578063b28ade2511610059578063b28ade251461034f578063d764ad0b1461036f578063ecc704281461038257600080fd5b8063a4e7f8bd146102ef578063b1b1b2091461031f57600080fd5b806383a74074116100a557806383a74074146102a45780638cbeeef2146101e35780639fce812c146102bb57600080fd5b80636e296e45146102555780638129fc1c1461028f57600080fd5b80633f827a5a1161011757806354fd4d50116100fc57806354fd4d50146101f95780635644cfdf1461021b5780635c975abb1461023157600080fd5b80633f827a5a146101bb5780634c1d6a69146101e357600080fd5b8063028f85f7146101495780630c5684981461017c5780632828d7e8146101915780633dbb202b146101a6575b600080fd5b34801561015557600080fd5b5061015e601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561018857600080fd5b5061015e603f81565b34801561019d57600080fd5b5061015e604081565b6101b96101b4366004611609565b6103c0565b005b3480156101c757600080fd5b506101d0600081565b60405161ffff9091168152602001610173565b3480156101ef57600080fd5b5061015e619c4081565b34801561020557600080fd5b5061020e6105ae565b60405161017391906116e8565b34801561022757600080fd5b5061015e61138881565b34801561023d57600080fd5b5060335460ff165b6040519015158152602001610173565b34801561026157600080fd5b5061026a610651565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610173565b34801561029b57600080fd5b506101b961073d565b3480156102b057600080fd5b5061015e62030d4081565b3480156102c757600080fd5b5061026a7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102fb57600080fd5b5061024561030a366004611702565b60686020526000908152604090205460ff1681565b34801561032b57600080fd5b5061024561033a366004611702565b60656020526000908152604090205460ff1681565b34801561035b57600080fd5b5061015e61036a36600461171b565b6108cf565b6101b961037d36600461176f565b61093d565b34801561038e57600080fd5b506067547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16604051908152602001610173565b6104d87f00000000000000000000000000000000000000000000000000000000000000006103ef8585856108cf565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061043a6067547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b338a34898c8c604051602401610456979695949392919061183a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611141565b3373ffffffffffffffffffffffffffffffffffffffff85167fdd28cef75ff18fb538e43317144469f339702f973eace2bc808f2acc37db310e34868661053d6067547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b8760405161054f959493929190611899565b60405180910390a35050606780547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60606105d97f00000000000000000000000000000000000000000000000000000000000000006111cf565b6106027f00000000000000000000000000000000000000000000000000000000000000006111cf565b61062b7f00000000000000000000000000000000000000000000000000000000000000006111cf565b60405160200161063d939291906118d1565b604051602081830303815290604052905090565b60665460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610720576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084015b60405180910390fd5b5060665473ffffffffffffffffffffffffffffffffffffffff1690565b600054610100900460ff161580801561075d5750600054600160ff909116105b806107775750303b158015610777575060005460ff166001145b610803576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610717565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561086157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61086961128d565b80156108cc57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6000611388619c4080603f6108eb604063ffffffff8816611976565b6108f591906119a6565b610900601088611976565b61090d9062030d406119f4565b61091791906119f4565b61092191906119f4565b61092b91906119f4565b61093591906119f4565b949350505050565b60f087901c600181106109f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206d6573736167657320697320737570706f7274656420617420746860648201527f69732074696d6500000000000000000000000000000000000000000000000000608482015260a401610717565b6000610a3e898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061135292505050565b905073ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef330181167f000000000000000000000000000000000000000000000000000000000000000090911603610ad657853414610ab257610ab2611a20565b60008181526068602052604090205460ff1615610ad157610ad1611a20565b610c28565b3415610b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610717565b60008181526068602052604090205460ff16610c28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610717565b610c3187611375565b15610ce4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610717565b60008181526065602052604090205460ff1615610d83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610717565b610da485610d95611388619c406119f4565b67ffffffffffffffff166113ca565b1580610dca575060665473ffffffffffffffffffffffffffffffffffffffff1661dead14155b15610ee35760008181526068602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201610edc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610717565b505061111c565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a161790556000610f7488619c405a610f379190611a4f565b8988888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113e892505050565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801561100b5760008281526065602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2611118565b60008281526068602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610717565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6040517fc2b3e5ac0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000039063c2b3e5ac90849061119790889088908790600401611a66565b6000604051808303818588803b1580156111b057600080fd5b505af11580156111c4573d6000803e3d6000fd5b505050505050505050565b606060006111dc83611402565b600101905060008167ffffffffffffffff8111156111fc576111fc611aae565b6040519080825280601f01601f191660200182016040528015611226576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461123057509392505050565b600054610100900460ff16611324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610717565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055565b60006113628787878787876114e4565b8051906020012090509695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82163014806113c4575073ffffffffffffffffffffffffffffffffffffffff8216734200000000000000000000000000000000000003145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061144b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611477576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061149557662386f26fc10000830492506010015b6305f5e10083106114ad576305f5e100830492506008015b61271083106114c157612710830492506004015b606483106114d3576064830492506002015b600a83106113c45760010192915050565b606086868686868660405160240161150196959493929190611add565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146115a757600080fd5b919050565b60008083601f8401126115be57600080fd5b50813567ffffffffffffffff8111156115d657600080fd5b6020830191508360208285010111156115ee57600080fd5b9250929050565b803563ffffffff811681146115a757600080fd5b6000806000806060858703121561161f57600080fd5b61162885611583565b9350602085013567ffffffffffffffff81111561164457600080fd5b611650878288016115ac565b90945092506116639050604086016115f5565b905092959194509250565b60005b83811015611689578181015183820152602001611671565b83811115611698576000848401525b50505050565b600081518084526116b681602086016020860161166e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006116fb602083018461169e565b9392505050565b60006020828403121561171457600080fd5b5035919050565b60008060006040848603121561173057600080fd5b833567ffffffffffffffff81111561174757600080fd5b611753868287016115ac565b90945092506117669050602085016115f5565b90509250925092565b600080600080600080600060c0888a03121561178a57600080fd5b8735965061179a60208901611583565b95506117a860408901611583565b9450606088013593506080880135925060a088013567ffffffffffffffff8111156117d257600080fd5b6117de8a828b016115ac565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a083015261188c60c0830184866117f1565b9998505050505050505050565b8581526080602082015260006118b36080830186886117f1565b905083604083015263ffffffff831660608301529695505050505050565b600084516118e381846020890161166e565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161191f816001850160208a0161166e565b6001920191820152835161193a81600284016020880161166e565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168183048111821515161561199d5761199d611947565b02949350505050565b600067ffffffffffffffff808416806119e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611a1757611a17611947565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611a6157611a61611947565b500390565b73ffffffffffffffffffffffffffffffffffffffff8416815267ffffffffffffffff83166020820152606060408201526000611aa5606083018461169e565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611b2860c083018461169e565b9897505050505050505056fea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(L2CrossDomainMessengerStorageLayoutJSON), L2CrossDomainMessengerStorageLayout); err != nil { + panic(err) + } + + layouts["L2CrossDomainMessenger"] = L2CrossDomainMessengerStorageLayout + deployedBytecodes["L2CrossDomainMessenger"] = L2CrossDomainMessengerDeployedBin +} diff --git a/kroma-bindings/bindings/l2erc721bridge.go b/kroma-bindings/bindings/l2erc721bridge.go new file mode 100644 index 000000000..da5192698 --- /dev/null +++ b/kroma-bindings/bindings/l2erc721bridge.go @@ -0,0 +1,689 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// L2ERC721BridgeMetaData contains all meta data concerning the L2ERC721Bridge contract. +var L2ERC721BridgeMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_messenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_otherBridge\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC721BridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC721BridgeInitiated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSENGER\",\"outputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_BRIDGE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC721\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC721To\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeERC721\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x6101206040523480156200001257600080fd5b50604051620017eb380380620017eb833981016040819052620000359162000162565b600160008084846001600160a01b038216620000ad5760405162461bcd60e51b815260206004820152602c60248201527f4552433732314272696467653a206d657373656e6765722063616e6e6f74206260448201526b65206164647265737328302960a01b60648201526084015b60405180910390fd5b6001600160a01b0381166200011d5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314272696467653a206f74686572206272696467652063616e6e6f60448201526e74206265206164647265737328302960881b6064820152608401620000a4565b6001600160a01b039182166080521660a05260c09290925260e05261010052506200019a9050565b80516001600160a01b03811681146200015d57600080fd5b919050565b600080604083850312156200017657600080fd5b620001818362000145565b9150620001916020840162000145565b90509250929050565b60805160a05160c05160e051610100516115ea6200020160003960006102480152600061021f015260006101f601526000818160c2015281816102d40152610d6701526000818161010e015281816102aa0152818161030b0152610d3a01526115ea6000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80637f46ddb2116100505780637f46ddb2146100bd578063927ede2d14610109578063aa5574521461013057600080fd5b80633687011a1461007757806354fd4d501461008c578063761f4493146100aa575b600080fd5b61008a6100853660046111d1565b610143565b005b6100946101ef565b6040516100a191906112ce565b60405180910390f35b61008a6100b83660046112e1565b610292565b6100e47f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a1565b6100e47f000000000000000000000000000000000000000000000000000000000000000081565b61008a61013e366004611379565b6107f9565b333b156101d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b6101e786863333888888886108b5565b505050505050565b606061021a7f0000000000000000000000000000000000000000000000000000000000000000610e53565b6102437f0000000000000000000000000000000000000000000000000000000000000000610e53565b61026c7f0000000000000000000000000000000000000000000000000000000000000000610e53565b60405160200161027e939291906113f0565b604051602081830303815290604052905090565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156103b057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103989190611466565b73ffffffffffffffffffffffffffffffffffffffff16145b61043c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f74686572206272696467650060648201526084016101ce565b3073ffffffffffffffffffffffffffffffffffffffff8816036104e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c324552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c660000000000000000000000000000000000000000000060648201526084016101ce565b61050b877f74259ebf00000000000000000000000000000000000000000000000000000000610f11565b610597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c324552433732314272696467653a206c6f63616c20746f6b656e20696e746560448201527f7266616365206973206e6f7420636f6d706c69616e740000000000000000000060648201526084016101ce565b8673ffffffffffffffffffffffffffffffffffffffff1663033964be6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106069190611466565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146106e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324552433732314272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204b726f6d61204d696e7461626c6520455243373231206c6f6360648201527f616c20746f6b656e000000000000000000000000000000000000000000000000608482015260a4016101ce565b6040517fa144819400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301526024820185905288169063a144819490604401600060405180830381600087803b15801561075657600080fd5b505af115801561076a573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac878787876040516107e894939291906114cc565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff851661089c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f7420626520616464726573732830290000000000000000000000000000000060648201526084016101ce565b6108ac87873388888888886108b5565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff8716610958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c324552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f74206265206164647265737328302900000000000000000000000000000060648201526084016101ce565b6040517f6352211e0000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff891690636352211e90602401602060405180830381865afa1580156109c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e79190611466565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4c324552433732314272696467653a205769746864726177616c206973206e6f60448201527f74206265696e6720696e69746961746564206279204e4654206f776e6572000060648201526084016101ce565b60008873ffffffffffffffffffffffffffffffffffffffff1663033964be6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b129190611466565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610bcf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4c324552433732314272696467653a2072656d6f746520746f6b656e20646f6560448201527f73206e6f74206d6174636820676976656e2076616c756500000000000000000060648201526084016101ce565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018790528a1690639dc29fac90604401600060405180830381600087803b158015610c3f57600080fd5b505af1158015610c53573d6000803e3d6000fd5b50505050600063761f449360e01b828b8a8a8a8989604051602401610c7e979695949392919061150c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290517f3dbb202b00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690633dbb202b90610d93907f00000000000000000000000000000000000000000000000000000000000000009085908a90600401611569565b600060405180830381600087803b158015610dad57600080fd5b505af1158015610dc1573d6000803e3d6000fd5b505050508773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a58a8a8989604051610e3f94939291906114cc565b60405180910390a450505050505050505050565b60606000610e6083610f34565b600101905060008167ffffffffffffffff811115610e8057610e806115ae565b6040519080825280601f01601f191660200182016040528015610eaa576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084610eb457509392505050565b6000610f1c83611017565b8015610f2d5750610f2d838361107b565b9392505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610f7d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610fa9576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610fc757662386f26fc10000830492506010015b6305f5e1008310610fdf576305f5e100830492506008015b6127108310610ff357612710830492506004015b60648310611005576064830492506002015b600a8310611011576001015b92915050565b6000611043827f01ffc9a70000000000000000000000000000000000000000000000000000000061107b565b80156110115750611074827fffffffff0000000000000000000000000000000000000000000000000000000061107b565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015611133575060208210155b801561113f5750600081115b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461116c57600080fd5b50565b803563ffffffff8116811461118357600080fd5b919050565b60008083601f84011261119a57600080fd5b50813567ffffffffffffffff8111156111b257600080fd5b6020830191508360208285010111156111ca57600080fd5b9250929050565b60008060008060008060a087890312156111ea57600080fd5b86356111f58161114a565b955060208701356112058161114a565b94506040870135935061121a6060880161116f565b9250608087013567ffffffffffffffff81111561123657600080fd5b61124289828a01611188565b979a9699509497509295939492505050565b60005b8381101561126f578181015183820152602001611257565b8381111561127e576000848401525b50505050565b6000815180845261129c816020860160208601611254565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610f2d6020830184611284565b600080600080600080600060c0888a0312156112fc57600080fd5b87356113078161114a565b965060208801356113178161114a565b955060408801356113278161114a565b945060608801356113378161114a565b93506080880135925060a088013567ffffffffffffffff81111561135a57600080fd5b6113668a828b01611188565b989b979a50959850939692959293505050565b600080600080600080600060c0888a03121561139457600080fd5b873561139f8161114a565b965060208801356113af8161114a565b955060408801356113bf8161114a565b9450606088013593506113d46080890161116f565b925060a088013567ffffffffffffffff81111561135a57600080fd5b60008451611402818460208901611254565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161143e816001850160208a01611254565b60019201918201528351611459816002840160208801611254565b0160020195945050505050565b60006020828403121561147857600080fd5b8151610f2d8161114a565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000611502606083018486611483565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a083015261155c60c083018486611483565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006115986060830185611284565b905063ffffffff83166040830152949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a", +} + +// L2ERC721BridgeABI is the input ABI used to generate the binding from. +// Deprecated: Use L2ERC721BridgeMetaData.ABI instead. +var L2ERC721BridgeABI = L2ERC721BridgeMetaData.ABI + +// L2ERC721BridgeBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use L2ERC721BridgeMetaData.Bin instead. +var L2ERC721BridgeBin = L2ERC721BridgeMetaData.Bin + +// DeployL2ERC721Bridge deploys a new Ethereum contract, binding an instance of L2ERC721Bridge to it. +func DeployL2ERC721Bridge(auth *bind.TransactOpts, backend bind.ContractBackend, _messenger common.Address, _otherBridge common.Address) (common.Address, *types.Transaction, *L2ERC721Bridge, error) { + parsed, err := L2ERC721BridgeMetaData.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(L2ERC721BridgeBin), backend, _messenger, _otherBridge) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &L2ERC721Bridge{L2ERC721BridgeCaller: L2ERC721BridgeCaller{contract: contract}, L2ERC721BridgeTransactor: L2ERC721BridgeTransactor{contract: contract}, L2ERC721BridgeFilterer: L2ERC721BridgeFilterer{contract: contract}}, nil +} + +// L2ERC721Bridge is an auto generated Go binding around an Ethereum contract. +type L2ERC721Bridge struct { + L2ERC721BridgeCaller // Read-only binding to the contract + L2ERC721BridgeTransactor // Write-only binding to the contract + L2ERC721BridgeFilterer // Log filterer for contract events +} + +// L2ERC721BridgeCaller is an auto generated read-only Go binding around an Ethereum contract. +type L2ERC721BridgeCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L2ERC721BridgeTransactor is an auto generated write-only Go binding around an Ethereum contract. +type L2ERC721BridgeTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L2ERC721BridgeFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type L2ERC721BridgeFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L2ERC721BridgeSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type L2ERC721BridgeSession struct { + Contract *L2ERC721Bridge // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// L2ERC721BridgeCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type L2ERC721BridgeCallerSession struct { + Contract *L2ERC721BridgeCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// L2ERC721BridgeTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type L2ERC721BridgeTransactorSession struct { + Contract *L2ERC721BridgeTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// L2ERC721BridgeRaw is an auto generated low-level Go binding around an Ethereum contract. +type L2ERC721BridgeRaw struct { + Contract *L2ERC721Bridge // Generic contract binding to access the raw methods on +} + +// L2ERC721BridgeCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type L2ERC721BridgeCallerRaw struct { + Contract *L2ERC721BridgeCaller // Generic read-only contract binding to access the raw methods on +} + +// L2ERC721BridgeTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type L2ERC721BridgeTransactorRaw struct { + Contract *L2ERC721BridgeTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewL2ERC721Bridge creates a new instance of L2ERC721Bridge, bound to a specific deployed contract. +func NewL2ERC721Bridge(address common.Address, backend bind.ContractBackend) (*L2ERC721Bridge, error) { + contract, err := bindL2ERC721Bridge(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &L2ERC721Bridge{L2ERC721BridgeCaller: L2ERC721BridgeCaller{contract: contract}, L2ERC721BridgeTransactor: L2ERC721BridgeTransactor{contract: contract}, L2ERC721BridgeFilterer: L2ERC721BridgeFilterer{contract: contract}}, nil +} + +// NewL2ERC721BridgeCaller creates a new read-only instance of L2ERC721Bridge, bound to a specific deployed contract. +func NewL2ERC721BridgeCaller(address common.Address, caller bind.ContractCaller) (*L2ERC721BridgeCaller, error) { + contract, err := bindL2ERC721Bridge(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &L2ERC721BridgeCaller{contract: contract}, nil +} + +// NewL2ERC721BridgeTransactor creates a new write-only instance of L2ERC721Bridge, bound to a specific deployed contract. +func NewL2ERC721BridgeTransactor(address common.Address, transactor bind.ContractTransactor) (*L2ERC721BridgeTransactor, error) { + contract, err := bindL2ERC721Bridge(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &L2ERC721BridgeTransactor{contract: contract}, nil +} + +// NewL2ERC721BridgeFilterer creates a new log filterer instance of L2ERC721Bridge, bound to a specific deployed contract. +func NewL2ERC721BridgeFilterer(address common.Address, filterer bind.ContractFilterer) (*L2ERC721BridgeFilterer, error) { + contract, err := bindL2ERC721Bridge(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &L2ERC721BridgeFilterer{contract: contract}, nil +} + +// bindL2ERC721Bridge binds a generic wrapper to an already deployed contract. +func bindL2ERC721Bridge(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := L2ERC721BridgeMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_L2ERC721Bridge *L2ERC721BridgeRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _L2ERC721Bridge.Contract.L2ERC721BridgeCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_L2ERC721Bridge *L2ERC721BridgeRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L2ERC721Bridge.Contract.L2ERC721BridgeTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_L2ERC721Bridge *L2ERC721BridgeRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _L2ERC721Bridge.Contract.L2ERC721BridgeTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_L2ERC721Bridge *L2ERC721BridgeCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _L2ERC721Bridge.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_L2ERC721Bridge *L2ERC721BridgeTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L2ERC721Bridge.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_L2ERC721Bridge *L2ERC721BridgeTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _L2ERC721Bridge.Contract.contract.Transact(opts, method, params...) +} + +// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. +// +// Solidity: function MESSENGER() view returns(address) +func (_L2ERC721Bridge *L2ERC721BridgeCaller) MESSENGER(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L2ERC721Bridge.contract.Call(opts, &out, "MESSENGER") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. +// +// Solidity: function MESSENGER() view returns(address) +func (_L2ERC721Bridge *L2ERC721BridgeSession) MESSENGER() (common.Address, error) { + return _L2ERC721Bridge.Contract.MESSENGER(&_L2ERC721Bridge.CallOpts) +} + +// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. +// +// Solidity: function MESSENGER() view returns(address) +func (_L2ERC721Bridge *L2ERC721BridgeCallerSession) MESSENGER() (common.Address, error) { + return _L2ERC721Bridge.Contract.MESSENGER(&_L2ERC721Bridge.CallOpts) +} + +// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. +// +// Solidity: function OTHER_BRIDGE() view returns(address) +func (_L2ERC721Bridge *L2ERC721BridgeCaller) OTHERBRIDGE(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L2ERC721Bridge.contract.Call(opts, &out, "OTHER_BRIDGE") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. +// +// Solidity: function OTHER_BRIDGE() view returns(address) +func (_L2ERC721Bridge *L2ERC721BridgeSession) OTHERBRIDGE() (common.Address, error) { + return _L2ERC721Bridge.Contract.OTHERBRIDGE(&_L2ERC721Bridge.CallOpts) +} + +// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. +// +// Solidity: function OTHER_BRIDGE() view returns(address) +func (_L2ERC721Bridge *L2ERC721BridgeCallerSession) OTHERBRIDGE() (common.Address, error) { + return _L2ERC721Bridge.Contract.OTHERBRIDGE(&_L2ERC721Bridge.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L2ERC721Bridge *L2ERC721BridgeCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _L2ERC721Bridge.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L2ERC721Bridge *L2ERC721BridgeSession) Version() (string, error) { + return _L2ERC721Bridge.Contract.Version(&_L2ERC721Bridge.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L2ERC721Bridge *L2ERC721BridgeCallerSession) Version() (string, error) { + return _L2ERC721Bridge.Contract.Version(&_L2ERC721Bridge.CallOpts) +} + +// BridgeERC721 is a paid mutator transaction binding the contract method 0x3687011a. +// +// Solidity: function bridgeERC721(address _localToken, address _remoteToken, uint256 _tokenId, uint32 _minGasLimit, bytes _extraData) returns() +func (_L2ERC721Bridge *L2ERC721BridgeTransactor) BridgeERC721(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _tokenId *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L2ERC721Bridge.contract.Transact(opts, "bridgeERC721", _localToken, _remoteToken, _tokenId, _minGasLimit, _extraData) +} + +// BridgeERC721 is a paid mutator transaction binding the contract method 0x3687011a. +// +// Solidity: function bridgeERC721(address _localToken, address _remoteToken, uint256 _tokenId, uint32 _minGasLimit, bytes _extraData) returns() +func (_L2ERC721Bridge *L2ERC721BridgeSession) BridgeERC721(_localToken common.Address, _remoteToken common.Address, _tokenId *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L2ERC721Bridge.Contract.BridgeERC721(&_L2ERC721Bridge.TransactOpts, _localToken, _remoteToken, _tokenId, _minGasLimit, _extraData) +} + +// BridgeERC721 is a paid mutator transaction binding the contract method 0x3687011a. +// +// Solidity: function bridgeERC721(address _localToken, address _remoteToken, uint256 _tokenId, uint32 _minGasLimit, bytes _extraData) returns() +func (_L2ERC721Bridge *L2ERC721BridgeTransactorSession) BridgeERC721(_localToken common.Address, _remoteToken common.Address, _tokenId *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L2ERC721Bridge.Contract.BridgeERC721(&_L2ERC721Bridge.TransactOpts, _localToken, _remoteToken, _tokenId, _minGasLimit, _extraData) +} + +// BridgeERC721To is a paid mutator transaction binding the contract method 0xaa557452. +// +// Solidity: function bridgeERC721To(address _localToken, address _remoteToken, address _to, uint256 _tokenId, uint32 _minGasLimit, bytes _extraData) returns() +func (_L2ERC721Bridge *L2ERC721BridgeTransactor) BridgeERC721To(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _to common.Address, _tokenId *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L2ERC721Bridge.contract.Transact(opts, "bridgeERC721To", _localToken, _remoteToken, _to, _tokenId, _minGasLimit, _extraData) +} + +// BridgeERC721To is a paid mutator transaction binding the contract method 0xaa557452. +// +// Solidity: function bridgeERC721To(address _localToken, address _remoteToken, address _to, uint256 _tokenId, uint32 _minGasLimit, bytes _extraData) returns() +func (_L2ERC721Bridge *L2ERC721BridgeSession) BridgeERC721To(_localToken common.Address, _remoteToken common.Address, _to common.Address, _tokenId *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L2ERC721Bridge.Contract.BridgeERC721To(&_L2ERC721Bridge.TransactOpts, _localToken, _remoteToken, _to, _tokenId, _minGasLimit, _extraData) +} + +// BridgeERC721To is a paid mutator transaction binding the contract method 0xaa557452. +// +// Solidity: function bridgeERC721To(address _localToken, address _remoteToken, address _to, uint256 _tokenId, uint32 _minGasLimit, bytes _extraData) returns() +func (_L2ERC721Bridge *L2ERC721BridgeTransactorSession) BridgeERC721To(_localToken common.Address, _remoteToken common.Address, _to common.Address, _tokenId *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L2ERC721Bridge.Contract.BridgeERC721To(&_L2ERC721Bridge.TransactOpts, _localToken, _remoteToken, _to, _tokenId, _minGasLimit, _extraData) +} + +// FinalizeBridgeERC721 is a paid mutator transaction binding the contract method 0x761f4493. +// +// Solidity: function finalizeBridgeERC721(address _localToken, address _remoteToken, address _from, address _to, uint256 _tokenId, bytes _extraData) returns() +func (_L2ERC721Bridge *L2ERC721BridgeTransactor) FinalizeBridgeERC721(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _tokenId *big.Int, _extraData []byte) (*types.Transaction, error) { + return _L2ERC721Bridge.contract.Transact(opts, "finalizeBridgeERC721", _localToken, _remoteToken, _from, _to, _tokenId, _extraData) +} + +// FinalizeBridgeERC721 is a paid mutator transaction binding the contract method 0x761f4493. +// +// Solidity: function finalizeBridgeERC721(address _localToken, address _remoteToken, address _from, address _to, uint256 _tokenId, bytes _extraData) returns() +func (_L2ERC721Bridge *L2ERC721BridgeSession) FinalizeBridgeERC721(_localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _tokenId *big.Int, _extraData []byte) (*types.Transaction, error) { + return _L2ERC721Bridge.Contract.FinalizeBridgeERC721(&_L2ERC721Bridge.TransactOpts, _localToken, _remoteToken, _from, _to, _tokenId, _extraData) +} + +// FinalizeBridgeERC721 is a paid mutator transaction binding the contract method 0x761f4493. +// +// Solidity: function finalizeBridgeERC721(address _localToken, address _remoteToken, address _from, address _to, uint256 _tokenId, bytes _extraData) returns() +func (_L2ERC721Bridge *L2ERC721BridgeTransactorSession) FinalizeBridgeERC721(_localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _tokenId *big.Int, _extraData []byte) (*types.Transaction, error) { + return _L2ERC721Bridge.Contract.FinalizeBridgeERC721(&_L2ERC721Bridge.TransactOpts, _localToken, _remoteToken, _from, _to, _tokenId, _extraData) +} + +// L2ERC721BridgeERC721BridgeFinalizedIterator is returned from FilterERC721BridgeFinalized and is used to iterate over the raw logs and unpacked data for ERC721BridgeFinalized events raised by the L2ERC721Bridge contract. +type L2ERC721BridgeERC721BridgeFinalizedIterator struct { + Event *L2ERC721BridgeERC721BridgeFinalized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L2ERC721BridgeERC721BridgeFinalizedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L2ERC721BridgeERC721BridgeFinalized) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L2ERC721BridgeERC721BridgeFinalized) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L2ERC721BridgeERC721BridgeFinalizedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L2ERC721BridgeERC721BridgeFinalizedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L2ERC721BridgeERC721BridgeFinalized represents a ERC721BridgeFinalized event raised by the L2ERC721Bridge contract. +type L2ERC721BridgeERC721BridgeFinalized struct { + LocalToken common.Address + RemoteToken common.Address + From common.Address + To common.Address + TokenId *big.Int + ExtraData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterERC721BridgeFinalized is a free log retrieval operation binding the contract event 0x1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac. +// +// Solidity: event ERC721BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 tokenId, bytes extraData) +func (_L2ERC721Bridge *L2ERC721BridgeFilterer) FilterERC721BridgeFinalized(opts *bind.FilterOpts, localToken []common.Address, remoteToken []common.Address, from []common.Address) (*L2ERC721BridgeERC721BridgeFinalizedIterator, error) { + + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _L2ERC721Bridge.contract.FilterLogs(opts, "ERC721BridgeFinalized", localTokenRule, remoteTokenRule, fromRule) + if err != nil { + return nil, err + } + return &L2ERC721BridgeERC721BridgeFinalizedIterator{contract: _L2ERC721Bridge.contract, event: "ERC721BridgeFinalized", logs: logs, sub: sub}, nil +} + +// WatchERC721BridgeFinalized is a free log subscription operation binding the contract event 0x1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac. +// +// Solidity: event ERC721BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 tokenId, bytes extraData) +func (_L2ERC721Bridge *L2ERC721BridgeFilterer) WatchERC721BridgeFinalized(opts *bind.WatchOpts, sink chan<- *L2ERC721BridgeERC721BridgeFinalized, localToken []common.Address, remoteToken []common.Address, from []common.Address) (event.Subscription, error) { + + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _L2ERC721Bridge.contract.WatchLogs(opts, "ERC721BridgeFinalized", localTokenRule, remoteTokenRule, fromRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L2ERC721BridgeERC721BridgeFinalized) + if err := _L2ERC721Bridge.contract.UnpackLog(event, "ERC721BridgeFinalized", 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 +} + +// ParseERC721BridgeFinalized is a log parse operation binding the contract event 0x1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac. +// +// Solidity: event ERC721BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 tokenId, bytes extraData) +func (_L2ERC721Bridge *L2ERC721BridgeFilterer) ParseERC721BridgeFinalized(log types.Log) (*L2ERC721BridgeERC721BridgeFinalized, error) { + event := new(L2ERC721BridgeERC721BridgeFinalized) + if err := _L2ERC721Bridge.contract.UnpackLog(event, "ERC721BridgeFinalized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// L2ERC721BridgeERC721BridgeInitiatedIterator is returned from FilterERC721BridgeInitiated and is used to iterate over the raw logs and unpacked data for ERC721BridgeInitiated events raised by the L2ERC721Bridge contract. +type L2ERC721BridgeERC721BridgeInitiatedIterator struct { + Event *L2ERC721BridgeERC721BridgeInitiated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L2ERC721BridgeERC721BridgeInitiatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L2ERC721BridgeERC721BridgeInitiated) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L2ERC721BridgeERC721BridgeInitiated) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L2ERC721BridgeERC721BridgeInitiatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L2ERC721BridgeERC721BridgeInitiatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L2ERC721BridgeERC721BridgeInitiated represents a ERC721BridgeInitiated event raised by the L2ERC721Bridge contract. +type L2ERC721BridgeERC721BridgeInitiated struct { + LocalToken common.Address + RemoteToken common.Address + From common.Address + To common.Address + TokenId *big.Int + ExtraData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterERC721BridgeInitiated is a free log retrieval operation binding the contract event 0xb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a5. +// +// Solidity: event ERC721BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 tokenId, bytes extraData) +func (_L2ERC721Bridge *L2ERC721BridgeFilterer) FilterERC721BridgeInitiated(opts *bind.FilterOpts, localToken []common.Address, remoteToken []common.Address, from []common.Address) (*L2ERC721BridgeERC721BridgeInitiatedIterator, error) { + + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _L2ERC721Bridge.contract.FilterLogs(opts, "ERC721BridgeInitiated", localTokenRule, remoteTokenRule, fromRule) + if err != nil { + return nil, err + } + return &L2ERC721BridgeERC721BridgeInitiatedIterator{contract: _L2ERC721Bridge.contract, event: "ERC721BridgeInitiated", logs: logs, sub: sub}, nil +} + +// WatchERC721BridgeInitiated is a free log subscription operation binding the contract event 0xb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a5. +// +// Solidity: event ERC721BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 tokenId, bytes extraData) +func (_L2ERC721Bridge *L2ERC721BridgeFilterer) WatchERC721BridgeInitiated(opts *bind.WatchOpts, sink chan<- *L2ERC721BridgeERC721BridgeInitiated, localToken []common.Address, remoteToken []common.Address, from []common.Address) (event.Subscription, error) { + + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _L2ERC721Bridge.contract.WatchLogs(opts, "ERC721BridgeInitiated", localTokenRule, remoteTokenRule, fromRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L2ERC721BridgeERC721BridgeInitiated) + if err := _L2ERC721Bridge.contract.UnpackLog(event, "ERC721BridgeInitiated", 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 +} + +// ParseERC721BridgeInitiated is a log parse operation binding the contract event 0xb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a5. +// +// Solidity: event ERC721BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 tokenId, bytes extraData) +func (_L2ERC721Bridge *L2ERC721BridgeFilterer) ParseERC721BridgeInitiated(log types.Log) (*L2ERC721BridgeERC721BridgeInitiated, error) { + event := new(L2ERC721BridgeERC721BridgeInitiated) + if err := _L2ERC721Bridge.contract.UnpackLog(event, "ERC721BridgeInitiated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/kroma-bindings/bindings/l2erc721bridge_more.go b/kroma-bindings/bindings/l2erc721bridge_more.go new file mode 100644 index 000000000..502b54e50 --- /dev/null +++ b/kroma-bindings/bindings/l2erc721bridge_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const L2ERC721BridgeStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L2/L2ERC721Bridge.sol:L2ERC721Bridge\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_array(t_uint256)49_storage\"}],\"types\":{\"t_array(t_uint256)49_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\",\"base\":\"t_uint256\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"}}}" + +var L2ERC721BridgeStorageLayout = new(solc.StorageLayout) + +var L2ERC721BridgeDeployedBin = "0x608060405234801561001057600080fd5b50600436106100725760003560e01c80637f46ddb2116100505780637f46ddb2146100bd578063927ede2d14610109578063aa5574521461013057600080fd5b80633687011a1461007757806354fd4d501461008c578063761f4493146100aa575b600080fd5b61008a6100853660046111d1565b610143565b005b6100946101ef565b6040516100a191906112ce565b60405180910390f35b61008a6100b83660046112e1565b610292565b6100e47f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a1565b6100e47f000000000000000000000000000000000000000000000000000000000000000081565b61008a61013e366004611379565b6107f9565b333b156101d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b6101e786863333888888886108b5565b505050505050565b606061021a7f0000000000000000000000000000000000000000000000000000000000000000610e53565b6102437f0000000000000000000000000000000000000000000000000000000000000000610e53565b61026c7f0000000000000000000000000000000000000000000000000000000000000000610e53565b60405160200161027e939291906113f0565b604051602081830303815290604052905090565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156103b057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103989190611466565b73ffffffffffffffffffffffffffffffffffffffff16145b61043c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f74686572206272696467650060648201526084016101ce565b3073ffffffffffffffffffffffffffffffffffffffff8816036104e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c324552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c660000000000000000000000000000000000000000000060648201526084016101ce565b61050b877f74259ebf00000000000000000000000000000000000000000000000000000000610f11565b610597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c324552433732314272696467653a206c6f63616c20746f6b656e20696e746560448201527f7266616365206973206e6f7420636f6d706c69616e740000000000000000000060648201526084016101ce565b8673ffffffffffffffffffffffffffffffffffffffff1663033964be6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106069190611466565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146106e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324552433732314272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204b726f6d61204d696e7461626c6520455243373231206c6f6360648201527f616c20746f6b656e000000000000000000000000000000000000000000000000608482015260a4016101ce565b6040517fa144819400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301526024820185905288169063a144819490604401600060405180830381600087803b15801561075657600080fd5b505af115801561076a573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac878787876040516107e894939291906114cc565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff851661089c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f7420626520616464726573732830290000000000000000000000000000000060648201526084016101ce565b6108ac87873388888888886108b5565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff8716610958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c324552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f74206265206164647265737328302900000000000000000000000000000060648201526084016101ce565b6040517f6352211e0000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff891690636352211e90602401602060405180830381865afa1580156109c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e79190611466565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4c324552433732314272696467653a205769746864726177616c206973206e6f60448201527f74206265696e6720696e69746961746564206279204e4654206f776e6572000060648201526084016101ce565b60008873ffffffffffffffffffffffffffffffffffffffff1663033964be6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b129190611466565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610bcf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4c324552433732314272696467653a2072656d6f746520746f6b656e20646f6560448201527f73206e6f74206d6174636820676976656e2076616c756500000000000000000060648201526084016101ce565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018790528a1690639dc29fac90604401600060405180830381600087803b158015610c3f57600080fd5b505af1158015610c53573d6000803e3d6000fd5b50505050600063761f449360e01b828b8a8a8a8989604051602401610c7e979695949392919061150c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290517f3dbb202b00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690633dbb202b90610d93907f00000000000000000000000000000000000000000000000000000000000000009085908a90600401611569565b600060405180830381600087803b158015610dad57600080fd5b505af1158015610dc1573d6000803e3d6000fd5b505050508773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a58a8a8989604051610e3f94939291906114cc565b60405180910390a450505050505050505050565b60606000610e6083610f34565b600101905060008167ffffffffffffffff811115610e8057610e806115ae565b6040519080825280601f01601f191660200182016040528015610eaa576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084610eb457509392505050565b6000610f1c83611017565b8015610f2d5750610f2d838361107b565b9392505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610f7d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610fa9576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610fc757662386f26fc10000830492506010015b6305f5e1008310610fdf576305f5e100830492506008015b6127108310610ff357612710830492506004015b60648310611005576064830492506002015b600a8310611011576001015b92915050565b6000611043827f01ffc9a70000000000000000000000000000000000000000000000000000000061107b565b80156110115750611074827fffffffff0000000000000000000000000000000000000000000000000000000061107b565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015611133575060208210155b801561113f5750600081115b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461116c57600080fd5b50565b803563ffffffff8116811461118357600080fd5b919050565b60008083601f84011261119a57600080fd5b50813567ffffffffffffffff8111156111b257600080fd5b6020830191508360208285010111156111ca57600080fd5b9250929050565b60008060008060008060a087890312156111ea57600080fd5b86356111f58161114a565b955060208701356112058161114a565b94506040870135935061121a6060880161116f565b9250608087013567ffffffffffffffff81111561123657600080fd5b61124289828a01611188565b979a9699509497509295939492505050565b60005b8381101561126f578181015183820152602001611257565b8381111561127e576000848401525b50505050565b6000815180845261129c816020860160208601611254565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610f2d6020830184611284565b600080600080600080600060c0888a0312156112fc57600080fd5b87356113078161114a565b965060208801356113178161114a565b955060408801356113278161114a565b945060608801356113378161114a565b93506080880135925060a088013567ffffffffffffffff81111561135a57600080fd5b6113668a828b01611188565b989b979a50959850939692959293505050565b600080600080600080600060c0888a03121561139457600080fd5b873561139f8161114a565b965060208801356113af8161114a565b955060408801356113bf8161114a565b9450606088013593506113d46080890161116f565b925060a088013567ffffffffffffffff81111561135a57600080fd5b60008451611402818460208901611254565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161143e816001850160208a01611254565b60019201918201528351611459816002840160208801611254565b0160020195945050505050565b60006020828403121561147857600080fd5b8151610f2d8161114a565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000611502606083018486611483565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a083015261155c60c083018486611483565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006115986060830185611284565b905063ffffffff83166040830152949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(L2ERC721BridgeStorageLayoutJSON), L2ERC721BridgeStorageLayout); err != nil { + panic(err) + } + + layouts["L2ERC721Bridge"] = L2ERC721BridgeStorageLayout + deployedBytecodes["L2ERC721Bridge"] = L2ERC721BridgeDeployedBin +} diff --git a/kroma-bindings/bindings/l2outputoracle.go b/kroma-bindings/bindings/l2outputoracle.go new file mode 100644 index 000000000..f1fe30c25 --- /dev/null +++ b/kroma-bindings/bindings/l2outputoracle.go @@ -0,0 +1,1297 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// L2OutputOracleMetaData contains all meta data concerning the L2OutputOracle contract. +var L2OutputOracleMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"contractValidatorPool\",\"name\":\"_validatorPool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_colosseum\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_submissionInterval\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_l2BlockTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startingTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"outputIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"newOutputRoot\",\"type\":\"bytes32\"}],\"name\":\"OutputReplaced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2OutputIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2BlockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"l1Timestamp\",\"type\":\"uint256\"}],\"name\":\"OutputSubmitted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"COLOSSEUM\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FINALIZATION_PERIOD_SECONDS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_BLOCK_TIME\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SUBMISSION_INTERVAL\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_POOL\",\"outputs\":[{\"internalType\":\"contractValidatorPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"computeL2Timestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_outputIndex\",\"type\":\"uint256\"}],\"name\":\"finalizedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"}],\"name\":\"getL2Output\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"submitter\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint128\",\"name\":\"timestamp\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2BlockNumber\",\"type\":\"uint128\"}],\"internalType\":\"structTypes.CheckpointOutput\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"getL2OutputAfter\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"submitter\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint128\",\"name\":\"timestamp\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2BlockNumber\",\"type\":\"uint128\"}],\"internalType\":\"structTypes.CheckpointOutput\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"getL2OutputIndexAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_outputIndex\",\"type\":\"uint256\"}],\"name\":\"getSubmitter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_startingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startingTimestamp\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_outputIndex\",\"type\":\"uint256\"}],\"name\":\"isFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestOutputIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextOutputIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_newOutputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_submitter\",\"type\":\"address\"}],\"name\":\"replaceL2Output\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startingBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startingTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_l1BlockHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_l1BlockNumber\",\"type\":\"uint256\"}],\"name\":\"submitL2Output\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x6101806040523480156200001257600080fd5b5060405162001f8a38038062001f8a833981016040819052620000359162000352565b6001608052600060a081905260c05283620000bd5760405162461bcd60e51b815260206004820152603460248201527f4c324f75747075744f7261636c653a204c3220626c6f636b2074696d65206d7560448201527f73742062652067726561746572207468616e203000000000000000000000000060648201526084015b60405180910390fd5b60008511620001355760405162461bcd60e51b815260206004820152603a60248201527f4c324f75747075744f7261636c653a207375626d697373696f6e20696e74657260448201527f76616c206d7573742062652067726561746572207468616e20300000000000006064820152608401620000b4565b6001600160a01b0380881660e05286166101005261012085905261014084905261016081905262000167838362000174565b50505050505050620003be565b600054610100900460ff1615808015620001955750600054600160ff909116105b80620001c55750620001b2306200032a60201b620016441760201c565b158015620001c5575060005460ff166001145b6200022a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620000b4565b6000805460ff1916600117905580156200024e576000805461ff0019166101001790555b42821115620002d45760405162461bcd60e51b8152602060048201526044602482018190527f4c324f75747075744f7261636c653a207374617274696e67204c322074696d65908201527f7374616d70206d757374206265206c657373207468616e2063757272656e742060648201526374696d6560e01b608482015260a401620000b4565b60028290556001839055801562000325576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6001600160a01b03811681146200034f57600080fd5b50565b600080600080600080600060e0888a0312156200036e57600080fd5b87516200037b8162000339565b60208901519097506200038e8162000339565b604089015160608a015160808b015160a08c015160c0909c01519a9d939c50919a90999198509650945092505050565b60805160a05160c05160e05161010051610120516101405161016051611b2762000463600039600081816104d90152818161050001528181610bd901528181610f3901526114ef01526000818161018b015261102601526000818161021701526110770152600081816102f801526112e1015260008181610410015281816106830152610bae015260006106350152600061060c015260006105e30152611b276000f3fe6080604052600436106101745760003560e01c80639e45e8f4116100cb578063cf8e5cf01161007f578063e4a3011611610059578063e4a3011614610487578063e6646723146104a7578063f4daa291146104c757600080fd5b8063cf8e5cf014610432578063d1de856c14610452578063dcec33481461047257600080fd5b8063a48ea6de116100b0578063a48ea6de146103be578063b0ea09a8146103de578063b98debbf146103fe57600080fd5b80639e45e8f4146102e6578063a25ae5571461033f57600080fd5b80635a045f781161012d57806370872aa51161010757806370872aa51461029a5780637f006420146102b057806388786272146102d057600080fd5b80635a045f781461025b57806369f16eec146102705780636abcf5631461028557600080fd5b80634599c7881161015e5780634599c788146101f0578063529933df1461020557806354fd4d501461023957600080fd5b80622134cc1461017957806333727c4d146101c0575b600080fd5b34801561018557600080fd5b506101ad7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b3480156101cc57600080fd5b506101e06101db366004611800565b6104fb565b60405190151581526020016101b7565b3480156101fc57600080fd5b506101ad610569565b34801561021157600080fd5b506101ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561024557600080fd5b5061024e6105dc565b6040516101b79190611849565b61026e61026936600461189a565b61067f565b005b34801561027c57600080fd5b506101ad610c86565b34801561029157600080fd5b506003546101ad565b3480156102a657600080fd5b506101ad60015481565b3480156102bc57600080fd5b506101ad6102cb366004611800565b610c98565b3480156102dc57600080fd5b506101ad60025481565b3480156102f257600080fd5b5061031a7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b7565b34801561034b57600080fd5b5061035f61035a366004611800565b610e78565b60408051825173ffffffffffffffffffffffffffffffffffffffff16815260208084015190820152828201516fffffffffffffffffffffffffffffffff90811692820192909252606092830151909116918101919091526080016101b7565b3480156103ca57600080fd5b506101ad6103d9366004611800565b610f35565b3480156103ea57600080fd5b5061031a6103f9366004611800565b610fa1565b34801561040a57600080fd5b5061031a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561043e57600080fd5b5061035f61044d366004611800565b610fe3565b34801561045e57600080fd5b506101ad61046d366004611800565b611022565b34801561047e57600080fd5b506101ad61106a565b34801561049357600080fd5b5061026e6104a23660046118cc565b6110b0565b3480156104b357600080fd5b5061026e6104c2366004611913565b6112c9565b3480156104d357600080fd5b506101ad7f000000000000000000000000000000000000000000000000000000000000000081565b6000427f0000000000000000000000000000000000000000000000000000000000000000600384815481106105325761053261194c565b600091825260209091206002600390920201015461056291906fffffffffffffffffffffffffffffffff166119aa565b1092915050565b600354600090156105d35760038054610584906001906119c2565b815481106105945761059461194c565b600091825260209091206003909102016002015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16919050565b6001545b905090565b60606106077f0000000000000000000000000000000000000000000000000000000000000000611660565b6106307f0000000000000000000000000000000000000000000000000000000000000000611660565b6106597f0000000000000000000000000000000000000000000000000000000000000000611660565b60405160200161066b939291906119d9565b604051602081830303815290604052905090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633a5490466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107109190611a4f565b905073ffffffffffffffffffffffffffffffffffffffff808216146107e5573373ffffffffffffffffffffffffffffffffffffffff8216146107e55760405162461bcd60e51b815260206004820152604260248201527f4c324f75747075744f7261636c653a206f6e6c7920746865206e65787420736560448201527f6c65637465642076616c696461746f722063616e207375626d6974206f75747060648201527f7574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6107ed61106a565b84146108875760405162461bcd60e51b815260206004820152604860248201527f4c324f75747075744f7261636c653a20626c6f636b206e756d626572206d757360448201527f7420626520657175616c20746f206e65787420657870656374656420626c6f6360648201527f6b206e756d626572000000000000000000000000000000000000000000000000608482015260a4016107dc565b4261089185611022565b106109045760405162461bcd60e51b815260206004820152603560248201527f4c324f75747075744f7261636c653a2063616e6e6f74207375626d6974204c3260448201527f206f757470757420696e2074686520667574757265000000000000000000000060648201526084016107dc565b846109775760405162461bcd60e51b815260206004820152603c60248201527f4c324f75747075744f7261636c653a204c3220636865636b706f696e74206f7560448201527f747075742063616e6e6f7420626520746865207a65726f20686173680000000060648201526084016107dc565b82158015906109865750814015155b15610a275782824014610a275760405162461bcd60e51b815260206004820152604960248201527f4c324f75747075744f7261636c653a20626c6f636b206861736820646f65732060448201527f6e6f74206d61746368207468652068617368206174207468652065787065637460648201527f6564206865696768740000000000000000000000000000000000000000000000608482015260a4016107dc565b6000610a3260035490565b60408051608081018252338152602081018981526fffffffffffffffffffffffffffffffff428181168486019081528b831660608601908152600380546001810182556000829052965196027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b8101805473ffffffffffffffffffffffffffffffffffffffff989098167fffffffffffffffffffffffff00000000000000000000000000000000000000009098169790971790965593517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c86015551925182167001000000000000000000000000000000000292909116919091177fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85d9092019190915590519192508691839189917f457b4388026260019ae0b0b4f16c98235d74fe7359be469bdcba16e6d0d4968991610b8f9190815260200190565b60405180910390a473ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663d38dc7ee82610bfe7f0000000000000000000000000000000000000000000000000000000000000000426119aa565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526fffffffffffffffffffffffffffffffff166024820152604401600060405180830381600087803b158015610c6657600080fd5b505af1158015610c7a573d6000803e3d6000fd5b50505050505050505050565b6003546000906105d7906001906119c2565b6000610ca2610569565b821115610d3d5760405162461bcd60e51b815260206004820152604960248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f7420666f72206120626c6f636b207468617420686173206e6f74206265656e2060648201527f7375626d69747465640000000000000000000000000000000000000000000000608482015260a4016107dc565b600354610dd85760405162461bcd60e51b815260206004820152604760248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f74206173206e6f206f7574707574732068617665206265656e207375626d697460648201527f7465642079657400000000000000000000000000000000000000000000000000608482015260a4016107dc565b6003546000905b80821015610e715760006002610df583856119aa565b610dff9190611a73565b90508460038281548110610e1557610e1561194c565b600091825260209091206003909102016002015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff161015610e6757610e608160016119aa565b9250610e6b565b8091505b50610ddf565b5092915050565b60408051608081018252600080825260208201819052918101829052606081019190915260038281548110610eaf57610eaf61194c565b6000918252602091829020604080516080810182526003909302909101805473ffffffffffffffffffffffffffffffffffffffff1683526001810154938301939093526002909201546fffffffffffffffffffffffffffffffff808216938301939093527001000000000000000000000000000000009004909116606082015292915050565b60007f000000000000000000000000000000000000000000000000000000000000000060038381548110610f6b57610f6b61194c565b6000918252602090912060026003909202010154610f9b91906fffffffffffffffffffffffffffffffff166119aa565b92915050565b600060038281548110610fb657610fb661194c565b600091825260209091206003909102015473ffffffffffffffffffffffffffffffffffffffff1692915050565b604080516080810182526000808252602082018190529181018290526060810191909152600361101283610c98565b81548110610eaf57610eaf61194c565b60007f00000000000000000000000000000000000000000000000000000000000000006001548361105391906119c2565b61105d9190611aae565b600254610f9b91906119aa565b600354600090156110a8577f000000000000000000000000000000000000000000000000000000000000000061109e610569565b6105d791906119aa565b6105d7610569565b600054610100900460ff16158080156110d05750600054600160ff909116105b806110ea5750303b1580156110ea575060005460ff166001145b61115c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107dc565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156111ba57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b428211156112575760405162461bcd60e51b8152602060048201526044602482018190527f4c324f75747075744f7261636c653a207374617274696e67204c322074696d65908201527f7374616d70206d757374206265206c657373207468616e2063757272656e742060648201527f74696d6500000000000000000000000000000000000000000000000000000000608482015260a4016107dc565b6002829055600183905580156112c457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461139a5760405162461bcd60e51b815260206004820152604160248201527f4c324f75747075744f7261636c653a206f6e6c792074686520636f6c6f73736560448201527f756d20636f6e74726163742063616e207265706c61636520616e206f7574707560648201527f7400000000000000000000000000000000000000000000000000000000000000608482015260a4016107dc565b73ffffffffffffffffffffffffffffffffffffffff81166114235760405162461bcd60e51b815260206004820152603060248201527f4c324f75747075744f7261636c653a207375626d69747465722061646472657360448201527f732063616e6e6f74206265207a65726f0000000000000000000000000000000060648201526084016107dc565b60035483106114c05760405162461bcd60e51b815260206004820152604660248201527f4c324f75747075744f7261636c653a2063616e6e6f74207265706c616365206160448201527f6e206f757470757420616674657220746865206c6174657374206f757470757460648201527f20696e6465780000000000000000000000000000000000000000000000000000608482015260a4016107dc565b6000600384815481106114d5576114d561194c565b6000918252602090912060039091020160028101549091507f00000000000000000000000000000000000000000000000000000000000000009061152b906fffffffffffffffffffffffffffffffff16426119c2565b106115c45760405162461bcd60e51b815260206004820152604860248201527f4c324f75747075744f7261636c653a2063616e6e6f74207265706c616365206160448201527f6e206f757470757420746861742068617320616c7265616479206265656e206660648201527f696e616c697a6564000000000000000000000000000000000000000000000000608482015260a4016107dc565b6001810183905580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831617815560405183815284907fa1b831bb8b6b242db6d0988a6d21f869c610de9f703a5e45e1b7d3dc3137b9069060200160405180910390a250505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6060600061166d8361171e565b600101905060008167ffffffffffffffff81111561168d5761168d611aeb565b6040519080825280601f01601f1916602001820160405280156116b7576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846116c157509392505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611767577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611793576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106117b157662386f26fc10000830492506010015b6305f5e10083106117c9576305f5e100830492506008015b61271083106117dd57612710830492506004015b606483106117ef576064830492506002015b600a8310610f9b5760010192915050565b60006020828403121561181257600080fd5b5035919050565b60005b8381101561183457818101518382015260200161181c565b83811115611843576000848401525b50505050565b6020815260008251806020840152611868816040850160208701611819565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600080600080608085870312156118b057600080fd5b5050823594602084013594506040840135936060013592509050565b600080604083850312156118df57600080fd5b50508035926020909101359150565b73ffffffffffffffffffffffffffffffffffffffff8116811461191057600080fd5b50565b60008060006060848603121561192857600080fd5b83359250602084013591506040840135611941816118ee565b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156119bd576119bd61197b565b500190565b6000828210156119d4576119d461197b565b500390565b600084516119eb818460208901611819565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611a27816001850160208a01611819565b60019201918201528351611a42816002840160208801611819565b0160020195945050505050565b600060208284031215611a6157600080fd5b8151611a6c816118ee565b9392505050565b600082611aa9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ae657611ae661197b565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a", +} + +// L2OutputOracleABI is the input ABI used to generate the binding from. +// Deprecated: Use L2OutputOracleMetaData.ABI instead. +var L2OutputOracleABI = L2OutputOracleMetaData.ABI + +// L2OutputOracleBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use L2OutputOracleMetaData.Bin instead. +var L2OutputOracleBin = L2OutputOracleMetaData.Bin + +// DeployL2OutputOracle deploys a new Ethereum contract, binding an instance of L2OutputOracle to it. +func DeployL2OutputOracle(auth *bind.TransactOpts, backend bind.ContractBackend, _validatorPool common.Address, _colosseum common.Address, _submissionInterval *big.Int, _l2BlockTime *big.Int, _startingBlockNumber *big.Int, _startingTimestamp *big.Int, _finalizationPeriodSeconds *big.Int) (common.Address, *types.Transaction, *L2OutputOracle, error) { + parsed, err := L2OutputOracleMetaData.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(L2OutputOracleBin), backend, _validatorPool, _colosseum, _submissionInterval, _l2BlockTime, _startingBlockNumber, _startingTimestamp, _finalizationPeriodSeconds) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &L2OutputOracle{L2OutputOracleCaller: L2OutputOracleCaller{contract: contract}, L2OutputOracleTransactor: L2OutputOracleTransactor{contract: contract}, L2OutputOracleFilterer: L2OutputOracleFilterer{contract: contract}}, nil +} + +// L2OutputOracle is an auto generated Go binding around an Ethereum contract. +type L2OutputOracle struct { + L2OutputOracleCaller // Read-only binding to the contract + L2OutputOracleTransactor // Write-only binding to the contract + L2OutputOracleFilterer // Log filterer for contract events +} + +// L2OutputOracleCaller is an auto generated read-only Go binding around an Ethereum contract. +type L2OutputOracleCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L2OutputOracleTransactor is an auto generated write-only Go binding around an Ethereum contract. +type L2OutputOracleTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L2OutputOracleFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type L2OutputOracleFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L2OutputOracleSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type L2OutputOracleSession struct { + Contract *L2OutputOracle // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// L2OutputOracleCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type L2OutputOracleCallerSession struct { + Contract *L2OutputOracleCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// L2OutputOracleTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type L2OutputOracleTransactorSession struct { + Contract *L2OutputOracleTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// L2OutputOracleRaw is an auto generated low-level Go binding around an Ethereum contract. +type L2OutputOracleRaw struct { + Contract *L2OutputOracle // Generic contract binding to access the raw methods on +} + +// L2OutputOracleCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type L2OutputOracleCallerRaw struct { + Contract *L2OutputOracleCaller // Generic read-only contract binding to access the raw methods on +} + +// L2OutputOracleTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type L2OutputOracleTransactorRaw struct { + Contract *L2OutputOracleTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewL2OutputOracle creates a new instance of L2OutputOracle, bound to a specific deployed contract. +func NewL2OutputOracle(address common.Address, backend bind.ContractBackend) (*L2OutputOracle, error) { + contract, err := bindL2OutputOracle(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &L2OutputOracle{L2OutputOracleCaller: L2OutputOracleCaller{contract: contract}, L2OutputOracleTransactor: L2OutputOracleTransactor{contract: contract}, L2OutputOracleFilterer: L2OutputOracleFilterer{contract: contract}}, nil +} + +// NewL2OutputOracleCaller creates a new read-only instance of L2OutputOracle, bound to a specific deployed contract. +func NewL2OutputOracleCaller(address common.Address, caller bind.ContractCaller) (*L2OutputOracleCaller, error) { + contract, err := bindL2OutputOracle(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &L2OutputOracleCaller{contract: contract}, nil +} + +// NewL2OutputOracleTransactor creates a new write-only instance of L2OutputOracle, bound to a specific deployed contract. +func NewL2OutputOracleTransactor(address common.Address, transactor bind.ContractTransactor) (*L2OutputOracleTransactor, error) { + contract, err := bindL2OutputOracle(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &L2OutputOracleTransactor{contract: contract}, nil +} + +// NewL2OutputOracleFilterer creates a new log filterer instance of L2OutputOracle, bound to a specific deployed contract. +func NewL2OutputOracleFilterer(address common.Address, filterer bind.ContractFilterer) (*L2OutputOracleFilterer, error) { + contract, err := bindL2OutputOracle(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &L2OutputOracleFilterer{contract: contract}, nil +} + +// bindL2OutputOracle binds a generic wrapper to an already deployed contract. +func bindL2OutputOracle(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := L2OutputOracleMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_L2OutputOracle *L2OutputOracleRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _L2OutputOracle.Contract.L2OutputOracleCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_L2OutputOracle *L2OutputOracleRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L2OutputOracle.Contract.L2OutputOracleTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_L2OutputOracle *L2OutputOracleRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _L2OutputOracle.Contract.L2OutputOracleTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_L2OutputOracle *L2OutputOracleCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _L2OutputOracle.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_L2OutputOracle *L2OutputOracleTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L2OutputOracle.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_L2OutputOracle *L2OutputOracleTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _L2OutputOracle.Contract.contract.Transact(opts, method, params...) +} + +// COLOSSEUM is a free data retrieval call binding the contract method 0x9e45e8f4. +// +// Solidity: function COLOSSEUM() view returns(address) +func (_L2OutputOracle *L2OutputOracleCaller) COLOSSEUM(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L2OutputOracle.contract.Call(opts, &out, "COLOSSEUM") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// COLOSSEUM is a free data retrieval call binding the contract method 0x9e45e8f4. +// +// Solidity: function COLOSSEUM() view returns(address) +func (_L2OutputOracle *L2OutputOracleSession) COLOSSEUM() (common.Address, error) { + return _L2OutputOracle.Contract.COLOSSEUM(&_L2OutputOracle.CallOpts) +} + +// COLOSSEUM is a free data retrieval call binding the contract method 0x9e45e8f4. +// +// Solidity: function COLOSSEUM() view returns(address) +func (_L2OutputOracle *L2OutputOracleCallerSession) COLOSSEUM() (common.Address, error) { + return _L2OutputOracle.Contract.COLOSSEUM(&_L2OutputOracle.CallOpts) +} + +// FINALIZATIONPERIODSECONDS is a free data retrieval call binding the contract method 0xf4daa291. +// +// Solidity: function FINALIZATION_PERIOD_SECONDS() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCaller) FINALIZATIONPERIODSECONDS(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _L2OutputOracle.contract.Call(opts, &out, "FINALIZATION_PERIOD_SECONDS") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// FINALIZATIONPERIODSECONDS is a free data retrieval call binding the contract method 0xf4daa291. +// +// Solidity: function FINALIZATION_PERIOD_SECONDS() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleSession) FINALIZATIONPERIODSECONDS() (*big.Int, error) { + return _L2OutputOracle.Contract.FINALIZATIONPERIODSECONDS(&_L2OutputOracle.CallOpts) +} + +// FINALIZATIONPERIODSECONDS is a free data retrieval call binding the contract method 0xf4daa291. +// +// Solidity: function FINALIZATION_PERIOD_SECONDS() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCallerSession) FINALIZATIONPERIODSECONDS() (*big.Int, error) { + return _L2OutputOracle.Contract.FINALIZATIONPERIODSECONDS(&_L2OutputOracle.CallOpts) +} + +// L2BLOCKTIME is a free data retrieval call binding the contract method 0x002134cc. +// +// Solidity: function L2_BLOCK_TIME() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCaller) L2BLOCKTIME(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _L2OutputOracle.contract.Call(opts, &out, "L2_BLOCK_TIME") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// L2BLOCKTIME is a free data retrieval call binding the contract method 0x002134cc. +// +// Solidity: function L2_BLOCK_TIME() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleSession) L2BLOCKTIME() (*big.Int, error) { + return _L2OutputOracle.Contract.L2BLOCKTIME(&_L2OutputOracle.CallOpts) +} + +// L2BLOCKTIME is a free data retrieval call binding the contract method 0x002134cc. +// +// Solidity: function L2_BLOCK_TIME() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCallerSession) L2BLOCKTIME() (*big.Int, error) { + return _L2OutputOracle.Contract.L2BLOCKTIME(&_L2OutputOracle.CallOpts) +} + +// SUBMISSIONINTERVAL is a free data retrieval call binding the contract method 0x529933df. +// +// Solidity: function SUBMISSION_INTERVAL() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCaller) SUBMISSIONINTERVAL(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _L2OutputOracle.contract.Call(opts, &out, "SUBMISSION_INTERVAL") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// SUBMISSIONINTERVAL is a free data retrieval call binding the contract method 0x529933df. +// +// Solidity: function SUBMISSION_INTERVAL() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleSession) SUBMISSIONINTERVAL() (*big.Int, error) { + return _L2OutputOracle.Contract.SUBMISSIONINTERVAL(&_L2OutputOracle.CallOpts) +} + +// SUBMISSIONINTERVAL is a free data retrieval call binding the contract method 0x529933df. +// +// Solidity: function SUBMISSION_INTERVAL() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCallerSession) SUBMISSIONINTERVAL() (*big.Int, error) { + return _L2OutputOracle.Contract.SUBMISSIONINTERVAL(&_L2OutputOracle.CallOpts) +} + +// VALIDATORPOOL is a free data retrieval call binding the contract method 0xb98debbf. +// +// Solidity: function VALIDATOR_POOL() view returns(address) +func (_L2OutputOracle *L2OutputOracleCaller) VALIDATORPOOL(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L2OutputOracle.contract.Call(opts, &out, "VALIDATOR_POOL") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// VALIDATORPOOL is a free data retrieval call binding the contract method 0xb98debbf. +// +// Solidity: function VALIDATOR_POOL() view returns(address) +func (_L2OutputOracle *L2OutputOracleSession) VALIDATORPOOL() (common.Address, error) { + return _L2OutputOracle.Contract.VALIDATORPOOL(&_L2OutputOracle.CallOpts) +} + +// VALIDATORPOOL is a free data retrieval call binding the contract method 0xb98debbf. +// +// Solidity: function VALIDATOR_POOL() view returns(address) +func (_L2OutputOracle *L2OutputOracleCallerSession) VALIDATORPOOL() (common.Address, error) { + return _L2OutputOracle.Contract.VALIDATORPOOL(&_L2OutputOracle.CallOpts) +} + +// ComputeL2Timestamp is a free data retrieval call binding the contract method 0xd1de856c. +// +// Solidity: function computeL2Timestamp(uint256 _l2BlockNumber) view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCaller) ComputeL2Timestamp(opts *bind.CallOpts, _l2BlockNumber *big.Int) (*big.Int, error) { + var out []interface{} + err := _L2OutputOracle.contract.Call(opts, &out, "computeL2Timestamp", _l2BlockNumber) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ComputeL2Timestamp is a free data retrieval call binding the contract method 0xd1de856c. +// +// Solidity: function computeL2Timestamp(uint256 _l2BlockNumber) view returns(uint256) +func (_L2OutputOracle *L2OutputOracleSession) ComputeL2Timestamp(_l2BlockNumber *big.Int) (*big.Int, error) { + return _L2OutputOracle.Contract.ComputeL2Timestamp(&_L2OutputOracle.CallOpts, _l2BlockNumber) +} + +// ComputeL2Timestamp is a free data retrieval call binding the contract method 0xd1de856c. +// +// Solidity: function computeL2Timestamp(uint256 _l2BlockNumber) view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCallerSession) ComputeL2Timestamp(_l2BlockNumber *big.Int) (*big.Int, error) { + return _L2OutputOracle.Contract.ComputeL2Timestamp(&_L2OutputOracle.CallOpts, _l2BlockNumber) +} + +// FinalizedAt is a free data retrieval call binding the contract method 0xa48ea6de. +// +// Solidity: function finalizedAt(uint256 _outputIndex) view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCaller) FinalizedAt(opts *bind.CallOpts, _outputIndex *big.Int) (*big.Int, error) { + var out []interface{} + err := _L2OutputOracle.contract.Call(opts, &out, "finalizedAt", _outputIndex) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// FinalizedAt is a free data retrieval call binding the contract method 0xa48ea6de. +// +// Solidity: function finalizedAt(uint256 _outputIndex) view returns(uint256) +func (_L2OutputOracle *L2OutputOracleSession) FinalizedAt(_outputIndex *big.Int) (*big.Int, error) { + return _L2OutputOracle.Contract.FinalizedAt(&_L2OutputOracle.CallOpts, _outputIndex) +} + +// FinalizedAt is a free data retrieval call binding the contract method 0xa48ea6de. +// +// Solidity: function finalizedAt(uint256 _outputIndex) view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCallerSession) FinalizedAt(_outputIndex *big.Int) (*big.Int, error) { + return _L2OutputOracle.Contract.FinalizedAt(&_L2OutputOracle.CallOpts, _outputIndex) +} + +// GetL2Output is a free data retrieval call binding the contract method 0xa25ae557. +// +// Solidity: function getL2Output(uint256 _l2OutputIndex) view returns((address,bytes32,uint128,uint128)) +func (_L2OutputOracle *L2OutputOracleCaller) GetL2Output(opts *bind.CallOpts, _l2OutputIndex *big.Int) (TypesCheckpointOutput, error) { + var out []interface{} + err := _L2OutputOracle.contract.Call(opts, &out, "getL2Output", _l2OutputIndex) + + if err != nil { + return *new(TypesCheckpointOutput), err + } + + out0 := *abi.ConvertType(out[0], new(TypesCheckpointOutput)).(*TypesCheckpointOutput) + + return out0, err + +} + +// GetL2Output is a free data retrieval call binding the contract method 0xa25ae557. +// +// Solidity: function getL2Output(uint256 _l2OutputIndex) view returns((address,bytes32,uint128,uint128)) +func (_L2OutputOracle *L2OutputOracleSession) GetL2Output(_l2OutputIndex *big.Int) (TypesCheckpointOutput, error) { + return _L2OutputOracle.Contract.GetL2Output(&_L2OutputOracle.CallOpts, _l2OutputIndex) +} + +// GetL2Output is a free data retrieval call binding the contract method 0xa25ae557. +// +// Solidity: function getL2Output(uint256 _l2OutputIndex) view returns((address,bytes32,uint128,uint128)) +func (_L2OutputOracle *L2OutputOracleCallerSession) GetL2Output(_l2OutputIndex *big.Int) (TypesCheckpointOutput, error) { + return _L2OutputOracle.Contract.GetL2Output(&_L2OutputOracle.CallOpts, _l2OutputIndex) +} + +// GetL2OutputAfter is a free data retrieval call binding the contract method 0xcf8e5cf0. +// +// Solidity: function getL2OutputAfter(uint256 _l2BlockNumber) view returns((address,bytes32,uint128,uint128)) +func (_L2OutputOracle *L2OutputOracleCaller) GetL2OutputAfter(opts *bind.CallOpts, _l2BlockNumber *big.Int) (TypesCheckpointOutput, error) { + var out []interface{} + err := _L2OutputOracle.contract.Call(opts, &out, "getL2OutputAfter", _l2BlockNumber) + + if err != nil { + return *new(TypesCheckpointOutput), err + } + + out0 := *abi.ConvertType(out[0], new(TypesCheckpointOutput)).(*TypesCheckpointOutput) + + return out0, err + +} + +// GetL2OutputAfter is a free data retrieval call binding the contract method 0xcf8e5cf0. +// +// Solidity: function getL2OutputAfter(uint256 _l2BlockNumber) view returns((address,bytes32,uint128,uint128)) +func (_L2OutputOracle *L2OutputOracleSession) GetL2OutputAfter(_l2BlockNumber *big.Int) (TypesCheckpointOutput, error) { + return _L2OutputOracle.Contract.GetL2OutputAfter(&_L2OutputOracle.CallOpts, _l2BlockNumber) +} + +// GetL2OutputAfter is a free data retrieval call binding the contract method 0xcf8e5cf0. +// +// Solidity: function getL2OutputAfter(uint256 _l2BlockNumber) view returns((address,bytes32,uint128,uint128)) +func (_L2OutputOracle *L2OutputOracleCallerSession) GetL2OutputAfter(_l2BlockNumber *big.Int) (TypesCheckpointOutput, error) { + return _L2OutputOracle.Contract.GetL2OutputAfter(&_L2OutputOracle.CallOpts, _l2BlockNumber) +} + +// GetL2OutputIndexAfter is a free data retrieval call binding the contract method 0x7f006420. +// +// Solidity: function getL2OutputIndexAfter(uint256 _l2BlockNumber) view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCaller) GetL2OutputIndexAfter(opts *bind.CallOpts, _l2BlockNumber *big.Int) (*big.Int, error) { + var out []interface{} + err := _L2OutputOracle.contract.Call(opts, &out, "getL2OutputIndexAfter", _l2BlockNumber) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetL2OutputIndexAfter is a free data retrieval call binding the contract method 0x7f006420. +// +// Solidity: function getL2OutputIndexAfter(uint256 _l2BlockNumber) view returns(uint256) +func (_L2OutputOracle *L2OutputOracleSession) GetL2OutputIndexAfter(_l2BlockNumber *big.Int) (*big.Int, error) { + return _L2OutputOracle.Contract.GetL2OutputIndexAfter(&_L2OutputOracle.CallOpts, _l2BlockNumber) +} + +// GetL2OutputIndexAfter is a free data retrieval call binding the contract method 0x7f006420. +// +// Solidity: function getL2OutputIndexAfter(uint256 _l2BlockNumber) view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCallerSession) GetL2OutputIndexAfter(_l2BlockNumber *big.Int) (*big.Int, error) { + return _L2OutputOracle.Contract.GetL2OutputIndexAfter(&_L2OutputOracle.CallOpts, _l2BlockNumber) +} + +// GetSubmitter is a free data retrieval call binding the contract method 0xb0ea09a8. +// +// Solidity: function getSubmitter(uint256 _outputIndex) view returns(address) +func (_L2OutputOracle *L2OutputOracleCaller) GetSubmitter(opts *bind.CallOpts, _outputIndex *big.Int) (common.Address, error) { + var out []interface{} + err := _L2OutputOracle.contract.Call(opts, &out, "getSubmitter", _outputIndex) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetSubmitter is a free data retrieval call binding the contract method 0xb0ea09a8. +// +// Solidity: function getSubmitter(uint256 _outputIndex) view returns(address) +func (_L2OutputOracle *L2OutputOracleSession) GetSubmitter(_outputIndex *big.Int) (common.Address, error) { + return _L2OutputOracle.Contract.GetSubmitter(&_L2OutputOracle.CallOpts, _outputIndex) +} + +// GetSubmitter is a free data retrieval call binding the contract method 0xb0ea09a8. +// +// Solidity: function getSubmitter(uint256 _outputIndex) view returns(address) +func (_L2OutputOracle *L2OutputOracleCallerSession) GetSubmitter(_outputIndex *big.Int) (common.Address, error) { + return _L2OutputOracle.Contract.GetSubmitter(&_L2OutputOracle.CallOpts, _outputIndex) +} + +// IsFinalized is a free data retrieval call binding the contract method 0x33727c4d. +// +// Solidity: function isFinalized(uint256 _outputIndex) view returns(bool) +func (_L2OutputOracle *L2OutputOracleCaller) IsFinalized(opts *bind.CallOpts, _outputIndex *big.Int) (bool, error) { + var out []interface{} + err := _L2OutputOracle.contract.Call(opts, &out, "isFinalized", _outputIndex) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsFinalized is a free data retrieval call binding the contract method 0x33727c4d. +// +// Solidity: function isFinalized(uint256 _outputIndex) view returns(bool) +func (_L2OutputOracle *L2OutputOracleSession) IsFinalized(_outputIndex *big.Int) (bool, error) { + return _L2OutputOracle.Contract.IsFinalized(&_L2OutputOracle.CallOpts, _outputIndex) +} + +// IsFinalized is a free data retrieval call binding the contract method 0x33727c4d. +// +// Solidity: function isFinalized(uint256 _outputIndex) view returns(bool) +func (_L2OutputOracle *L2OutputOracleCallerSession) IsFinalized(_outputIndex *big.Int) (bool, error) { + return _L2OutputOracle.Contract.IsFinalized(&_L2OutputOracle.CallOpts, _outputIndex) +} + +// LatestBlockNumber is a free data retrieval call binding the contract method 0x4599c788. +// +// Solidity: function latestBlockNumber() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCaller) LatestBlockNumber(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _L2OutputOracle.contract.Call(opts, &out, "latestBlockNumber") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// LatestBlockNumber is a free data retrieval call binding the contract method 0x4599c788. +// +// Solidity: function latestBlockNumber() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleSession) LatestBlockNumber() (*big.Int, error) { + return _L2OutputOracle.Contract.LatestBlockNumber(&_L2OutputOracle.CallOpts) +} + +// LatestBlockNumber is a free data retrieval call binding the contract method 0x4599c788. +// +// Solidity: function latestBlockNumber() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCallerSession) LatestBlockNumber() (*big.Int, error) { + return _L2OutputOracle.Contract.LatestBlockNumber(&_L2OutputOracle.CallOpts) +} + +// LatestOutputIndex is a free data retrieval call binding the contract method 0x69f16eec. +// +// Solidity: function latestOutputIndex() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCaller) LatestOutputIndex(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _L2OutputOracle.contract.Call(opts, &out, "latestOutputIndex") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// LatestOutputIndex is a free data retrieval call binding the contract method 0x69f16eec. +// +// Solidity: function latestOutputIndex() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleSession) LatestOutputIndex() (*big.Int, error) { + return _L2OutputOracle.Contract.LatestOutputIndex(&_L2OutputOracle.CallOpts) +} + +// LatestOutputIndex is a free data retrieval call binding the contract method 0x69f16eec. +// +// Solidity: function latestOutputIndex() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCallerSession) LatestOutputIndex() (*big.Int, error) { + return _L2OutputOracle.Contract.LatestOutputIndex(&_L2OutputOracle.CallOpts) +} + +// NextBlockNumber is a free data retrieval call binding the contract method 0xdcec3348. +// +// Solidity: function nextBlockNumber() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCaller) NextBlockNumber(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _L2OutputOracle.contract.Call(opts, &out, "nextBlockNumber") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// NextBlockNumber is a free data retrieval call binding the contract method 0xdcec3348. +// +// Solidity: function nextBlockNumber() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleSession) NextBlockNumber() (*big.Int, error) { + return _L2OutputOracle.Contract.NextBlockNumber(&_L2OutputOracle.CallOpts) +} + +// NextBlockNumber is a free data retrieval call binding the contract method 0xdcec3348. +// +// Solidity: function nextBlockNumber() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCallerSession) NextBlockNumber() (*big.Int, error) { + return _L2OutputOracle.Contract.NextBlockNumber(&_L2OutputOracle.CallOpts) +} + +// NextOutputIndex is a free data retrieval call binding the contract method 0x6abcf563. +// +// Solidity: function nextOutputIndex() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCaller) NextOutputIndex(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _L2OutputOracle.contract.Call(opts, &out, "nextOutputIndex") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// NextOutputIndex is a free data retrieval call binding the contract method 0x6abcf563. +// +// Solidity: function nextOutputIndex() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleSession) NextOutputIndex() (*big.Int, error) { + return _L2OutputOracle.Contract.NextOutputIndex(&_L2OutputOracle.CallOpts) +} + +// NextOutputIndex is a free data retrieval call binding the contract method 0x6abcf563. +// +// Solidity: function nextOutputIndex() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCallerSession) NextOutputIndex() (*big.Int, error) { + return _L2OutputOracle.Contract.NextOutputIndex(&_L2OutputOracle.CallOpts) +} + +// StartingBlockNumber is a free data retrieval call binding the contract method 0x70872aa5. +// +// Solidity: function startingBlockNumber() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCaller) StartingBlockNumber(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _L2OutputOracle.contract.Call(opts, &out, "startingBlockNumber") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// StartingBlockNumber is a free data retrieval call binding the contract method 0x70872aa5. +// +// Solidity: function startingBlockNumber() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleSession) StartingBlockNumber() (*big.Int, error) { + return _L2OutputOracle.Contract.StartingBlockNumber(&_L2OutputOracle.CallOpts) +} + +// StartingBlockNumber is a free data retrieval call binding the contract method 0x70872aa5. +// +// Solidity: function startingBlockNumber() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCallerSession) StartingBlockNumber() (*big.Int, error) { + return _L2OutputOracle.Contract.StartingBlockNumber(&_L2OutputOracle.CallOpts) +} + +// StartingTimestamp is a free data retrieval call binding the contract method 0x88786272. +// +// Solidity: function startingTimestamp() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCaller) StartingTimestamp(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _L2OutputOracle.contract.Call(opts, &out, "startingTimestamp") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// StartingTimestamp is a free data retrieval call binding the contract method 0x88786272. +// +// Solidity: function startingTimestamp() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleSession) StartingTimestamp() (*big.Int, error) { + return _L2OutputOracle.Contract.StartingTimestamp(&_L2OutputOracle.CallOpts) +} + +// StartingTimestamp is a free data retrieval call binding the contract method 0x88786272. +// +// Solidity: function startingTimestamp() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCallerSession) StartingTimestamp() (*big.Int, error) { + return _L2OutputOracle.Contract.StartingTimestamp(&_L2OutputOracle.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L2OutputOracle *L2OutputOracleCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _L2OutputOracle.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L2OutputOracle *L2OutputOracleSession) Version() (string, error) { + return _L2OutputOracle.Contract.Version(&_L2OutputOracle.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L2OutputOracle *L2OutputOracleCallerSession) Version() (string, error) { + return _L2OutputOracle.Contract.Version(&_L2OutputOracle.CallOpts) +} + +// Initialize is a paid mutator transaction binding the contract method 0xe4a30116. +// +// Solidity: function initialize(uint256 _startingBlockNumber, uint256 _startingTimestamp) returns() +func (_L2OutputOracle *L2OutputOracleTransactor) Initialize(opts *bind.TransactOpts, _startingBlockNumber *big.Int, _startingTimestamp *big.Int) (*types.Transaction, error) { + return _L2OutputOracle.contract.Transact(opts, "initialize", _startingBlockNumber, _startingTimestamp) +} + +// Initialize is a paid mutator transaction binding the contract method 0xe4a30116. +// +// Solidity: function initialize(uint256 _startingBlockNumber, uint256 _startingTimestamp) returns() +func (_L2OutputOracle *L2OutputOracleSession) Initialize(_startingBlockNumber *big.Int, _startingTimestamp *big.Int) (*types.Transaction, error) { + return _L2OutputOracle.Contract.Initialize(&_L2OutputOracle.TransactOpts, _startingBlockNumber, _startingTimestamp) +} + +// Initialize is a paid mutator transaction binding the contract method 0xe4a30116. +// +// Solidity: function initialize(uint256 _startingBlockNumber, uint256 _startingTimestamp) returns() +func (_L2OutputOracle *L2OutputOracleTransactorSession) Initialize(_startingBlockNumber *big.Int, _startingTimestamp *big.Int) (*types.Transaction, error) { + return _L2OutputOracle.Contract.Initialize(&_L2OutputOracle.TransactOpts, _startingBlockNumber, _startingTimestamp) +} + +// ReplaceL2Output is a paid mutator transaction binding the contract method 0xe6646723. +// +// Solidity: function replaceL2Output(uint256 _l2OutputIndex, bytes32 _newOutputRoot, address _submitter) returns() +func (_L2OutputOracle *L2OutputOracleTransactor) ReplaceL2Output(opts *bind.TransactOpts, _l2OutputIndex *big.Int, _newOutputRoot [32]byte, _submitter common.Address) (*types.Transaction, error) { + return _L2OutputOracle.contract.Transact(opts, "replaceL2Output", _l2OutputIndex, _newOutputRoot, _submitter) +} + +// ReplaceL2Output is a paid mutator transaction binding the contract method 0xe6646723. +// +// Solidity: function replaceL2Output(uint256 _l2OutputIndex, bytes32 _newOutputRoot, address _submitter) returns() +func (_L2OutputOracle *L2OutputOracleSession) ReplaceL2Output(_l2OutputIndex *big.Int, _newOutputRoot [32]byte, _submitter common.Address) (*types.Transaction, error) { + return _L2OutputOracle.Contract.ReplaceL2Output(&_L2OutputOracle.TransactOpts, _l2OutputIndex, _newOutputRoot, _submitter) +} + +// ReplaceL2Output is a paid mutator transaction binding the contract method 0xe6646723. +// +// Solidity: function replaceL2Output(uint256 _l2OutputIndex, bytes32 _newOutputRoot, address _submitter) returns() +func (_L2OutputOracle *L2OutputOracleTransactorSession) ReplaceL2Output(_l2OutputIndex *big.Int, _newOutputRoot [32]byte, _submitter common.Address) (*types.Transaction, error) { + return _L2OutputOracle.Contract.ReplaceL2Output(&_L2OutputOracle.TransactOpts, _l2OutputIndex, _newOutputRoot, _submitter) +} + +// SubmitL2Output is a paid mutator transaction binding the contract method 0x5a045f78. +// +// Solidity: function submitL2Output(bytes32 _outputRoot, uint256 _l2BlockNumber, bytes32 _l1BlockHash, uint256 _l1BlockNumber) payable returns() +func (_L2OutputOracle *L2OutputOracleTransactor) SubmitL2Output(opts *bind.TransactOpts, _outputRoot [32]byte, _l2BlockNumber *big.Int, _l1BlockHash [32]byte, _l1BlockNumber *big.Int) (*types.Transaction, error) { + return _L2OutputOracle.contract.Transact(opts, "submitL2Output", _outputRoot, _l2BlockNumber, _l1BlockHash, _l1BlockNumber) +} + +// SubmitL2Output is a paid mutator transaction binding the contract method 0x5a045f78. +// +// Solidity: function submitL2Output(bytes32 _outputRoot, uint256 _l2BlockNumber, bytes32 _l1BlockHash, uint256 _l1BlockNumber) payable returns() +func (_L2OutputOracle *L2OutputOracleSession) SubmitL2Output(_outputRoot [32]byte, _l2BlockNumber *big.Int, _l1BlockHash [32]byte, _l1BlockNumber *big.Int) (*types.Transaction, error) { + return _L2OutputOracle.Contract.SubmitL2Output(&_L2OutputOracle.TransactOpts, _outputRoot, _l2BlockNumber, _l1BlockHash, _l1BlockNumber) +} + +// SubmitL2Output is a paid mutator transaction binding the contract method 0x5a045f78. +// +// Solidity: function submitL2Output(bytes32 _outputRoot, uint256 _l2BlockNumber, bytes32 _l1BlockHash, uint256 _l1BlockNumber) payable returns() +func (_L2OutputOracle *L2OutputOracleTransactorSession) SubmitL2Output(_outputRoot [32]byte, _l2BlockNumber *big.Int, _l1BlockHash [32]byte, _l1BlockNumber *big.Int) (*types.Transaction, error) { + return _L2OutputOracle.Contract.SubmitL2Output(&_L2OutputOracle.TransactOpts, _outputRoot, _l2BlockNumber, _l1BlockHash, _l1BlockNumber) +} + +// L2OutputOracleInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the L2OutputOracle contract. +type L2OutputOracleInitializedIterator struct { + Event *L2OutputOracleInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L2OutputOracleInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L2OutputOracleInitialized) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L2OutputOracleInitialized) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L2OutputOracleInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L2OutputOracleInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L2OutputOracleInitialized represents a Initialized event raised by the L2OutputOracle contract. +type L2OutputOracleInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_L2OutputOracle *L2OutputOracleFilterer) FilterInitialized(opts *bind.FilterOpts) (*L2OutputOracleInitializedIterator, error) { + + logs, sub, err := _L2OutputOracle.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &L2OutputOracleInitializedIterator{contract: _L2OutputOracle.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_L2OutputOracle *L2OutputOracleFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *L2OutputOracleInitialized) (event.Subscription, error) { + + logs, sub, err := _L2OutputOracle.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: + // New log arrived, parse the event and forward to the user + event := new(L2OutputOracleInitialized) + if err := _L2OutputOracle.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 +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_L2OutputOracle *L2OutputOracleFilterer) ParseInitialized(log types.Log) (*L2OutputOracleInitialized, error) { + event := new(L2OutputOracleInitialized) + if err := _L2OutputOracle.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// L2OutputOracleOutputReplacedIterator is returned from FilterOutputReplaced and is used to iterate over the raw logs and unpacked data for OutputReplaced events raised by the L2OutputOracle contract. +type L2OutputOracleOutputReplacedIterator struct { + Event *L2OutputOracleOutputReplaced // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L2OutputOracleOutputReplacedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L2OutputOracleOutputReplaced) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L2OutputOracleOutputReplaced) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L2OutputOracleOutputReplacedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L2OutputOracleOutputReplacedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L2OutputOracleOutputReplaced represents a OutputReplaced event raised by the L2OutputOracle contract. +type L2OutputOracleOutputReplaced struct { + OutputIndex *big.Int + NewOutputRoot [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOutputReplaced is a free log retrieval operation binding the contract event 0xa1b831bb8b6b242db6d0988a6d21f869c610de9f703a5e45e1b7d3dc3137b906. +// +// Solidity: event OutputReplaced(uint256 indexed outputIndex, bytes32 newOutputRoot) +func (_L2OutputOracle *L2OutputOracleFilterer) FilterOutputReplaced(opts *bind.FilterOpts, outputIndex []*big.Int) (*L2OutputOracleOutputReplacedIterator, error) { + + var outputIndexRule []interface{} + for _, outputIndexItem := range outputIndex { + outputIndexRule = append(outputIndexRule, outputIndexItem) + } + + logs, sub, err := _L2OutputOracle.contract.FilterLogs(opts, "OutputReplaced", outputIndexRule) + if err != nil { + return nil, err + } + return &L2OutputOracleOutputReplacedIterator{contract: _L2OutputOracle.contract, event: "OutputReplaced", logs: logs, sub: sub}, nil +} + +// WatchOutputReplaced is a free log subscription operation binding the contract event 0xa1b831bb8b6b242db6d0988a6d21f869c610de9f703a5e45e1b7d3dc3137b906. +// +// Solidity: event OutputReplaced(uint256 indexed outputIndex, bytes32 newOutputRoot) +func (_L2OutputOracle *L2OutputOracleFilterer) WatchOutputReplaced(opts *bind.WatchOpts, sink chan<- *L2OutputOracleOutputReplaced, outputIndex []*big.Int) (event.Subscription, error) { + + var outputIndexRule []interface{} + for _, outputIndexItem := range outputIndex { + outputIndexRule = append(outputIndexRule, outputIndexItem) + } + + logs, sub, err := _L2OutputOracle.contract.WatchLogs(opts, "OutputReplaced", outputIndexRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L2OutputOracleOutputReplaced) + if err := _L2OutputOracle.contract.UnpackLog(event, "OutputReplaced", 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 +} + +// ParseOutputReplaced is a log parse operation binding the contract event 0xa1b831bb8b6b242db6d0988a6d21f869c610de9f703a5e45e1b7d3dc3137b906. +// +// Solidity: event OutputReplaced(uint256 indexed outputIndex, bytes32 newOutputRoot) +func (_L2OutputOracle *L2OutputOracleFilterer) ParseOutputReplaced(log types.Log) (*L2OutputOracleOutputReplaced, error) { + event := new(L2OutputOracleOutputReplaced) + if err := _L2OutputOracle.contract.UnpackLog(event, "OutputReplaced", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// L2OutputOracleOutputSubmittedIterator is returned from FilterOutputSubmitted and is used to iterate over the raw logs and unpacked data for OutputSubmitted events raised by the L2OutputOracle contract. +type L2OutputOracleOutputSubmittedIterator struct { + Event *L2OutputOracleOutputSubmitted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L2OutputOracleOutputSubmittedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L2OutputOracleOutputSubmitted) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L2OutputOracleOutputSubmitted) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L2OutputOracleOutputSubmittedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L2OutputOracleOutputSubmittedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L2OutputOracleOutputSubmitted represents a OutputSubmitted event raised by the L2OutputOracle contract. +type L2OutputOracleOutputSubmitted struct { + OutputRoot [32]byte + L2OutputIndex *big.Int + L2BlockNumber *big.Int + L1Timestamp *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOutputSubmitted is a free log retrieval operation binding the contract event 0x457b4388026260019ae0b0b4f16c98235d74fe7359be469bdcba16e6d0d49689. +// +// Solidity: event OutputSubmitted(bytes32 indexed outputRoot, uint256 indexed l2OutputIndex, uint256 indexed l2BlockNumber, uint256 l1Timestamp) +func (_L2OutputOracle *L2OutputOracleFilterer) FilterOutputSubmitted(opts *bind.FilterOpts, outputRoot [][32]byte, l2OutputIndex []*big.Int, l2BlockNumber []*big.Int) (*L2OutputOracleOutputSubmittedIterator, error) { + + var outputRootRule []interface{} + for _, outputRootItem := range outputRoot { + outputRootRule = append(outputRootRule, outputRootItem) + } + var l2OutputIndexRule []interface{} + for _, l2OutputIndexItem := range l2OutputIndex { + l2OutputIndexRule = append(l2OutputIndexRule, l2OutputIndexItem) + } + var l2BlockNumberRule []interface{} + for _, l2BlockNumberItem := range l2BlockNumber { + l2BlockNumberRule = append(l2BlockNumberRule, l2BlockNumberItem) + } + + logs, sub, err := _L2OutputOracle.contract.FilterLogs(opts, "OutputSubmitted", outputRootRule, l2OutputIndexRule, l2BlockNumberRule) + if err != nil { + return nil, err + } + return &L2OutputOracleOutputSubmittedIterator{contract: _L2OutputOracle.contract, event: "OutputSubmitted", logs: logs, sub: sub}, nil +} + +// WatchOutputSubmitted is a free log subscription operation binding the contract event 0x457b4388026260019ae0b0b4f16c98235d74fe7359be469bdcba16e6d0d49689. +// +// Solidity: event OutputSubmitted(bytes32 indexed outputRoot, uint256 indexed l2OutputIndex, uint256 indexed l2BlockNumber, uint256 l1Timestamp) +func (_L2OutputOracle *L2OutputOracleFilterer) WatchOutputSubmitted(opts *bind.WatchOpts, sink chan<- *L2OutputOracleOutputSubmitted, outputRoot [][32]byte, l2OutputIndex []*big.Int, l2BlockNumber []*big.Int) (event.Subscription, error) { + + var outputRootRule []interface{} + for _, outputRootItem := range outputRoot { + outputRootRule = append(outputRootRule, outputRootItem) + } + var l2OutputIndexRule []interface{} + for _, l2OutputIndexItem := range l2OutputIndex { + l2OutputIndexRule = append(l2OutputIndexRule, l2OutputIndexItem) + } + var l2BlockNumberRule []interface{} + for _, l2BlockNumberItem := range l2BlockNumber { + l2BlockNumberRule = append(l2BlockNumberRule, l2BlockNumberItem) + } + + logs, sub, err := _L2OutputOracle.contract.WatchLogs(opts, "OutputSubmitted", outputRootRule, l2OutputIndexRule, l2BlockNumberRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L2OutputOracleOutputSubmitted) + if err := _L2OutputOracle.contract.UnpackLog(event, "OutputSubmitted", 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 +} + +// ParseOutputSubmitted is a log parse operation binding the contract event 0x457b4388026260019ae0b0b4f16c98235d74fe7359be469bdcba16e6d0d49689. +// +// Solidity: event OutputSubmitted(bytes32 indexed outputRoot, uint256 indexed l2OutputIndex, uint256 indexed l2BlockNumber, uint256 l1Timestamp) +func (_L2OutputOracle *L2OutputOracleFilterer) ParseOutputSubmitted(log types.Log) (*L2OutputOracleOutputSubmitted, error) { + event := new(L2OutputOracleOutputSubmitted) + if err := _L2OutputOracle.contract.UnpackLog(event, "OutputSubmitted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/kroma-bindings/bindings/l2outputoracle_more.go b/kroma-bindings/bindings/l2outputoracle_more.go new file mode 100644 index 000000000..a8f9d632a --- /dev/null +++ b/kroma-bindings/bindings/l2outputoracle_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const L2OutputOracleStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L1/L2OutputOracle.sol:L2OutputOracle\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/L1/L2OutputOracle.sol:L2OutputOracle\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/L1/L2OutputOracle.sol:L2OutputOracle\",\"label\":\"startingBlockNumber\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_uint256\"},{\"astId\":1003,\"contract\":\"contracts/L1/L2OutputOracle.sol:L2OutputOracle\",\"label\":\"startingTimestamp\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_uint256\"},{\"astId\":1004,\"contract\":\"contracts/L1/L2OutputOracle.sol:L2OutputOracle\",\"label\":\"l2Outputs\",\"offset\":0,\"slot\":\"3\",\"type\":\"t_array(t_struct(CheckpointOutput)1005_storage)dyn_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_struct(CheckpointOutput)1005_storage)dyn_storage\":{\"encoding\":\"dynamic_array\",\"label\":\"struct Types.CheckpointOutput[]\",\"numberOfBytes\":\"32\",\"base\":\"t_struct(CheckpointOutput)1005_storage\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_struct(CheckpointOutput)1005_storage\":{\"encoding\":\"inplace\",\"label\":\"struct Types.CheckpointOutput\",\"numberOfBytes\":\"96\"},\"t_uint128\":{\"encoding\":\"inplace\",\"label\":\"uint128\",\"numberOfBytes\":\"16\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" + +var L2OutputOracleStorageLayout = new(solc.StorageLayout) + +var L2OutputOracleDeployedBin = "0x6080604052600436106101745760003560e01c80639e45e8f4116100cb578063cf8e5cf01161007f578063e4a3011611610059578063e4a3011614610487578063e6646723146104a7578063f4daa291146104c757600080fd5b8063cf8e5cf014610432578063d1de856c14610452578063dcec33481461047257600080fd5b8063a48ea6de116100b0578063a48ea6de146103be578063b0ea09a8146103de578063b98debbf146103fe57600080fd5b80639e45e8f4146102e6578063a25ae5571461033f57600080fd5b80635a045f781161012d57806370872aa51161010757806370872aa51461029a5780637f006420146102b057806388786272146102d057600080fd5b80635a045f781461025b57806369f16eec146102705780636abcf5631461028557600080fd5b80634599c7881161015e5780634599c788146101f0578063529933df1461020557806354fd4d501461023957600080fd5b80622134cc1461017957806333727c4d146101c0575b600080fd5b34801561018557600080fd5b506101ad7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b3480156101cc57600080fd5b506101e06101db366004611800565b6104fb565b60405190151581526020016101b7565b3480156101fc57600080fd5b506101ad610569565b34801561021157600080fd5b506101ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561024557600080fd5b5061024e6105dc565b6040516101b79190611849565b61026e61026936600461189a565b61067f565b005b34801561027c57600080fd5b506101ad610c86565b34801561029157600080fd5b506003546101ad565b3480156102a657600080fd5b506101ad60015481565b3480156102bc57600080fd5b506101ad6102cb366004611800565b610c98565b3480156102dc57600080fd5b506101ad60025481565b3480156102f257600080fd5b5061031a7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b7565b34801561034b57600080fd5b5061035f61035a366004611800565b610e78565b60408051825173ffffffffffffffffffffffffffffffffffffffff16815260208084015190820152828201516fffffffffffffffffffffffffffffffff90811692820192909252606092830151909116918101919091526080016101b7565b3480156103ca57600080fd5b506101ad6103d9366004611800565b610f35565b3480156103ea57600080fd5b5061031a6103f9366004611800565b610fa1565b34801561040a57600080fd5b5061031a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561043e57600080fd5b5061035f61044d366004611800565b610fe3565b34801561045e57600080fd5b506101ad61046d366004611800565b611022565b34801561047e57600080fd5b506101ad61106a565b34801561049357600080fd5b5061026e6104a23660046118cc565b6110b0565b3480156104b357600080fd5b5061026e6104c2366004611913565b6112c9565b3480156104d357600080fd5b506101ad7f000000000000000000000000000000000000000000000000000000000000000081565b6000427f0000000000000000000000000000000000000000000000000000000000000000600384815481106105325761053261194c565b600091825260209091206002600390920201015461056291906fffffffffffffffffffffffffffffffff166119aa565b1092915050565b600354600090156105d35760038054610584906001906119c2565b815481106105945761059461194c565b600091825260209091206003909102016002015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16919050565b6001545b905090565b60606106077f0000000000000000000000000000000000000000000000000000000000000000611660565b6106307f0000000000000000000000000000000000000000000000000000000000000000611660565b6106597f0000000000000000000000000000000000000000000000000000000000000000611660565b60405160200161066b939291906119d9565b604051602081830303815290604052905090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633a5490466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107109190611a4f565b905073ffffffffffffffffffffffffffffffffffffffff808216146107e5573373ffffffffffffffffffffffffffffffffffffffff8216146107e55760405162461bcd60e51b815260206004820152604260248201527f4c324f75747075744f7261636c653a206f6e6c7920746865206e65787420736560448201527f6c65637465642076616c696461746f722063616e207375626d6974206f75747060648201527f7574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6107ed61106a565b84146108875760405162461bcd60e51b815260206004820152604860248201527f4c324f75747075744f7261636c653a20626c6f636b206e756d626572206d757360448201527f7420626520657175616c20746f206e65787420657870656374656420626c6f6360648201527f6b206e756d626572000000000000000000000000000000000000000000000000608482015260a4016107dc565b4261089185611022565b106109045760405162461bcd60e51b815260206004820152603560248201527f4c324f75747075744f7261636c653a2063616e6e6f74207375626d6974204c3260448201527f206f757470757420696e2074686520667574757265000000000000000000000060648201526084016107dc565b846109775760405162461bcd60e51b815260206004820152603c60248201527f4c324f75747075744f7261636c653a204c3220636865636b706f696e74206f7560448201527f747075742063616e6e6f7420626520746865207a65726f20686173680000000060648201526084016107dc565b82158015906109865750814015155b15610a275782824014610a275760405162461bcd60e51b815260206004820152604960248201527f4c324f75747075744f7261636c653a20626c6f636b206861736820646f65732060448201527f6e6f74206d61746368207468652068617368206174207468652065787065637460648201527f6564206865696768740000000000000000000000000000000000000000000000608482015260a4016107dc565b6000610a3260035490565b60408051608081018252338152602081018981526fffffffffffffffffffffffffffffffff428181168486019081528b831660608601908152600380546001810182556000829052965196027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b8101805473ffffffffffffffffffffffffffffffffffffffff989098167fffffffffffffffffffffffff00000000000000000000000000000000000000009098169790971790965593517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c86015551925182167001000000000000000000000000000000000292909116919091177fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85d9092019190915590519192508691839189917f457b4388026260019ae0b0b4f16c98235d74fe7359be469bdcba16e6d0d4968991610b8f9190815260200190565b60405180910390a473ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663d38dc7ee82610bfe7f0000000000000000000000000000000000000000000000000000000000000000426119aa565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526fffffffffffffffffffffffffffffffff166024820152604401600060405180830381600087803b158015610c6657600080fd5b505af1158015610c7a573d6000803e3d6000fd5b50505050505050505050565b6003546000906105d7906001906119c2565b6000610ca2610569565b821115610d3d5760405162461bcd60e51b815260206004820152604960248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f7420666f72206120626c6f636b207468617420686173206e6f74206265656e2060648201527f7375626d69747465640000000000000000000000000000000000000000000000608482015260a4016107dc565b600354610dd85760405162461bcd60e51b815260206004820152604760248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f74206173206e6f206f7574707574732068617665206265656e207375626d697460648201527f7465642079657400000000000000000000000000000000000000000000000000608482015260a4016107dc565b6003546000905b80821015610e715760006002610df583856119aa565b610dff9190611a73565b90508460038281548110610e1557610e1561194c565b600091825260209091206003909102016002015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff161015610e6757610e608160016119aa565b9250610e6b565b8091505b50610ddf565b5092915050565b60408051608081018252600080825260208201819052918101829052606081019190915260038281548110610eaf57610eaf61194c565b6000918252602091829020604080516080810182526003909302909101805473ffffffffffffffffffffffffffffffffffffffff1683526001810154938301939093526002909201546fffffffffffffffffffffffffffffffff808216938301939093527001000000000000000000000000000000009004909116606082015292915050565b60007f000000000000000000000000000000000000000000000000000000000000000060038381548110610f6b57610f6b61194c565b6000918252602090912060026003909202010154610f9b91906fffffffffffffffffffffffffffffffff166119aa565b92915050565b600060038281548110610fb657610fb661194c565b600091825260209091206003909102015473ffffffffffffffffffffffffffffffffffffffff1692915050565b604080516080810182526000808252602082018190529181018290526060810191909152600361101283610c98565b81548110610eaf57610eaf61194c565b60007f00000000000000000000000000000000000000000000000000000000000000006001548361105391906119c2565b61105d9190611aae565b600254610f9b91906119aa565b600354600090156110a8577f000000000000000000000000000000000000000000000000000000000000000061109e610569565b6105d791906119aa565b6105d7610569565b600054610100900460ff16158080156110d05750600054600160ff909116105b806110ea5750303b1580156110ea575060005460ff166001145b61115c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107dc565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156111ba57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b428211156112575760405162461bcd60e51b8152602060048201526044602482018190527f4c324f75747075744f7261636c653a207374617274696e67204c322074696d65908201527f7374616d70206d757374206265206c657373207468616e2063757272656e742060648201527f74696d6500000000000000000000000000000000000000000000000000000000608482015260a4016107dc565b6002829055600183905580156112c457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461139a5760405162461bcd60e51b815260206004820152604160248201527f4c324f75747075744f7261636c653a206f6e6c792074686520636f6c6f73736560448201527f756d20636f6e74726163742063616e207265706c61636520616e206f7574707560648201527f7400000000000000000000000000000000000000000000000000000000000000608482015260a4016107dc565b73ffffffffffffffffffffffffffffffffffffffff81166114235760405162461bcd60e51b815260206004820152603060248201527f4c324f75747075744f7261636c653a207375626d69747465722061646472657360448201527f732063616e6e6f74206265207a65726f0000000000000000000000000000000060648201526084016107dc565b60035483106114c05760405162461bcd60e51b815260206004820152604660248201527f4c324f75747075744f7261636c653a2063616e6e6f74207265706c616365206160448201527f6e206f757470757420616674657220746865206c6174657374206f757470757460648201527f20696e6465780000000000000000000000000000000000000000000000000000608482015260a4016107dc565b6000600384815481106114d5576114d561194c565b6000918252602090912060039091020160028101549091507f00000000000000000000000000000000000000000000000000000000000000009061152b906fffffffffffffffffffffffffffffffff16426119c2565b106115c45760405162461bcd60e51b815260206004820152604860248201527f4c324f75747075744f7261636c653a2063616e6e6f74207265706c616365206160448201527f6e206f757470757420746861742068617320616c7265616479206265656e206660648201527f696e616c697a6564000000000000000000000000000000000000000000000000608482015260a4016107dc565b6001810183905580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831617815560405183815284907fa1b831bb8b6b242db6d0988a6d21f869c610de9f703a5e45e1b7d3dc3137b9069060200160405180910390a250505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6060600061166d8361171e565b600101905060008167ffffffffffffffff81111561168d5761168d611aeb565b6040519080825280601f01601f1916602001820160405280156116b7576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846116c157509392505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611767577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611793576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106117b157662386f26fc10000830492506010015b6305f5e10083106117c9576305f5e100830492506008015b61271083106117dd57612710830492506004015b606483106117ef576064830492506002015b600a8310610f9b5760010192915050565b60006020828403121561181257600080fd5b5035919050565b60005b8381101561183457818101518382015260200161181c565b83811115611843576000848401525b50505050565b6020815260008251806020840152611868816040850160208701611819565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600080600080608085870312156118b057600080fd5b5050823594602084013594506040840135936060013592509050565b600080604083850312156118df57600080fd5b50508035926020909101359150565b73ffffffffffffffffffffffffffffffffffffffff8116811461191057600080fd5b50565b60008060006060848603121561192857600080fd5b83359250602084013591506040840135611941816118ee565b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156119bd576119bd61197b565b500190565b6000828210156119d4576119d461197b565b500390565b600084516119eb818460208901611819565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611a27816001850160208a01611819565b60019201918201528351611a42816002840160208801611819565b0160020195945050505050565b600060208284031215611a6157600080fd5b8151611a6c816118ee565b9392505050565b600082611aa9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ae657611ae661197b565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(L2OutputOracleStorageLayoutJSON), L2OutputOracleStorageLayout); err != nil { + panic(err) + } + + layouts["L2OutputOracle"] = L2OutputOracleStorageLayout + deployedBytecodes["L2OutputOracle"] = L2OutputOracleDeployedBin +} diff --git a/kroma-bindings/bindings/l2standardbridge.go b/kroma-bindings/bindings/l2standardbridge.go new file mode 100644 index 000000000..9c8a86a9a --- /dev/null +++ b/kroma-bindings/bindings/l2standardbridge.go @@ -0,0 +1,1114 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// L2StandardBridgeMetaData contains all meta data concerning the L2StandardBridge contract. +var L2StandardBridgeMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_otherBridge\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC20BridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC20BridgeInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ETHBridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ETHBridgeInitiated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSENGER\",\"outputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_BRIDGE\",\"outputs\":[{\"internalType\":\"contractStandardBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC20To\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeETHTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"deposits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x61012060405234801561001157600080fd5b5060405162002389380380620023898339810160408190526100329161006b565b7342000000000000000000000000000000000000046080526001600160a01b031660a052600160c052600060e08190526101005261009b565b60006020828403121561007d57600080fd5b81516001600160a01b038116811461009457600080fd5b9392505050565b60805160a05160c05160e0516101005161225c6200012d6000396000610eed01526000610ec401526000610e9b0152600081816101fd015281816104090152818161055501528181610a0e015261148e0152600081816102b9015281816103cc0152818161052b0152818161058c015281816109e401528181610a4501528181610c840152611452015261225c6000f3fe6080604052600436106100b55760003560e01c80637f46ddb2116100695780638f601f661161004e5780638f601f6614610264578063927ede2d146102a7578063e11013dd146102db57600080fd5b80637f46ddb2146101eb578063870876231461024457600080fd5b80631635f5fd1161009a5780631635f5fd1461018d578063540abf73146101a057806354fd4d50146101c057600080fd5b80630166a07a1461015a57806309fc88431461017a57600080fd5b3661015557333b156101345760405162461bcd60e51b815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61015333333462030d40604051806020016040528060008152506102ee565b005b600080fd5b34801561016657600080fd5b50610153610175366004611b82565b610513565b610153610188366004611c33565b61090f565b61015361019b366004611c86565b6109cc565b3480156101ac57600080fd5b506101536101bb366004611cf9565b610e46565b3480156101cc57600080fd5b506101d5610e94565b6040516101e29190611de6565b60405180910390f35b3480156101f757600080fd5b5061021f7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e2565b34801561025057600080fd5b5061015361025f366004611df9565b610f37565b34801561027057600080fd5b5061029961027f366004611e7c565b600060208181529281526040808220909352908152205481565b6040519081526020016101e2565b3480156102b357600080fd5b5061021f7f000000000000000000000000000000000000000000000000000000000000000081565b6101536102e9366004611eb5565b610ff1565b8234146103635760405162461bcd60e51b815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161012b565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af585846040516103c2929190611f18565b60405180910390a37f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633dbb202b847f0000000000000000000000000000000000000000000000000000000000000000631635f5fd60e01b898989886040516024016104479493929190611f31565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526104da92918890600401611f7a565b6000604051808303818588803b1580156104f357600080fd5b505af1158015610507573d6000803e3d6000fd5b50505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561063157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106199190611fbf565b73ffffffffffffffffffffffffffffffffffffffff16145b6106c95760405162461bcd60e51b815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161012b565b6106d28761103a565b15610806576106e1878761106c565b6107795760405162461bcd60e51b815260206004820152604760248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204b726f6d61204d696e7461626c65204552433230206c6f636160648201527f6c20746f6b656e00000000000000000000000000000000000000000000000000608482015260a40161012b565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b50505050610884565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260208181526040808320938a168352929052205461084290849061200b565b73ffffffffffffffffffffffffffffffffffffffff808916600081815260208181526040808320948c1683529390529190912091909155610884908585611113565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd878787876040516108fe949392919061206b565b60405180910390a450505050505050565b333b156109845760405162461bcd60e51b815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161012b565b6109c73333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506102ee92505050565b505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148015610aea57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad29190611fbf565b73ffffffffffffffffffffffffffffffffffffffff16145b610b825760405162461bcd60e51b815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161012b565b823414610bf75760405162461bcd60e51b815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161012b565b3073ffffffffffffffffffffffffffffffffffffffff851603610c825760405162461bcd60e51b815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161012b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d435760405162461bcd60e51b815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161012b565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d858585604051610da4939291906120a1565b60405180910390a36000610dc9855a86604051806020016040528060008152506111e7565b905080610e3e5760405162461bcd60e51b815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161012b565b505050505050565b610e8b87873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061120392505050565b50505050505050565b6060610ebf7f000000000000000000000000000000000000000000000000000000000000000061159e565b610ee87f000000000000000000000000000000000000000000000000000000000000000061159e565b610f117f000000000000000000000000000000000000000000000000000000000000000061159e565b604051602001610f23939291906120c4565b604051602081830303815290604052905090565b333b15610fac5760405162461bcd60e51b815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161012b565b610e3e86863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061120392505050565b6110343385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506102ee92505050565b50505050565b6000611066827f30a0c5a90000000000000000000000000000000000000000000000000000000061165c565b92915050565b60008273ffffffffffffffffffffffffffffffffffffffff1663033964be6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dd9190611fbf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614905092915050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109c79084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261167f565b600080600080845160208601878a8af19150505b949350505050565b61120c8761103a565b156113405761121b878761106c565b6112b35760405162461bcd60e51b815260206004820152604760248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204b726f6d61204d696e7461626c65204552433230206c6f636160648201527f6c20746f6b656e00000000000000000000000000000000000000000000000000608482015260a40161012b565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561132357600080fd5b505af1158015611337573d6000803e3d6000fd5b505050506113d0565b61136273ffffffffffffffffffffffffffffffffffffffff8816863086611774565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260208181526040808320938a168352929052205461139e90849061213a565b73ffffffffffffffffffffffffffffffffffffffff808916600090815260208181526040808320938b16835292905220555b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf87878660405161144893929190612152565b60405180910390a47f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633dbb202b7f0000000000000000000000000000000000000000000000000000000000000000630166a07a60e01b898b8a8a8a896040516024016114d096959493929190612187565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261156392918790600401611f7a565b600060405180830381600087803b15801561157d57600080fd5b505af1158015611591573d6000803e3d6000fd5b5050505050505050505050565b606060006115ab836117d2565b600101905060008167ffffffffffffffff8111156115cb576115cb6121e2565b6040519080825280601f01601f1916602001820160405280156115f5576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846115ff57509392505050565b6000611667836118b4565b801561167857506116788383611918565b9392505050565b60006116e1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166119e79092919063ffffffff16565b90508051600014806117025750808060200190518101906117029190612211565b6109c75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161012b565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526110349085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611165565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061181b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611847576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061186557662386f26fc10000830492506010015b6305f5e100831061187d576305f5e100830492506008015b612710831061189157612710830492506004015b606483106118a3576064830492506002015b600a83106110665760010192915050565b60006118e0827f01ffc9a700000000000000000000000000000000000000000000000000000000611918565b80156110665750611911827fffffffff00000000000000000000000000000000000000000000000000000000611918565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156119d0575060208210155b80156119dc5750600081115b979650505050505050565b60606111fb8484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051611a1b9190612233565b60006040518083038185875af1925050503d8060008114611a58576040519150601f19603f3d011682016040523d82523d6000602084013e611a5d565b606091505b50915091506119dc8783838760608315611ae5578251600003611ade5773ffffffffffffffffffffffffffffffffffffffff85163b611ade5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161012b565b50816111fb565b6111fb8383815115611afa5781518083602001fd5b8060405162461bcd60e51b815260040161012b9190611de6565b73ffffffffffffffffffffffffffffffffffffffff81168114611b3657600080fd5b50565b60008083601f840112611b4b57600080fd5b50813567ffffffffffffffff811115611b6357600080fd5b602083019150836020828501011115611b7b57600080fd5b9250929050565b600080600080600080600060c0888a031215611b9d57600080fd5b8735611ba881611b14565b96506020880135611bb881611b14565b95506040880135611bc881611b14565b94506060880135611bd881611b14565b93506080880135925060a088013567ffffffffffffffff811115611bfb57600080fd5b611c078a828b01611b39565b989b979a50959850939692959293505050565b803563ffffffff81168114611c2e57600080fd5b919050565b600080600060408486031215611c4857600080fd5b611c5184611c1a565b9250602084013567ffffffffffffffff811115611c6d57600080fd5b611c7986828701611b39565b9497909650939450505050565b600080600080600060808688031215611c9e57600080fd5b8535611ca981611b14565b94506020860135611cb981611b14565b935060408601359250606086013567ffffffffffffffff811115611cdc57600080fd5b611ce888828901611b39565b969995985093965092949392505050565b600080600080600080600060c0888a031215611d1457600080fd5b8735611d1f81611b14565b96506020880135611d2f81611b14565b95506040880135611d3f81611b14565b945060608801359350611d5460808901611c1a565b925060a088013567ffffffffffffffff811115611bfb57600080fd5b60005b83811015611d8b578181015183820152602001611d73565b838111156110345750506000910152565b60008151808452611db4816020860160208601611d70565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006116786020830184611d9c565b60008060008060008060a08789031215611e1257600080fd5b8635611e1d81611b14565b95506020870135611e2d81611b14565b945060408701359350611e4260608801611c1a565b9250608087013567ffffffffffffffff811115611e5e57600080fd5b611e6a89828a01611b39565b979a9699509497509295939492505050565b60008060408385031215611e8f57600080fd5b8235611e9a81611b14565b91506020830135611eaa81611b14565b809150509250929050565b60008060008060608587031215611ecb57600080fd5b8435611ed681611b14565b9350611ee460208601611c1a565b9250604085013567ffffffffffffffff811115611f0057600080fd5b611f0c87828801611b39565b95989497509550505050565b8281526040602082015260006111fb6040830184611d9c565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152611f706080830184611d9c565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000611fa96060830185611d9c565b905063ffffffff83166040830152949350505050565b600060208284031215611fd157600080fd5b815161167881611b14565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561201d5761201d611fdc565b500390565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000611f70606083018486612022565b8381526040602082015260006120bb604083018486612022565b95945050505050565b600084516120d6818460208901611d70565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612112816001850160208a01611d70565b6001920191820152835161212d816002840160208801611d70565b0160020195945050505050565b6000821982111561214d5761214d611fdc565b500190565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006120bb6060830184611d9c565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a08301526121d660c0830184611d9c565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561222357600080fd5b8151801515811461167857600080fd5b60008251612245818460208701611d70565b919091019291505056fea164736f6c634300080f000a", +} + +// L2StandardBridgeABI is the input ABI used to generate the binding from. +// Deprecated: Use L2StandardBridgeMetaData.ABI instead. +var L2StandardBridgeABI = L2StandardBridgeMetaData.ABI + +// L2StandardBridgeBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use L2StandardBridgeMetaData.Bin instead. +var L2StandardBridgeBin = L2StandardBridgeMetaData.Bin + +// DeployL2StandardBridge deploys a new Ethereum contract, binding an instance of L2StandardBridge to it. +func DeployL2StandardBridge(auth *bind.TransactOpts, backend bind.ContractBackend, _otherBridge common.Address) (common.Address, *types.Transaction, *L2StandardBridge, error) { + parsed, err := L2StandardBridgeMetaData.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(L2StandardBridgeBin), backend, _otherBridge) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &L2StandardBridge{L2StandardBridgeCaller: L2StandardBridgeCaller{contract: contract}, L2StandardBridgeTransactor: L2StandardBridgeTransactor{contract: contract}, L2StandardBridgeFilterer: L2StandardBridgeFilterer{contract: contract}}, nil +} + +// L2StandardBridge is an auto generated Go binding around an Ethereum contract. +type L2StandardBridge struct { + L2StandardBridgeCaller // Read-only binding to the contract + L2StandardBridgeTransactor // Write-only binding to the contract + L2StandardBridgeFilterer // Log filterer for contract events +} + +// L2StandardBridgeCaller is an auto generated read-only Go binding around an Ethereum contract. +type L2StandardBridgeCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L2StandardBridgeTransactor is an auto generated write-only Go binding around an Ethereum contract. +type L2StandardBridgeTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L2StandardBridgeFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type L2StandardBridgeFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L2StandardBridgeSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type L2StandardBridgeSession struct { + Contract *L2StandardBridge // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// L2StandardBridgeCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type L2StandardBridgeCallerSession struct { + Contract *L2StandardBridgeCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// L2StandardBridgeTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type L2StandardBridgeTransactorSession struct { + Contract *L2StandardBridgeTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// L2StandardBridgeRaw is an auto generated low-level Go binding around an Ethereum contract. +type L2StandardBridgeRaw struct { + Contract *L2StandardBridge // Generic contract binding to access the raw methods on +} + +// L2StandardBridgeCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type L2StandardBridgeCallerRaw struct { + Contract *L2StandardBridgeCaller // Generic read-only contract binding to access the raw methods on +} + +// L2StandardBridgeTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type L2StandardBridgeTransactorRaw struct { + Contract *L2StandardBridgeTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewL2StandardBridge creates a new instance of L2StandardBridge, bound to a specific deployed contract. +func NewL2StandardBridge(address common.Address, backend bind.ContractBackend) (*L2StandardBridge, error) { + contract, err := bindL2StandardBridge(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &L2StandardBridge{L2StandardBridgeCaller: L2StandardBridgeCaller{contract: contract}, L2StandardBridgeTransactor: L2StandardBridgeTransactor{contract: contract}, L2StandardBridgeFilterer: L2StandardBridgeFilterer{contract: contract}}, nil +} + +// NewL2StandardBridgeCaller creates a new read-only instance of L2StandardBridge, bound to a specific deployed contract. +func NewL2StandardBridgeCaller(address common.Address, caller bind.ContractCaller) (*L2StandardBridgeCaller, error) { + contract, err := bindL2StandardBridge(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &L2StandardBridgeCaller{contract: contract}, nil +} + +// NewL2StandardBridgeTransactor creates a new write-only instance of L2StandardBridge, bound to a specific deployed contract. +func NewL2StandardBridgeTransactor(address common.Address, transactor bind.ContractTransactor) (*L2StandardBridgeTransactor, error) { + contract, err := bindL2StandardBridge(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &L2StandardBridgeTransactor{contract: contract}, nil +} + +// NewL2StandardBridgeFilterer creates a new log filterer instance of L2StandardBridge, bound to a specific deployed contract. +func NewL2StandardBridgeFilterer(address common.Address, filterer bind.ContractFilterer) (*L2StandardBridgeFilterer, error) { + contract, err := bindL2StandardBridge(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &L2StandardBridgeFilterer{contract: contract}, nil +} + +// bindL2StandardBridge binds a generic wrapper to an already deployed contract. +func bindL2StandardBridge(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := L2StandardBridgeMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_L2StandardBridge *L2StandardBridgeRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _L2StandardBridge.Contract.L2StandardBridgeCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_L2StandardBridge *L2StandardBridgeRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L2StandardBridge.Contract.L2StandardBridgeTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_L2StandardBridge *L2StandardBridgeRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _L2StandardBridge.Contract.L2StandardBridgeTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_L2StandardBridge *L2StandardBridgeCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _L2StandardBridge.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_L2StandardBridge *L2StandardBridgeTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L2StandardBridge.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_L2StandardBridge *L2StandardBridgeTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _L2StandardBridge.Contract.contract.Transact(opts, method, params...) +} + +// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. +// +// Solidity: function MESSENGER() view returns(address) +func (_L2StandardBridge *L2StandardBridgeCaller) MESSENGER(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L2StandardBridge.contract.Call(opts, &out, "MESSENGER") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. +// +// Solidity: function MESSENGER() view returns(address) +func (_L2StandardBridge *L2StandardBridgeSession) MESSENGER() (common.Address, error) { + return _L2StandardBridge.Contract.MESSENGER(&_L2StandardBridge.CallOpts) +} + +// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. +// +// Solidity: function MESSENGER() view returns(address) +func (_L2StandardBridge *L2StandardBridgeCallerSession) MESSENGER() (common.Address, error) { + return _L2StandardBridge.Contract.MESSENGER(&_L2StandardBridge.CallOpts) +} + +// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. +// +// Solidity: function OTHER_BRIDGE() view returns(address) +func (_L2StandardBridge *L2StandardBridgeCaller) OTHERBRIDGE(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L2StandardBridge.contract.Call(opts, &out, "OTHER_BRIDGE") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. +// +// Solidity: function OTHER_BRIDGE() view returns(address) +func (_L2StandardBridge *L2StandardBridgeSession) OTHERBRIDGE() (common.Address, error) { + return _L2StandardBridge.Contract.OTHERBRIDGE(&_L2StandardBridge.CallOpts) +} + +// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. +// +// Solidity: function OTHER_BRIDGE() view returns(address) +func (_L2StandardBridge *L2StandardBridgeCallerSession) OTHERBRIDGE() (common.Address, error) { + return _L2StandardBridge.Contract.OTHERBRIDGE(&_L2StandardBridge.CallOpts) +} + +// Deposits is a free data retrieval call binding the contract method 0x8f601f66. +// +// Solidity: function deposits(address , address ) view returns(uint256) +func (_L2StandardBridge *L2StandardBridgeCaller) Deposits(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) { + var out []interface{} + err := _L2StandardBridge.contract.Call(opts, &out, "deposits", arg0, arg1) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Deposits is a free data retrieval call binding the contract method 0x8f601f66. +// +// Solidity: function deposits(address , address ) view returns(uint256) +func (_L2StandardBridge *L2StandardBridgeSession) Deposits(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _L2StandardBridge.Contract.Deposits(&_L2StandardBridge.CallOpts, arg0, arg1) +} + +// Deposits is a free data retrieval call binding the contract method 0x8f601f66. +// +// Solidity: function deposits(address , address ) view returns(uint256) +func (_L2StandardBridge *L2StandardBridgeCallerSession) Deposits(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _L2StandardBridge.Contract.Deposits(&_L2StandardBridge.CallOpts, arg0, arg1) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L2StandardBridge *L2StandardBridgeCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _L2StandardBridge.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L2StandardBridge *L2StandardBridgeSession) Version() (string, error) { + return _L2StandardBridge.Contract.Version(&_L2StandardBridge.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L2StandardBridge *L2StandardBridgeCallerSession) Version() (string, error) { + return _L2StandardBridge.Contract.Version(&_L2StandardBridge.CallOpts) +} + +// BridgeERC20 is a paid mutator transaction binding the contract method 0x87087623. +// +// Solidity: function bridgeERC20(address _localToken, address _remoteToken, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_L2StandardBridge *L2StandardBridgeTransactor) BridgeERC20(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L2StandardBridge.contract.Transact(opts, "bridgeERC20", _localToken, _remoteToken, _amount, _minGasLimit, _extraData) +} + +// BridgeERC20 is a paid mutator transaction binding the contract method 0x87087623. +// +// Solidity: function bridgeERC20(address _localToken, address _remoteToken, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_L2StandardBridge *L2StandardBridgeSession) BridgeERC20(_localToken common.Address, _remoteToken common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L2StandardBridge.Contract.BridgeERC20(&_L2StandardBridge.TransactOpts, _localToken, _remoteToken, _amount, _minGasLimit, _extraData) +} + +// BridgeERC20 is a paid mutator transaction binding the contract method 0x87087623. +// +// Solidity: function bridgeERC20(address _localToken, address _remoteToken, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_L2StandardBridge *L2StandardBridgeTransactorSession) BridgeERC20(_localToken common.Address, _remoteToken common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L2StandardBridge.Contract.BridgeERC20(&_L2StandardBridge.TransactOpts, _localToken, _remoteToken, _amount, _minGasLimit, _extraData) +} + +// BridgeERC20To is a paid mutator transaction binding the contract method 0x540abf73. +// +// Solidity: function bridgeERC20To(address _localToken, address _remoteToken, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_L2StandardBridge *L2StandardBridgeTransactor) BridgeERC20To(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L2StandardBridge.contract.Transact(opts, "bridgeERC20To", _localToken, _remoteToken, _to, _amount, _minGasLimit, _extraData) +} + +// BridgeERC20To is a paid mutator transaction binding the contract method 0x540abf73. +// +// Solidity: function bridgeERC20To(address _localToken, address _remoteToken, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_L2StandardBridge *L2StandardBridgeSession) BridgeERC20To(_localToken common.Address, _remoteToken common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L2StandardBridge.Contract.BridgeERC20To(&_L2StandardBridge.TransactOpts, _localToken, _remoteToken, _to, _amount, _minGasLimit, _extraData) +} + +// BridgeERC20To is a paid mutator transaction binding the contract method 0x540abf73. +// +// Solidity: function bridgeERC20To(address _localToken, address _remoteToken, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_L2StandardBridge *L2StandardBridgeTransactorSession) BridgeERC20To(_localToken common.Address, _remoteToken common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L2StandardBridge.Contract.BridgeERC20To(&_L2StandardBridge.TransactOpts, _localToken, _remoteToken, _to, _amount, _minGasLimit, _extraData) +} + +// BridgeETH is a paid mutator transaction binding the contract method 0x09fc8843. +// +// Solidity: function bridgeETH(uint32 _minGasLimit, bytes _extraData) payable returns() +func (_L2StandardBridge *L2StandardBridgeTransactor) BridgeETH(opts *bind.TransactOpts, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L2StandardBridge.contract.Transact(opts, "bridgeETH", _minGasLimit, _extraData) +} + +// BridgeETH is a paid mutator transaction binding the contract method 0x09fc8843. +// +// Solidity: function bridgeETH(uint32 _minGasLimit, bytes _extraData) payable returns() +func (_L2StandardBridge *L2StandardBridgeSession) BridgeETH(_minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L2StandardBridge.Contract.BridgeETH(&_L2StandardBridge.TransactOpts, _minGasLimit, _extraData) +} + +// BridgeETH is a paid mutator transaction binding the contract method 0x09fc8843. +// +// Solidity: function bridgeETH(uint32 _minGasLimit, bytes _extraData) payable returns() +func (_L2StandardBridge *L2StandardBridgeTransactorSession) BridgeETH(_minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L2StandardBridge.Contract.BridgeETH(&_L2StandardBridge.TransactOpts, _minGasLimit, _extraData) +} + +// BridgeETHTo is a paid mutator transaction binding the contract method 0xe11013dd. +// +// Solidity: function bridgeETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() +func (_L2StandardBridge *L2StandardBridgeTransactor) BridgeETHTo(opts *bind.TransactOpts, _to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L2StandardBridge.contract.Transact(opts, "bridgeETHTo", _to, _minGasLimit, _extraData) +} + +// BridgeETHTo is a paid mutator transaction binding the contract method 0xe11013dd. +// +// Solidity: function bridgeETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() +func (_L2StandardBridge *L2StandardBridgeSession) BridgeETHTo(_to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L2StandardBridge.Contract.BridgeETHTo(&_L2StandardBridge.TransactOpts, _to, _minGasLimit, _extraData) +} + +// BridgeETHTo is a paid mutator transaction binding the contract method 0xe11013dd. +// +// Solidity: function bridgeETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() +func (_L2StandardBridge *L2StandardBridgeTransactorSession) BridgeETHTo(_to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L2StandardBridge.Contract.BridgeETHTo(&_L2StandardBridge.TransactOpts, _to, _minGasLimit, _extraData) +} + +// FinalizeBridgeERC20 is a paid mutator transaction binding the contract method 0x0166a07a. +// +// Solidity: function finalizeBridgeERC20(address _localToken, address _remoteToken, address _from, address _to, uint256 _amount, bytes _extraData) returns() +func (_L2StandardBridge *L2StandardBridgeTransactor) FinalizeBridgeERC20(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _L2StandardBridge.contract.Transact(opts, "finalizeBridgeERC20", _localToken, _remoteToken, _from, _to, _amount, _extraData) +} + +// FinalizeBridgeERC20 is a paid mutator transaction binding the contract method 0x0166a07a. +// +// Solidity: function finalizeBridgeERC20(address _localToken, address _remoteToken, address _from, address _to, uint256 _amount, bytes _extraData) returns() +func (_L2StandardBridge *L2StandardBridgeSession) FinalizeBridgeERC20(_localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _L2StandardBridge.Contract.FinalizeBridgeERC20(&_L2StandardBridge.TransactOpts, _localToken, _remoteToken, _from, _to, _amount, _extraData) +} + +// FinalizeBridgeERC20 is a paid mutator transaction binding the contract method 0x0166a07a. +// +// Solidity: function finalizeBridgeERC20(address _localToken, address _remoteToken, address _from, address _to, uint256 _amount, bytes _extraData) returns() +func (_L2StandardBridge *L2StandardBridgeTransactorSession) FinalizeBridgeERC20(_localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _L2StandardBridge.Contract.FinalizeBridgeERC20(&_L2StandardBridge.TransactOpts, _localToken, _remoteToken, _from, _to, _amount, _extraData) +} + +// FinalizeBridgeETH is a paid mutator transaction binding the contract method 0x1635f5fd. +// +// Solidity: function finalizeBridgeETH(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() +func (_L2StandardBridge *L2StandardBridgeTransactor) FinalizeBridgeETH(opts *bind.TransactOpts, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _L2StandardBridge.contract.Transact(opts, "finalizeBridgeETH", _from, _to, _amount, _extraData) +} + +// FinalizeBridgeETH is a paid mutator transaction binding the contract method 0x1635f5fd. +// +// Solidity: function finalizeBridgeETH(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() +func (_L2StandardBridge *L2StandardBridgeSession) FinalizeBridgeETH(_from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _L2StandardBridge.Contract.FinalizeBridgeETH(&_L2StandardBridge.TransactOpts, _from, _to, _amount, _extraData) +} + +// FinalizeBridgeETH is a paid mutator transaction binding the contract method 0x1635f5fd. +// +// Solidity: function finalizeBridgeETH(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() +func (_L2StandardBridge *L2StandardBridgeTransactorSession) FinalizeBridgeETH(_from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _L2StandardBridge.Contract.FinalizeBridgeETH(&_L2StandardBridge.TransactOpts, _from, _to, _amount, _extraData) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_L2StandardBridge *L2StandardBridgeTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L2StandardBridge.contract.RawTransact(opts, nil) // calldata is disallowed for receive function +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_L2StandardBridge *L2StandardBridgeSession) Receive() (*types.Transaction, error) { + return _L2StandardBridge.Contract.Receive(&_L2StandardBridge.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_L2StandardBridge *L2StandardBridgeTransactorSession) Receive() (*types.Transaction, error) { + return _L2StandardBridge.Contract.Receive(&_L2StandardBridge.TransactOpts) +} + +// L2StandardBridgeERC20BridgeFinalizedIterator is returned from FilterERC20BridgeFinalized and is used to iterate over the raw logs and unpacked data for ERC20BridgeFinalized events raised by the L2StandardBridge contract. +type L2StandardBridgeERC20BridgeFinalizedIterator struct { + Event *L2StandardBridgeERC20BridgeFinalized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L2StandardBridgeERC20BridgeFinalizedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L2StandardBridgeERC20BridgeFinalized) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L2StandardBridgeERC20BridgeFinalized) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L2StandardBridgeERC20BridgeFinalizedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L2StandardBridgeERC20BridgeFinalizedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L2StandardBridgeERC20BridgeFinalized represents a ERC20BridgeFinalized event raised by the L2StandardBridge contract. +type L2StandardBridgeERC20BridgeFinalized struct { + LocalToken common.Address + RemoteToken common.Address + From common.Address + To common.Address + Amount *big.Int + ExtraData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterERC20BridgeFinalized is a free log retrieval operation binding the contract event 0xd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd. +// +// Solidity: event ERC20BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) +func (_L2StandardBridge *L2StandardBridgeFilterer) FilterERC20BridgeFinalized(opts *bind.FilterOpts, localToken []common.Address, remoteToken []common.Address, from []common.Address) (*L2StandardBridgeERC20BridgeFinalizedIterator, error) { + + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _L2StandardBridge.contract.FilterLogs(opts, "ERC20BridgeFinalized", localTokenRule, remoteTokenRule, fromRule) + if err != nil { + return nil, err + } + return &L2StandardBridgeERC20BridgeFinalizedIterator{contract: _L2StandardBridge.contract, event: "ERC20BridgeFinalized", logs: logs, sub: sub}, nil +} + +// WatchERC20BridgeFinalized is a free log subscription operation binding the contract event 0xd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd. +// +// Solidity: event ERC20BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) +func (_L2StandardBridge *L2StandardBridgeFilterer) WatchERC20BridgeFinalized(opts *bind.WatchOpts, sink chan<- *L2StandardBridgeERC20BridgeFinalized, localToken []common.Address, remoteToken []common.Address, from []common.Address) (event.Subscription, error) { + + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _L2StandardBridge.contract.WatchLogs(opts, "ERC20BridgeFinalized", localTokenRule, remoteTokenRule, fromRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L2StandardBridgeERC20BridgeFinalized) + if err := _L2StandardBridge.contract.UnpackLog(event, "ERC20BridgeFinalized", 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 +} + +// ParseERC20BridgeFinalized is a log parse operation binding the contract event 0xd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd. +// +// Solidity: event ERC20BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) +func (_L2StandardBridge *L2StandardBridgeFilterer) ParseERC20BridgeFinalized(log types.Log) (*L2StandardBridgeERC20BridgeFinalized, error) { + event := new(L2StandardBridgeERC20BridgeFinalized) + if err := _L2StandardBridge.contract.UnpackLog(event, "ERC20BridgeFinalized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// L2StandardBridgeERC20BridgeInitiatedIterator is returned from FilterERC20BridgeInitiated and is used to iterate over the raw logs and unpacked data for ERC20BridgeInitiated events raised by the L2StandardBridge contract. +type L2StandardBridgeERC20BridgeInitiatedIterator struct { + Event *L2StandardBridgeERC20BridgeInitiated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L2StandardBridgeERC20BridgeInitiatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L2StandardBridgeERC20BridgeInitiated) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L2StandardBridgeERC20BridgeInitiated) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L2StandardBridgeERC20BridgeInitiatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L2StandardBridgeERC20BridgeInitiatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L2StandardBridgeERC20BridgeInitiated represents a ERC20BridgeInitiated event raised by the L2StandardBridge contract. +type L2StandardBridgeERC20BridgeInitiated struct { + LocalToken common.Address + RemoteToken common.Address + From common.Address + To common.Address + Amount *big.Int + ExtraData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterERC20BridgeInitiated is a free log retrieval operation binding the contract event 0x7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf. +// +// Solidity: event ERC20BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) +func (_L2StandardBridge *L2StandardBridgeFilterer) FilterERC20BridgeInitiated(opts *bind.FilterOpts, localToken []common.Address, remoteToken []common.Address, from []common.Address) (*L2StandardBridgeERC20BridgeInitiatedIterator, error) { + + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _L2StandardBridge.contract.FilterLogs(opts, "ERC20BridgeInitiated", localTokenRule, remoteTokenRule, fromRule) + if err != nil { + return nil, err + } + return &L2StandardBridgeERC20BridgeInitiatedIterator{contract: _L2StandardBridge.contract, event: "ERC20BridgeInitiated", logs: logs, sub: sub}, nil +} + +// WatchERC20BridgeInitiated is a free log subscription operation binding the contract event 0x7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf. +// +// Solidity: event ERC20BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) +func (_L2StandardBridge *L2StandardBridgeFilterer) WatchERC20BridgeInitiated(opts *bind.WatchOpts, sink chan<- *L2StandardBridgeERC20BridgeInitiated, localToken []common.Address, remoteToken []common.Address, from []common.Address) (event.Subscription, error) { + + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _L2StandardBridge.contract.WatchLogs(opts, "ERC20BridgeInitiated", localTokenRule, remoteTokenRule, fromRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L2StandardBridgeERC20BridgeInitiated) + if err := _L2StandardBridge.contract.UnpackLog(event, "ERC20BridgeInitiated", 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 +} + +// ParseERC20BridgeInitiated is a log parse operation binding the contract event 0x7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf. +// +// Solidity: event ERC20BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) +func (_L2StandardBridge *L2StandardBridgeFilterer) ParseERC20BridgeInitiated(log types.Log) (*L2StandardBridgeERC20BridgeInitiated, error) { + event := new(L2StandardBridgeERC20BridgeInitiated) + if err := _L2StandardBridge.contract.UnpackLog(event, "ERC20BridgeInitiated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// L2StandardBridgeETHBridgeFinalizedIterator is returned from FilterETHBridgeFinalized and is used to iterate over the raw logs and unpacked data for ETHBridgeFinalized events raised by the L2StandardBridge contract. +type L2StandardBridgeETHBridgeFinalizedIterator struct { + Event *L2StandardBridgeETHBridgeFinalized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L2StandardBridgeETHBridgeFinalizedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L2StandardBridgeETHBridgeFinalized) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L2StandardBridgeETHBridgeFinalized) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L2StandardBridgeETHBridgeFinalizedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L2StandardBridgeETHBridgeFinalizedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L2StandardBridgeETHBridgeFinalized represents a ETHBridgeFinalized event raised by the L2StandardBridge contract. +type L2StandardBridgeETHBridgeFinalized struct { + From common.Address + To common.Address + Amount *big.Int + ExtraData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterETHBridgeFinalized is a free log retrieval operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. +// +// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_L2StandardBridge *L2StandardBridgeFilterer) FilterETHBridgeFinalized(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*L2StandardBridgeETHBridgeFinalizedIterator, 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 := _L2StandardBridge.contract.FilterLogs(opts, "ETHBridgeFinalized", fromRule, toRule) + if err != nil { + return nil, err + } + return &L2StandardBridgeETHBridgeFinalizedIterator{contract: _L2StandardBridge.contract, event: "ETHBridgeFinalized", logs: logs, sub: sub}, nil +} + +// WatchETHBridgeFinalized is a free log subscription operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. +// +// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_L2StandardBridge *L2StandardBridgeFilterer) WatchETHBridgeFinalized(opts *bind.WatchOpts, sink chan<- *L2StandardBridgeETHBridgeFinalized, 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 := _L2StandardBridge.contract.WatchLogs(opts, "ETHBridgeFinalized", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L2StandardBridgeETHBridgeFinalized) + if err := _L2StandardBridge.contract.UnpackLog(event, "ETHBridgeFinalized", 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 +} + +// ParseETHBridgeFinalized is a log parse operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. +// +// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_L2StandardBridge *L2StandardBridgeFilterer) ParseETHBridgeFinalized(log types.Log) (*L2StandardBridgeETHBridgeFinalized, error) { + event := new(L2StandardBridgeETHBridgeFinalized) + if err := _L2StandardBridge.contract.UnpackLog(event, "ETHBridgeFinalized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// L2StandardBridgeETHBridgeInitiatedIterator is returned from FilterETHBridgeInitiated and is used to iterate over the raw logs and unpacked data for ETHBridgeInitiated events raised by the L2StandardBridge contract. +type L2StandardBridgeETHBridgeInitiatedIterator struct { + Event *L2StandardBridgeETHBridgeInitiated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L2StandardBridgeETHBridgeInitiatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L2StandardBridgeETHBridgeInitiated) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L2StandardBridgeETHBridgeInitiated) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L2StandardBridgeETHBridgeInitiatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L2StandardBridgeETHBridgeInitiatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L2StandardBridgeETHBridgeInitiated represents a ETHBridgeInitiated event raised by the L2StandardBridge contract. +type L2StandardBridgeETHBridgeInitiated struct { + From common.Address + To common.Address + Amount *big.Int + ExtraData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterETHBridgeInitiated is a free log retrieval operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. +// +// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_L2StandardBridge *L2StandardBridgeFilterer) FilterETHBridgeInitiated(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*L2StandardBridgeETHBridgeInitiatedIterator, 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 := _L2StandardBridge.contract.FilterLogs(opts, "ETHBridgeInitiated", fromRule, toRule) + if err != nil { + return nil, err + } + return &L2StandardBridgeETHBridgeInitiatedIterator{contract: _L2StandardBridge.contract, event: "ETHBridgeInitiated", logs: logs, sub: sub}, nil +} + +// WatchETHBridgeInitiated is a free log subscription operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. +// +// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_L2StandardBridge *L2StandardBridgeFilterer) WatchETHBridgeInitiated(opts *bind.WatchOpts, sink chan<- *L2StandardBridgeETHBridgeInitiated, 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 := _L2StandardBridge.contract.WatchLogs(opts, "ETHBridgeInitiated", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L2StandardBridgeETHBridgeInitiated) + if err := _L2StandardBridge.contract.UnpackLog(event, "ETHBridgeInitiated", 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 +} + +// ParseETHBridgeInitiated is a log parse operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. +// +// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_L2StandardBridge *L2StandardBridgeFilterer) ParseETHBridgeInitiated(log types.Log) (*L2StandardBridgeETHBridgeInitiated, error) { + event := new(L2StandardBridgeETHBridgeInitiated) + if err := _L2StandardBridge.contract.UnpackLog(event, "ETHBridgeInitiated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/kroma-bindings/bindings/l2standardbridge_more.go b/kroma-bindings/bindings/l2standardbridge_more.go new file mode 100644 index 000000000..716346e63 --- /dev/null +++ b/kroma-bindings/bindings/l2standardbridge_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const L2StandardBridgeStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L2/L2StandardBridge.sol:L2StandardBridge\",\"label\":\"deposits\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_mapping(t_address,t_mapping(t_address,t_uint256))\"},{\"astId\":1001,\"contract\":\"contracts/L2/L2StandardBridge.sol:L2StandardBridge\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)49_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)49_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\",\"base\":\"t_uint256\"},\"t_mapping(t_address,t_mapping(t_address,t_uint256))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(address =\u003e uint256))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_address,t_uint256)\"},\"t_mapping(t_address,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint256\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"}}}" + +var L2StandardBridgeStorageLayout = new(solc.StorageLayout) + +var L2StandardBridgeDeployedBin = "0x6080604052600436106100b55760003560e01c80637f46ddb2116100695780638f601f661161004e5780638f601f6614610264578063927ede2d146102a7578063e11013dd146102db57600080fd5b80637f46ddb2146101eb578063870876231461024457600080fd5b80631635f5fd1161009a5780631635f5fd1461018d578063540abf73146101a057806354fd4d50146101c057600080fd5b80630166a07a1461015a57806309fc88431461017a57600080fd5b3661015557333b156101345760405162461bcd60e51b815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61015333333462030d40604051806020016040528060008152506102ee565b005b600080fd5b34801561016657600080fd5b50610153610175366004611b82565b610513565b610153610188366004611c33565b61090f565b61015361019b366004611c86565b6109cc565b3480156101ac57600080fd5b506101536101bb366004611cf9565b610e46565b3480156101cc57600080fd5b506101d5610e94565b6040516101e29190611de6565b60405180910390f35b3480156101f757600080fd5b5061021f7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e2565b34801561025057600080fd5b5061015361025f366004611df9565b610f37565b34801561027057600080fd5b5061029961027f366004611e7c565b600060208181529281526040808220909352908152205481565b6040519081526020016101e2565b3480156102b357600080fd5b5061021f7f000000000000000000000000000000000000000000000000000000000000000081565b6101536102e9366004611eb5565b610ff1565b8234146103635760405162461bcd60e51b815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161012b565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af585846040516103c2929190611f18565b60405180910390a37f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633dbb202b847f0000000000000000000000000000000000000000000000000000000000000000631635f5fd60e01b898989886040516024016104479493929190611f31565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526104da92918890600401611f7a565b6000604051808303818588803b1580156104f357600080fd5b505af1158015610507573d6000803e3d6000fd5b50505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561063157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106199190611fbf565b73ffffffffffffffffffffffffffffffffffffffff16145b6106c95760405162461bcd60e51b815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161012b565b6106d28761103a565b15610806576106e1878761106c565b6107795760405162461bcd60e51b815260206004820152604760248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204b726f6d61204d696e7461626c65204552433230206c6f636160648201527f6c20746f6b656e00000000000000000000000000000000000000000000000000608482015260a40161012b565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b50505050610884565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260208181526040808320938a168352929052205461084290849061200b565b73ffffffffffffffffffffffffffffffffffffffff808916600081815260208181526040808320948c1683529390529190912091909155610884908585611113565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd878787876040516108fe949392919061206b565b60405180910390a450505050505050565b333b156109845760405162461bcd60e51b815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161012b565b6109c73333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506102ee92505050565b505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148015610aea57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad29190611fbf565b73ffffffffffffffffffffffffffffffffffffffff16145b610b825760405162461bcd60e51b815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161012b565b823414610bf75760405162461bcd60e51b815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161012b565b3073ffffffffffffffffffffffffffffffffffffffff851603610c825760405162461bcd60e51b815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161012b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d435760405162461bcd60e51b815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161012b565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d858585604051610da4939291906120a1565b60405180910390a36000610dc9855a86604051806020016040528060008152506111e7565b905080610e3e5760405162461bcd60e51b815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161012b565b505050505050565b610e8b87873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061120392505050565b50505050505050565b6060610ebf7f000000000000000000000000000000000000000000000000000000000000000061159e565b610ee87f000000000000000000000000000000000000000000000000000000000000000061159e565b610f117f000000000000000000000000000000000000000000000000000000000000000061159e565b604051602001610f23939291906120c4565b604051602081830303815290604052905090565b333b15610fac5760405162461bcd60e51b815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161012b565b610e3e86863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061120392505050565b6110343385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506102ee92505050565b50505050565b6000611066827f30a0c5a90000000000000000000000000000000000000000000000000000000061165c565b92915050565b60008273ffffffffffffffffffffffffffffffffffffffff1663033964be6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dd9190611fbf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614905092915050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109c79084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261167f565b600080600080845160208601878a8af19150505b949350505050565b61120c8761103a565b156113405761121b878761106c565b6112b35760405162461bcd60e51b815260206004820152604760248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204b726f6d61204d696e7461626c65204552433230206c6f636160648201527f6c20746f6b656e00000000000000000000000000000000000000000000000000608482015260a40161012b565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561132357600080fd5b505af1158015611337573d6000803e3d6000fd5b505050506113d0565b61136273ffffffffffffffffffffffffffffffffffffffff8816863086611774565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260208181526040808320938a168352929052205461139e90849061213a565b73ffffffffffffffffffffffffffffffffffffffff808916600090815260208181526040808320938b16835292905220555b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf87878660405161144893929190612152565b60405180910390a47f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633dbb202b7f0000000000000000000000000000000000000000000000000000000000000000630166a07a60e01b898b8a8a8a896040516024016114d096959493929190612187565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261156392918790600401611f7a565b600060405180830381600087803b15801561157d57600080fd5b505af1158015611591573d6000803e3d6000fd5b5050505050505050505050565b606060006115ab836117d2565b600101905060008167ffffffffffffffff8111156115cb576115cb6121e2565b6040519080825280601f01601f1916602001820160405280156115f5576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846115ff57509392505050565b6000611667836118b4565b801561167857506116788383611918565b9392505050565b60006116e1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166119e79092919063ffffffff16565b90508051600014806117025750808060200190518101906117029190612211565b6109c75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161012b565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526110349085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611165565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061181b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611847576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061186557662386f26fc10000830492506010015b6305f5e100831061187d576305f5e100830492506008015b612710831061189157612710830492506004015b606483106118a3576064830492506002015b600a83106110665760010192915050565b60006118e0827f01ffc9a700000000000000000000000000000000000000000000000000000000611918565b80156110665750611911827fffffffff00000000000000000000000000000000000000000000000000000000611918565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156119d0575060208210155b80156119dc5750600081115b979650505050505050565b60606111fb8484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051611a1b9190612233565b60006040518083038185875af1925050503d8060008114611a58576040519150601f19603f3d011682016040523d82523d6000602084013e611a5d565b606091505b50915091506119dc8783838760608315611ae5578251600003611ade5773ffffffffffffffffffffffffffffffffffffffff85163b611ade5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161012b565b50816111fb565b6111fb8383815115611afa5781518083602001fd5b8060405162461bcd60e51b815260040161012b9190611de6565b73ffffffffffffffffffffffffffffffffffffffff81168114611b3657600080fd5b50565b60008083601f840112611b4b57600080fd5b50813567ffffffffffffffff811115611b6357600080fd5b602083019150836020828501011115611b7b57600080fd5b9250929050565b600080600080600080600060c0888a031215611b9d57600080fd5b8735611ba881611b14565b96506020880135611bb881611b14565b95506040880135611bc881611b14565b94506060880135611bd881611b14565b93506080880135925060a088013567ffffffffffffffff811115611bfb57600080fd5b611c078a828b01611b39565b989b979a50959850939692959293505050565b803563ffffffff81168114611c2e57600080fd5b919050565b600080600060408486031215611c4857600080fd5b611c5184611c1a565b9250602084013567ffffffffffffffff811115611c6d57600080fd5b611c7986828701611b39565b9497909650939450505050565b600080600080600060808688031215611c9e57600080fd5b8535611ca981611b14565b94506020860135611cb981611b14565b935060408601359250606086013567ffffffffffffffff811115611cdc57600080fd5b611ce888828901611b39565b969995985093965092949392505050565b600080600080600080600060c0888a031215611d1457600080fd5b8735611d1f81611b14565b96506020880135611d2f81611b14565b95506040880135611d3f81611b14565b945060608801359350611d5460808901611c1a565b925060a088013567ffffffffffffffff811115611bfb57600080fd5b60005b83811015611d8b578181015183820152602001611d73565b838111156110345750506000910152565b60008151808452611db4816020860160208601611d70565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006116786020830184611d9c565b60008060008060008060a08789031215611e1257600080fd5b8635611e1d81611b14565b95506020870135611e2d81611b14565b945060408701359350611e4260608801611c1a565b9250608087013567ffffffffffffffff811115611e5e57600080fd5b611e6a89828a01611b39565b979a9699509497509295939492505050565b60008060408385031215611e8f57600080fd5b8235611e9a81611b14565b91506020830135611eaa81611b14565b809150509250929050565b60008060008060608587031215611ecb57600080fd5b8435611ed681611b14565b9350611ee460208601611c1a565b9250604085013567ffffffffffffffff811115611f0057600080fd5b611f0c87828801611b39565b95989497509550505050565b8281526040602082015260006111fb6040830184611d9c565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152611f706080830184611d9c565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000611fa96060830185611d9c565b905063ffffffff83166040830152949350505050565b600060208284031215611fd157600080fd5b815161167881611b14565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561201d5761201d611fdc565b500390565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000611f70606083018486612022565b8381526040602082015260006120bb604083018486612022565b95945050505050565b600084516120d6818460208901611d70565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612112816001850160208a01611d70565b6001920191820152835161212d816002840160208801611d70565b0160020195945050505050565b6000821982111561214d5761214d611fdc565b500190565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006120bb6060830184611d9c565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a08301526121d660c0830184611d9c565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561222357600080fd5b8151801515811461167857600080fd5b60008251612245818460208701611d70565b919091019291505056fea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(L2StandardBridgeStorageLayoutJSON), L2StandardBridgeStorageLayout); err != nil { + panic(err) + } + + layouts["L2StandardBridge"] = L2StandardBridgeStorageLayout + deployedBytecodes["L2StandardBridge"] = L2StandardBridgeDeployedBin +} diff --git a/kroma-bindings/bindings/l2tol1messagepasser.go b/kroma-bindings/bindings/l2tol1messagepasser.go new file mode 100644 index 000000000..73aec80a3 --- /dev/null +++ b/kroma-bindings/bindings/l2tol1messagepasser.go @@ -0,0 +1,700 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// L2ToL1MessagePasserMetaData contains all meta data concerning the L2ToL1MessagePasser contract. +var L2ToL1MessagePasserMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"}],\"name\":\"MessagePassed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawerBalanceBurnt\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSAGE_VERSION\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"initiateWithdrawal\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"sentMessages\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60e060405234801561001057600080fd5b5060016080819052600060a081905260c0819052806108f661004a8239600061039a015260006103710152600061034801526108f66000f3fe6080604052600436106100695760003560e01c806382e3702d1161004357806382e3702d146100f6578063c2b3e5ac14610136578063ecc704281461014957600080fd5b80633f827a5a1461009257806344df8e70146100bf57806354fd4d50146100d457600080fd5b3661008d5761008b33620186a060405180602001604052806000815250610187565b005b600080fd5b34801561009e57600080fd5b506100a7600081565b60405161ffff90911681526020015b60405180910390f35b3480156100cb57600080fd5b5061008b610309565b3480156100e057600080fd5b506100e9610341565b6040516100b69190610686565b34801561010257600080fd5b506101266101113660046106a0565b60006020819052908152604090205460ff1681565b60405190151581526020016100b6565b61008b6101443660046106e8565b610187565b34801561015557600080fd5b506001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff166040519081526020016100b6565b60006101fc6040518060c001604052806101c06001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b815233602082015273ffffffffffffffffffffffffffffffffffffffff871660408201523460608201526080810186905260a0018490526103e4565b600081815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055905073ffffffffffffffffffffffffffffffffffffffff8416336102766001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b7f02a52367d10742d8032712c1bb8e0144ff1ec5ffda1ed7d70bb05a2744955054348787876040516102ab94939291906107ec565b60405180910390a45050600180547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8082168301167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b4761031381610431565b60405181907f7967de617a5ac1cc7eba2d6f37570a0135afa950d8bb77cdd35f0d0b4e85a16f90600090a250565b606061036c7f0000000000000000000000000000000000000000000000000000000000000000610451565b6103957f0000000000000000000000000000000000000000000000000000000000000000610451565b6103be7f0000000000000000000000000000000000000000000000000000000000000000610451565b6040516020016103d09392919061081c565b604051602081830303815290604052905090565b80516020808301516040808501516060860151608087015160a08801519351600097610414979096959101610892565b604051602081830303815290604052805190602001209050919050565b61044d60005a836040518060200160405280600081525061050f565b5050565b6060600061045e83610529565b600101905060008167ffffffffffffffff81111561047e5761047e6106b9565b6040519080825280601f01601f1916602001820160405280156104a8576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846104b257509392505050565b600080600080845160208601878a8af19695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610572577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061059e576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105bc57662386f26fc10000830492506010015b6305f5e10083106105d4576305f5e100830492506008015b61271083106105e857612710830492506004015b606483106105fa576064830492506002015b600a8310610606576001015b92915050565b60005b8381101561062757818101518382015260200161060f565b83811115610636576000848401525b50505050565b6000815180845261065481602086016020860161060c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610699602083018461063c565b9392505050565b6000602082840312156106b257600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000606084860312156106fd57600080fd5b833573ffffffffffffffffffffffffffffffffffffffff8116811461072157600080fd5b925060208401359150604084013567ffffffffffffffff8082111561074557600080fd5b818601915086601f83011261075957600080fd5b81358181111561076b5761076b6106b9565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156107b1576107b16106b9565b816040528281528960208487010111156107ca57600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b84815283602082015260806040820152600061080b608083018561063c565b905082606083015295945050505050565b6000845161082e81846020890161060c565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161086a816001850160208a0161060c565b6001920191820152835161088581600284016020880161060c565b0160020195945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526108dd60c083018461063c565b9897505050505050505056fea164736f6c634300080f000a", +} + +// L2ToL1MessagePasserABI is the input ABI used to generate the binding from. +// Deprecated: Use L2ToL1MessagePasserMetaData.ABI instead. +var L2ToL1MessagePasserABI = L2ToL1MessagePasserMetaData.ABI + +// L2ToL1MessagePasserBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use L2ToL1MessagePasserMetaData.Bin instead. +var L2ToL1MessagePasserBin = L2ToL1MessagePasserMetaData.Bin + +// DeployL2ToL1MessagePasser deploys a new Ethereum contract, binding an instance of L2ToL1MessagePasser to it. +func DeployL2ToL1MessagePasser(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *L2ToL1MessagePasser, error) { + parsed, err := L2ToL1MessagePasserMetaData.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(L2ToL1MessagePasserBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &L2ToL1MessagePasser{L2ToL1MessagePasserCaller: L2ToL1MessagePasserCaller{contract: contract}, L2ToL1MessagePasserTransactor: L2ToL1MessagePasserTransactor{contract: contract}, L2ToL1MessagePasserFilterer: L2ToL1MessagePasserFilterer{contract: contract}}, nil +} + +// L2ToL1MessagePasser is an auto generated Go binding around an Ethereum contract. +type L2ToL1MessagePasser struct { + L2ToL1MessagePasserCaller // Read-only binding to the contract + L2ToL1MessagePasserTransactor // Write-only binding to the contract + L2ToL1MessagePasserFilterer // Log filterer for contract events +} + +// L2ToL1MessagePasserCaller is an auto generated read-only Go binding around an Ethereum contract. +type L2ToL1MessagePasserCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L2ToL1MessagePasserTransactor is an auto generated write-only Go binding around an Ethereum contract. +type L2ToL1MessagePasserTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L2ToL1MessagePasserFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type L2ToL1MessagePasserFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L2ToL1MessagePasserSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type L2ToL1MessagePasserSession struct { + Contract *L2ToL1MessagePasser // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// L2ToL1MessagePasserCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type L2ToL1MessagePasserCallerSession struct { + Contract *L2ToL1MessagePasserCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// L2ToL1MessagePasserTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type L2ToL1MessagePasserTransactorSession struct { + Contract *L2ToL1MessagePasserTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// L2ToL1MessagePasserRaw is an auto generated low-level Go binding around an Ethereum contract. +type L2ToL1MessagePasserRaw struct { + Contract *L2ToL1MessagePasser // Generic contract binding to access the raw methods on +} + +// L2ToL1MessagePasserCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type L2ToL1MessagePasserCallerRaw struct { + Contract *L2ToL1MessagePasserCaller // Generic read-only contract binding to access the raw methods on +} + +// L2ToL1MessagePasserTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type L2ToL1MessagePasserTransactorRaw struct { + Contract *L2ToL1MessagePasserTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewL2ToL1MessagePasser creates a new instance of L2ToL1MessagePasser, bound to a specific deployed contract. +func NewL2ToL1MessagePasser(address common.Address, backend bind.ContractBackend) (*L2ToL1MessagePasser, error) { + contract, err := bindL2ToL1MessagePasser(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &L2ToL1MessagePasser{L2ToL1MessagePasserCaller: L2ToL1MessagePasserCaller{contract: contract}, L2ToL1MessagePasserTransactor: L2ToL1MessagePasserTransactor{contract: contract}, L2ToL1MessagePasserFilterer: L2ToL1MessagePasserFilterer{contract: contract}}, nil +} + +// NewL2ToL1MessagePasserCaller creates a new read-only instance of L2ToL1MessagePasser, bound to a specific deployed contract. +func NewL2ToL1MessagePasserCaller(address common.Address, caller bind.ContractCaller) (*L2ToL1MessagePasserCaller, error) { + contract, err := bindL2ToL1MessagePasser(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &L2ToL1MessagePasserCaller{contract: contract}, nil +} + +// NewL2ToL1MessagePasserTransactor creates a new write-only instance of L2ToL1MessagePasser, bound to a specific deployed contract. +func NewL2ToL1MessagePasserTransactor(address common.Address, transactor bind.ContractTransactor) (*L2ToL1MessagePasserTransactor, error) { + contract, err := bindL2ToL1MessagePasser(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &L2ToL1MessagePasserTransactor{contract: contract}, nil +} + +// NewL2ToL1MessagePasserFilterer creates a new log filterer instance of L2ToL1MessagePasser, bound to a specific deployed contract. +func NewL2ToL1MessagePasserFilterer(address common.Address, filterer bind.ContractFilterer) (*L2ToL1MessagePasserFilterer, error) { + contract, err := bindL2ToL1MessagePasser(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &L2ToL1MessagePasserFilterer{contract: contract}, nil +} + +// bindL2ToL1MessagePasser binds a generic wrapper to an already deployed contract. +func bindL2ToL1MessagePasser(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := L2ToL1MessagePasserMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_L2ToL1MessagePasser *L2ToL1MessagePasserRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _L2ToL1MessagePasser.Contract.L2ToL1MessagePasserCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_L2ToL1MessagePasser *L2ToL1MessagePasserRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L2ToL1MessagePasser.Contract.L2ToL1MessagePasserTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_L2ToL1MessagePasser *L2ToL1MessagePasserRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _L2ToL1MessagePasser.Contract.L2ToL1MessagePasserTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_L2ToL1MessagePasser *L2ToL1MessagePasserCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _L2ToL1MessagePasser.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_L2ToL1MessagePasser *L2ToL1MessagePasserTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L2ToL1MessagePasser.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_L2ToL1MessagePasser *L2ToL1MessagePasserTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _L2ToL1MessagePasser.Contract.contract.Transact(opts, method, params...) +} + +// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. +// +// Solidity: function MESSAGE_VERSION() view returns(uint16) +func (_L2ToL1MessagePasser *L2ToL1MessagePasserCaller) MESSAGEVERSION(opts *bind.CallOpts) (uint16, error) { + var out []interface{} + err := _L2ToL1MessagePasser.contract.Call(opts, &out, "MESSAGE_VERSION") + + if err != nil { + return *new(uint16), err + } + + out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) + + return out0, err + +} + +// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. +// +// Solidity: function MESSAGE_VERSION() view returns(uint16) +func (_L2ToL1MessagePasser *L2ToL1MessagePasserSession) MESSAGEVERSION() (uint16, error) { + return _L2ToL1MessagePasser.Contract.MESSAGEVERSION(&_L2ToL1MessagePasser.CallOpts) +} + +// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. +// +// Solidity: function MESSAGE_VERSION() view returns(uint16) +func (_L2ToL1MessagePasser *L2ToL1MessagePasserCallerSession) MESSAGEVERSION() (uint16, error) { + return _L2ToL1MessagePasser.Contract.MESSAGEVERSION(&_L2ToL1MessagePasser.CallOpts) +} + +// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. +// +// Solidity: function messageNonce() view returns(uint256) +func (_L2ToL1MessagePasser *L2ToL1MessagePasserCaller) MessageNonce(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _L2ToL1MessagePasser.contract.Call(opts, &out, "messageNonce") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. +// +// Solidity: function messageNonce() view returns(uint256) +func (_L2ToL1MessagePasser *L2ToL1MessagePasserSession) MessageNonce() (*big.Int, error) { + return _L2ToL1MessagePasser.Contract.MessageNonce(&_L2ToL1MessagePasser.CallOpts) +} + +// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. +// +// Solidity: function messageNonce() view returns(uint256) +func (_L2ToL1MessagePasser *L2ToL1MessagePasserCallerSession) MessageNonce() (*big.Int, error) { + return _L2ToL1MessagePasser.Contract.MessageNonce(&_L2ToL1MessagePasser.CallOpts) +} + +// SentMessages is a free data retrieval call binding the contract method 0x82e3702d. +// +// Solidity: function sentMessages(bytes32 ) view returns(bool) +func (_L2ToL1MessagePasser *L2ToL1MessagePasserCaller) SentMessages(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { + var out []interface{} + err := _L2ToL1MessagePasser.contract.Call(opts, &out, "sentMessages", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// SentMessages is a free data retrieval call binding the contract method 0x82e3702d. +// +// Solidity: function sentMessages(bytes32 ) view returns(bool) +func (_L2ToL1MessagePasser *L2ToL1MessagePasserSession) SentMessages(arg0 [32]byte) (bool, error) { + return _L2ToL1MessagePasser.Contract.SentMessages(&_L2ToL1MessagePasser.CallOpts, arg0) +} + +// SentMessages is a free data retrieval call binding the contract method 0x82e3702d. +// +// Solidity: function sentMessages(bytes32 ) view returns(bool) +func (_L2ToL1MessagePasser *L2ToL1MessagePasserCallerSession) SentMessages(arg0 [32]byte) (bool, error) { + return _L2ToL1MessagePasser.Contract.SentMessages(&_L2ToL1MessagePasser.CallOpts, arg0) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L2ToL1MessagePasser *L2ToL1MessagePasserCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _L2ToL1MessagePasser.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L2ToL1MessagePasser *L2ToL1MessagePasserSession) Version() (string, error) { + return _L2ToL1MessagePasser.Contract.Version(&_L2ToL1MessagePasser.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L2ToL1MessagePasser *L2ToL1MessagePasserCallerSession) Version() (string, error) { + return _L2ToL1MessagePasser.Contract.Version(&_L2ToL1MessagePasser.CallOpts) +} + +// Burn is a paid mutator transaction binding the contract method 0x44df8e70. +// +// Solidity: function burn() returns() +func (_L2ToL1MessagePasser *L2ToL1MessagePasserTransactor) Burn(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L2ToL1MessagePasser.contract.Transact(opts, "burn") +} + +// Burn is a paid mutator transaction binding the contract method 0x44df8e70. +// +// Solidity: function burn() returns() +func (_L2ToL1MessagePasser *L2ToL1MessagePasserSession) Burn() (*types.Transaction, error) { + return _L2ToL1MessagePasser.Contract.Burn(&_L2ToL1MessagePasser.TransactOpts) +} + +// Burn is a paid mutator transaction binding the contract method 0x44df8e70. +// +// Solidity: function burn() returns() +func (_L2ToL1MessagePasser *L2ToL1MessagePasserTransactorSession) Burn() (*types.Transaction, error) { + return _L2ToL1MessagePasser.Contract.Burn(&_L2ToL1MessagePasser.TransactOpts) +} + +// InitiateWithdrawal is a paid mutator transaction binding the contract method 0xc2b3e5ac. +// +// Solidity: function initiateWithdrawal(address _target, uint256 _gasLimit, bytes _data) payable returns() +func (_L2ToL1MessagePasser *L2ToL1MessagePasserTransactor) InitiateWithdrawal(opts *bind.TransactOpts, _target common.Address, _gasLimit *big.Int, _data []byte) (*types.Transaction, error) { + return _L2ToL1MessagePasser.contract.Transact(opts, "initiateWithdrawal", _target, _gasLimit, _data) +} + +// InitiateWithdrawal is a paid mutator transaction binding the contract method 0xc2b3e5ac. +// +// Solidity: function initiateWithdrawal(address _target, uint256 _gasLimit, bytes _data) payable returns() +func (_L2ToL1MessagePasser *L2ToL1MessagePasserSession) InitiateWithdrawal(_target common.Address, _gasLimit *big.Int, _data []byte) (*types.Transaction, error) { + return _L2ToL1MessagePasser.Contract.InitiateWithdrawal(&_L2ToL1MessagePasser.TransactOpts, _target, _gasLimit, _data) +} + +// InitiateWithdrawal is a paid mutator transaction binding the contract method 0xc2b3e5ac. +// +// Solidity: function initiateWithdrawal(address _target, uint256 _gasLimit, bytes _data) payable returns() +func (_L2ToL1MessagePasser *L2ToL1MessagePasserTransactorSession) InitiateWithdrawal(_target common.Address, _gasLimit *big.Int, _data []byte) (*types.Transaction, error) { + return _L2ToL1MessagePasser.Contract.InitiateWithdrawal(&_L2ToL1MessagePasser.TransactOpts, _target, _gasLimit, _data) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_L2ToL1MessagePasser *L2ToL1MessagePasserTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L2ToL1MessagePasser.contract.RawTransact(opts, nil) // calldata is disallowed for receive function +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_L2ToL1MessagePasser *L2ToL1MessagePasserSession) Receive() (*types.Transaction, error) { + return _L2ToL1MessagePasser.Contract.Receive(&_L2ToL1MessagePasser.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_L2ToL1MessagePasser *L2ToL1MessagePasserTransactorSession) Receive() (*types.Transaction, error) { + return _L2ToL1MessagePasser.Contract.Receive(&_L2ToL1MessagePasser.TransactOpts) +} + +// L2ToL1MessagePasserMessagePassedIterator is returned from FilterMessagePassed and is used to iterate over the raw logs and unpacked data for MessagePassed events raised by the L2ToL1MessagePasser contract. +type L2ToL1MessagePasserMessagePassedIterator struct { + Event *L2ToL1MessagePasserMessagePassed // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L2ToL1MessagePasserMessagePassedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L2ToL1MessagePasserMessagePassed) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L2ToL1MessagePasserMessagePassed) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L2ToL1MessagePasserMessagePassedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L2ToL1MessagePasserMessagePassedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L2ToL1MessagePasserMessagePassed represents a MessagePassed event raised by the L2ToL1MessagePasser contract. +type L2ToL1MessagePasserMessagePassed struct { + Nonce *big.Int + Sender common.Address + Target common.Address + Value *big.Int + GasLimit *big.Int + Data []byte + WithdrawalHash [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMessagePassed is a free log retrieval operation binding the contract event 0x02a52367d10742d8032712c1bb8e0144ff1ec5ffda1ed7d70bb05a2744955054. +// +// Solidity: event MessagePassed(uint256 indexed nonce, address indexed sender, address indexed target, uint256 value, uint256 gasLimit, bytes data, bytes32 withdrawalHash) +func (_L2ToL1MessagePasser *L2ToL1MessagePasserFilterer) FilterMessagePassed(opts *bind.FilterOpts, nonce []*big.Int, sender []common.Address, target []common.Address) (*L2ToL1MessagePasserMessagePassedIterator, error) { + + var nonceRule []interface{} + for _, nonceItem := range nonce { + nonceRule = append(nonceRule, nonceItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var targetRule []interface{} + for _, targetItem := range target { + targetRule = append(targetRule, targetItem) + } + + logs, sub, err := _L2ToL1MessagePasser.contract.FilterLogs(opts, "MessagePassed", nonceRule, senderRule, targetRule) + if err != nil { + return nil, err + } + return &L2ToL1MessagePasserMessagePassedIterator{contract: _L2ToL1MessagePasser.contract, event: "MessagePassed", logs: logs, sub: sub}, nil +} + +// WatchMessagePassed is a free log subscription operation binding the contract event 0x02a52367d10742d8032712c1bb8e0144ff1ec5ffda1ed7d70bb05a2744955054. +// +// Solidity: event MessagePassed(uint256 indexed nonce, address indexed sender, address indexed target, uint256 value, uint256 gasLimit, bytes data, bytes32 withdrawalHash) +func (_L2ToL1MessagePasser *L2ToL1MessagePasserFilterer) WatchMessagePassed(opts *bind.WatchOpts, sink chan<- *L2ToL1MessagePasserMessagePassed, nonce []*big.Int, sender []common.Address, target []common.Address) (event.Subscription, error) { + + var nonceRule []interface{} + for _, nonceItem := range nonce { + nonceRule = append(nonceRule, nonceItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var targetRule []interface{} + for _, targetItem := range target { + targetRule = append(targetRule, targetItem) + } + + logs, sub, err := _L2ToL1MessagePasser.contract.WatchLogs(opts, "MessagePassed", nonceRule, senderRule, targetRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L2ToL1MessagePasserMessagePassed) + if err := _L2ToL1MessagePasser.contract.UnpackLog(event, "MessagePassed", 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 +} + +// ParseMessagePassed is a log parse operation binding the contract event 0x02a52367d10742d8032712c1bb8e0144ff1ec5ffda1ed7d70bb05a2744955054. +// +// Solidity: event MessagePassed(uint256 indexed nonce, address indexed sender, address indexed target, uint256 value, uint256 gasLimit, bytes data, bytes32 withdrawalHash) +func (_L2ToL1MessagePasser *L2ToL1MessagePasserFilterer) ParseMessagePassed(log types.Log) (*L2ToL1MessagePasserMessagePassed, error) { + event := new(L2ToL1MessagePasserMessagePassed) + if err := _L2ToL1MessagePasser.contract.UnpackLog(event, "MessagePassed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// L2ToL1MessagePasserWithdrawerBalanceBurntIterator is returned from FilterWithdrawerBalanceBurnt and is used to iterate over the raw logs and unpacked data for WithdrawerBalanceBurnt events raised by the L2ToL1MessagePasser contract. +type L2ToL1MessagePasserWithdrawerBalanceBurntIterator struct { + Event *L2ToL1MessagePasserWithdrawerBalanceBurnt // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L2ToL1MessagePasserWithdrawerBalanceBurntIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L2ToL1MessagePasserWithdrawerBalanceBurnt) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L2ToL1MessagePasserWithdrawerBalanceBurnt) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L2ToL1MessagePasserWithdrawerBalanceBurntIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L2ToL1MessagePasserWithdrawerBalanceBurntIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L2ToL1MessagePasserWithdrawerBalanceBurnt represents a WithdrawerBalanceBurnt event raised by the L2ToL1MessagePasser contract. +type L2ToL1MessagePasserWithdrawerBalanceBurnt struct { + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawerBalanceBurnt is a free log retrieval operation binding the contract event 0x7967de617a5ac1cc7eba2d6f37570a0135afa950d8bb77cdd35f0d0b4e85a16f. +// +// Solidity: event WithdrawerBalanceBurnt(uint256 indexed amount) +func (_L2ToL1MessagePasser *L2ToL1MessagePasserFilterer) FilterWithdrawerBalanceBurnt(opts *bind.FilterOpts, amount []*big.Int) (*L2ToL1MessagePasserWithdrawerBalanceBurntIterator, error) { + + var amountRule []interface{} + for _, amountItem := range amount { + amountRule = append(amountRule, amountItem) + } + + logs, sub, err := _L2ToL1MessagePasser.contract.FilterLogs(opts, "WithdrawerBalanceBurnt", amountRule) + if err != nil { + return nil, err + } + return &L2ToL1MessagePasserWithdrawerBalanceBurntIterator{contract: _L2ToL1MessagePasser.contract, event: "WithdrawerBalanceBurnt", logs: logs, sub: sub}, nil +} + +// WatchWithdrawerBalanceBurnt is a free log subscription operation binding the contract event 0x7967de617a5ac1cc7eba2d6f37570a0135afa950d8bb77cdd35f0d0b4e85a16f. +// +// Solidity: event WithdrawerBalanceBurnt(uint256 indexed amount) +func (_L2ToL1MessagePasser *L2ToL1MessagePasserFilterer) WatchWithdrawerBalanceBurnt(opts *bind.WatchOpts, sink chan<- *L2ToL1MessagePasserWithdrawerBalanceBurnt, amount []*big.Int) (event.Subscription, error) { + + var amountRule []interface{} + for _, amountItem := range amount { + amountRule = append(amountRule, amountItem) + } + + logs, sub, err := _L2ToL1MessagePasser.contract.WatchLogs(opts, "WithdrawerBalanceBurnt", amountRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L2ToL1MessagePasserWithdrawerBalanceBurnt) + if err := _L2ToL1MessagePasser.contract.UnpackLog(event, "WithdrawerBalanceBurnt", 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 +} + +// ParseWithdrawerBalanceBurnt is a log parse operation binding the contract event 0x7967de617a5ac1cc7eba2d6f37570a0135afa950d8bb77cdd35f0d0b4e85a16f. +// +// Solidity: event WithdrawerBalanceBurnt(uint256 indexed amount) +func (_L2ToL1MessagePasser *L2ToL1MessagePasserFilterer) ParseWithdrawerBalanceBurnt(log types.Log) (*L2ToL1MessagePasserWithdrawerBalanceBurnt, error) { + event := new(L2ToL1MessagePasserWithdrawerBalanceBurnt) + if err := _L2ToL1MessagePasser.contract.UnpackLog(event, "WithdrawerBalanceBurnt", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/kroma-bindings/bindings/l2tol1messagepasser_more.go b/kroma-bindings/bindings/l2tol1messagepasser_more.go new file mode 100644 index 000000000..0869b69f8 --- /dev/null +++ b/kroma-bindings/bindings/l2tol1messagepasser_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const L2ToL1MessagePasserStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L2/L2ToL1MessagePasser.sol:L2ToL1MessagePasser\",\"label\":\"sentMessages\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1001,\"contract\":\"contracts/L2/L2ToL1MessagePasser.sol:L2ToL1MessagePasser\",\"label\":\"msgNonce\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_uint240\"}],\"types\":{\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_bytes32,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_bool\"},\"t_uint240\":{\"encoding\":\"inplace\",\"label\":\"uint240\",\"numberOfBytes\":\"30\"}}}" + +var L2ToL1MessagePasserStorageLayout = new(solc.StorageLayout) + +var L2ToL1MessagePasserDeployedBin = "0x6080604052600436106100695760003560e01c806382e3702d1161004357806382e3702d146100f6578063c2b3e5ac14610136578063ecc704281461014957600080fd5b80633f827a5a1461009257806344df8e70146100bf57806354fd4d50146100d457600080fd5b3661008d5761008b33620186a060405180602001604052806000815250610187565b005b600080fd5b34801561009e57600080fd5b506100a7600081565b60405161ffff90911681526020015b60405180910390f35b3480156100cb57600080fd5b5061008b610309565b3480156100e057600080fd5b506100e9610341565b6040516100b69190610686565b34801561010257600080fd5b506101266101113660046106a0565b60006020819052908152604090205460ff1681565b60405190151581526020016100b6565b61008b6101443660046106e8565b610187565b34801561015557600080fd5b506001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff166040519081526020016100b6565b60006101fc6040518060c001604052806101c06001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b815233602082015273ffffffffffffffffffffffffffffffffffffffff871660408201523460608201526080810186905260a0018490526103e4565b600081815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055905073ffffffffffffffffffffffffffffffffffffffff8416336102766001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b7f02a52367d10742d8032712c1bb8e0144ff1ec5ffda1ed7d70bb05a2744955054348787876040516102ab94939291906107ec565b60405180910390a45050600180547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8082168301167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b4761031381610431565b60405181907f7967de617a5ac1cc7eba2d6f37570a0135afa950d8bb77cdd35f0d0b4e85a16f90600090a250565b606061036c7f0000000000000000000000000000000000000000000000000000000000000000610451565b6103957f0000000000000000000000000000000000000000000000000000000000000000610451565b6103be7f0000000000000000000000000000000000000000000000000000000000000000610451565b6040516020016103d09392919061081c565b604051602081830303815290604052905090565b80516020808301516040808501516060860151608087015160a08801519351600097610414979096959101610892565b604051602081830303815290604052805190602001209050919050565b61044d60005a836040518060200160405280600081525061050f565b5050565b6060600061045e83610529565b600101905060008167ffffffffffffffff81111561047e5761047e6106b9565b6040519080825280601f01601f1916602001820160405280156104a8576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846104b257509392505050565b600080600080845160208601878a8af19695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610572577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061059e576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105bc57662386f26fc10000830492506010015b6305f5e10083106105d4576305f5e100830492506008015b61271083106105e857612710830492506004015b606483106105fa576064830492506002015b600a8310610606576001015b92915050565b60005b8381101561062757818101518382015260200161060f565b83811115610636576000848401525b50505050565b6000815180845261065481602086016020860161060c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610699602083018461063c565b9392505050565b6000602082840312156106b257600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000606084860312156106fd57600080fd5b833573ffffffffffffffffffffffffffffffffffffffff8116811461072157600080fd5b925060208401359150604084013567ffffffffffffffff8082111561074557600080fd5b818601915086601f83011261075957600080fd5b81358181111561076b5761076b6106b9565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156107b1576107b16106b9565b816040528281528960208487010111156107ca57600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b84815283602082015260806040820152600061080b608083018561063c565b905082606083015295945050505050565b6000845161082e81846020890161060c565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161086a816001850160208a0161060c565b6001920191820152835161088581600284016020880161060c565b0160020195945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526108dd60c083018461063c565b9897505050505050505056fea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(L2ToL1MessagePasserStorageLayoutJSON), L2ToL1MessagePasserStorageLayout); err != nil { + panic(err) + } + + layouts["L2ToL1MessagePasser"] = L2ToL1MessagePasserStorageLayout + deployedBytecodes["L2ToL1MessagePasser"] = L2ToL1MessagePasserDeployedBin +} diff --git a/op-bindings/bindings/protocolvault.go b/kroma-bindings/bindings/protocolvault.go similarity index 100% rename from op-bindings/bindings/protocolvault.go rename to kroma-bindings/bindings/protocolvault.go diff --git a/kroma-bindings/bindings/protocolvault_more.go b/kroma-bindings/bindings/protocolvault_more.go new file mode 100644 index 000000000..54df77b71 --- /dev/null +++ b/kroma-bindings/bindings/protocolvault_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const ProtocolVaultStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L2/ProtocolVault.sol:ProtocolVault\",\"label\":\"totalProcessed\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint256\"}],\"types\":{\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"}}}" + +var ProtocolVaultStorageLayout = new(solc.StorageLayout) + +var ProtocolVaultDeployedBin = "0x60806040526004361061005e5760003560e01c806354fd4d501161004357806354fd4d50146100df57806384411d6514610101578063d3e5792b1461012557600080fd5b80630d9019e11461006a5780633ccfd60b146100c857600080fd5b3661006557005b600080fd5b34801561007657600080fd5b5061009e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156100d457600080fd5b506100dd610159565b005b3480156100eb57600080fd5b506100f461037a565b6040516100bf9190610638565b34801561010d57600080fd5b5061011760005481565b6040519081526020016100bf565b34801561013157600080fd5b506101177f000000000000000000000000000000000000000000000000000000000000000081565b7f0000000000000000000000000000000000000000000000000000000000000000471015610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4665655661756c743a207769746864726177616c20616d6f756e74206d75737460448201527f2062652067726561746572207468616e206d696e696d756d207769746864726160648201527f77616c20616d6f756e7400000000000000000000000000000000000000000000608482015260a40160405180910390fd5b6000479050806000808282546102499190610652565b9091555050604080518281527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166020820152338183015290517fc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba9181900360600190a1604080516020810182526000815290517fe11013dd0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000099163e11013dd918491610345917f0000000000000000000000000000000000000000000000000000000000000000916188b891600401610691565b6000604051808303818588803b15801561035e57600080fd5b505af1158015610372573d6000803e3d6000fd5b505050505050565b60606103a57f000000000000000000000000000000000000000000000000000000000000000061041d565b6103ce7f000000000000000000000000000000000000000000000000000000000000000061041d565b6103f77f000000000000000000000000000000000000000000000000000000000000000061041d565b604051602001610409939291906106d5565b604051602081830303815290604052905090565b6060600061042a836104db565b600101905060008167ffffffffffffffff81111561044a5761044a61074b565b6040519080825280601f01601f191660200182016040528015610474576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461047e57509392505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610524577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610550576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061056e57662386f26fc10000830492506010015b6305f5e1008310610586576305f5e100830492506008015b612710831061059a57612710830492506004015b606483106105ac576064830492506002015b600a83106105b8576001015b92915050565b60005b838110156105d95781810151838201526020016105c1565b838111156105e8576000848401525b50505050565b600081518084526106068160208601602086016105be565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061064b60208301846105ee565b9392505050565b6000821982111561068c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff831660208201526060604082015260006106cc60608301846105ee565b95945050505050565b600084516106e78184602089016105be565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610723816001850160208a016105be565b6001920191820152835161073e8160028401602088016105be565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(ProtocolVaultStorageLayoutJSON), ProtocolVaultStorageLayout); err != nil { + panic(err) + } + + layouts["ProtocolVault"] = ProtocolVaultStorageLayout + deployedBytecodes["ProtocolVault"] = ProtocolVaultDeployedBin +} diff --git a/kroma-bindings/bindings/proxy.go b/kroma-bindings/bindings/proxy.go new file mode 100644 index 000000000..2dc21b70d --- /dev/null +++ b/kroma-bindings/bindings/proxy.go @@ -0,0 +1,629 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// ProxyMetaData contains all meta data concerning the Proxy contract. +var ProxyMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x608060405234801561001057600080fd5b5060405161091838038061091883398101604081905261002f916100b2565b6100388161003e565b506100e2565b60006100566000805160206108f88339815191525490565b6000805160206108f8833981519152839055604080516001600160a01b038084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b6000602082840312156100c457600080fd5b81516001600160a01b03811681146100db57600080fd5b9392505050565b610807806100f16000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106d9565b610224565b6100a86100a33660046106f4565b610296565b6040516100b59190610777565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106d9565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ea565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060b565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006106357fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038390556040805173ffffffffffffffffffffffffffffffffffffffff8084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d457600080fd5b919050565b6000602082840312156106eb57600080fd5b610412826106b0565b60008060006040848603121561070957600080fd5b610712846106b0565b9250602084013567ffffffffffffffff8082111561072f57600080fd5b818601915086601f83011261074357600080fd5b81358181111561075257600080fd5b87602082850101111561076457600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a457858101830151858201604001528201610788565b818111156107b6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", +} + +// ProxyABI is the input ABI used to generate the binding from. +// Deprecated: Use ProxyMetaData.ABI instead. +var ProxyABI = ProxyMetaData.ABI + +// ProxyBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ProxyMetaData.Bin instead. +var ProxyBin = ProxyMetaData.Bin + +// DeployProxy deploys a new Ethereum contract, binding an instance of Proxy to it. +func DeployProxy(auth *bind.TransactOpts, backend bind.ContractBackend, _admin common.Address) (common.Address, *types.Transaction, *Proxy, error) { + parsed, err := ProxyMetaData.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(ProxyBin), backend, _admin) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &Proxy{ProxyCaller: ProxyCaller{contract: contract}, ProxyTransactor: ProxyTransactor{contract: contract}, ProxyFilterer: ProxyFilterer{contract: contract}}, nil +} + +// Proxy is an auto generated Go binding around an Ethereum contract. +type Proxy struct { + ProxyCaller // Read-only binding to the contract + ProxyTransactor // Write-only binding to the contract + ProxyFilterer // Log filterer for contract events +} + +// ProxyCaller is an auto generated read-only Go binding around an Ethereum contract. +type ProxyCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ProxyTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ProxyTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ProxyFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ProxyFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ProxySession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ProxySession struct { + Contract *Proxy // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ProxyCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ProxyCallerSession struct { + Contract *ProxyCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ProxyTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ProxyTransactorSession struct { + Contract *ProxyTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ProxyRaw is an auto generated low-level Go binding around an Ethereum contract. +type ProxyRaw struct { + Contract *Proxy // Generic contract binding to access the raw methods on +} + +// ProxyCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ProxyCallerRaw struct { + Contract *ProxyCaller // Generic read-only contract binding to access the raw methods on +} + +// ProxyTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ProxyTransactorRaw struct { + Contract *ProxyTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewProxy creates a new instance of Proxy, bound to a specific deployed contract. +func NewProxy(address common.Address, backend bind.ContractBackend) (*Proxy, error) { + contract, err := bindProxy(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &Proxy{ProxyCaller: ProxyCaller{contract: contract}, ProxyTransactor: ProxyTransactor{contract: contract}, ProxyFilterer: ProxyFilterer{contract: contract}}, nil +} + +// NewProxyCaller creates a new read-only instance of Proxy, bound to a specific deployed contract. +func NewProxyCaller(address common.Address, caller bind.ContractCaller) (*ProxyCaller, error) { + contract, err := bindProxy(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ProxyCaller{contract: contract}, nil +} + +// NewProxyTransactor creates a new write-only instance of Proxy, bound to a specific deployed contract. +func NewProxyTransactor(address common.Address, transactor bind.ContractTransactor) (*ProxyTransactor, error) { + contract, err := bindProxy(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ProxyTransactor{contract: contract}, nil +} + +// NewProxyFilterer creates a new log filterer instance of Proxy, bound to a specific deployed contract. +func NewProxyFilterer(address common.Address, filterer bind.ContractFilterer) (*ProxyFilterer, error) { + contract, err := bindProxy(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ProxyFilterer{contract: contract}, nil +} + +// bindProxy binds a generic wrapper to an already deployed contract. +func bindProxy(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ProxyMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_Proxy *ProxyRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Proxy.Contract.ProxyCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_Proxy *ProxyRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Proxy.Contract.ProxyTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Proxy *ProxyRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Proxy.Contract.ProxyTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_Proxy *ProxyCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Proxy.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_Proxy *ProxyTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Proxy.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Proxy *ProxyTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Proxy.Contract.contract.Transact(opts, method, params...) +} + +// Admin is a paid mutator transaction binding the contract method 0xf851a440. +// +// Solidity: function admin() returns(address) +func (_Proxy *ProxyTransactor) Admin(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Proxy.contract.Transact(opts, "admin") +} + +// Admin is a paid mutator transaction binding the contract method 0xf851a440. +// +// Solidity: function admin() returns(address) +func (_Proxy *ProxySession) Admin() (*types.Transaction, error) { + return _Proxy.Contract.Admin(&_Proxy.TransactOpts) +} + +// Admin is a paid mutator transaction binding the contract method 0xf851a440. +// +// Solidity: function admin() returns(address) +func (_Proxy *ProxyTransactorSession) Admin() (*types.Transaction, error) { + return _Proxy.Contract.Admin(&_Proxy.TransactOpts) +} + +// ChangeAdmin is a paid mutator transaction binding the contract method 0x8f283970. +// +// Solidity: function changeAdmin(address _admin) returns() +func (_Proxy *ProxyTransactor) ChangeAdmin(opts *bind.TransactOpts, _admin common.Address) (*types.Transaction, error) { + return _Proxy.contract.Transact(opts, "changeAdmin", _admin) +} + +// ChangeAdmin is a paid mutator transaction binding the contract method 0x8f283970. +// +// Solidity: function changeAdmin(address _admin) returns() +func (_Proxy *ProxySession) ChangeAdmin(_admin common.Address) (*types.Transaction, error) { + return _Proxy.Contract.ChangeAdmin(&_Proxy.TransactOpts, _admin) +} + +// ChangeAdmin is a paid mutator transaction binding the contract method 0x8f283970. +// +// Solidity: function changeAdmin(address _admin) returns() +func (_Proxy *ProxyTransactorSession) ChangeAdmin(_admin common.Address) (*types.Transaction, error) { + return _Proxy.Contract.ChangeAdmin(&_Proxy.TransactOpts, _admin) +} + +// Implementation is a paid mutator transaction binding the contract method 0x5c60da1b. +// +// Solidity: function implementation() returns(address) +func (_Proxy *ProxyTransactor) Implementation(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Proxy.contract.Transact(opts, "implementation") +} + +// Implementation is a paid mutator transaction binding the contract method 0x5c60da1b. +// +// Solidity: function implementation() returns(address) +func (_Proxy *ProxySession) Implementation() (*types.Transaction, error) { + return _Proxy.Contract.Implementation(&_Proxy.TransactOpts) +} + +// Implementation is a paid mutator transaction binding the contract method 0x5c60da1b. +// +// Solidity: function implementation() returns(address) +func (_Proxy *ProxyTransactorSession) Implementation() (*types.Transaction, error) { + return _Proxy.Contract.Implementation(&_Proxy.TransactOpts) +} + +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address _implementation) returns() +func (_Proxy *ProxyTransactor) UpgradeTo(opts *bind.TransactOpts, _implementation common.Address) (*types.Transaction, error) { + return _Proxy.contract.Transact(opts, "upgradeTo", _implementation) +} + +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address _implementation) returns() +func (_Proxy *ProxySession) UpgradeTo(_implementation common.Address) (*types.Transaction, error) { + return _Proxy.Contract.UpgradeTo(&_Proxy.TransactOpts, _implementation) +} + +// UpgradeTo is a paid mutator transaction binding the contract method 0x3659cfe6. +// +// Solidity: function upgradeTo(address _implementation) returns() +func (_Proxy *ProxyTransactorSession) UpgradeTo(_implementation common.Address) (*types.Transaction, error) { + return _Proxy.Contract.UpgradeTo(&_Proxy.TransactOpts, _implementation) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address _implementation, bytes _data) payable returns(bytes) +func (_Proxy *ProxyTransactor) UpgradeToAndCall(opts *bind.TransactOpts, _implementation common.Address, _data []byte) (*types.Transaction, error) { + return _Proxy.contract.Transact(opts, "upgradeToAndCall", _implementation, _data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address _implementation, bytes _data) payable returns(bytes) +func (_Proxy *ProxySession) UpgradeToAndCall(_implementation common.Address, _data []byte) (*types.Transaction, error) { + return _Proxy.Contract.UpgradeToAndCall(&_Proxy.TransactOpts, _implementation, _data) +} + +// UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. +// +// Solidity: function upgradeToAndCall(address _implementation, bytes _data) payable returns(bytes) +func (_Proxy *ProxyTransactorSession) UpgradeToAndCall(_implementation common.Address, _data []byte) (*types.Transaction, error) { + return _Proxy.Contract.UpgradeToAndCall(&_Proxy.TransactOpts, _implementation, _data) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_Proxy *ProxyTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { + return _Proxy.contract.RawTransact(opts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_Proxy *ProxySession) Fallback(calldata []byte) (*types.Transaction, error) { + return _Proxy.Contract.Fallback(&_Proxy.TransactOpts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_Proxy *ProxyTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _Proxy.Contract.Fallback(&_Proxy.TransactOpts, calldata) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_Proxy *ProxyTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Proxy.contract.RawTransact(opts, nil) // calldata is disallowed for receive function +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_Proxy *ProxySession) Receive() (*types.Transaction, error) { + return _Proxy.Contract.Receive(&_Proxy.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_Proxy *ProxyTransactorSession) Receive() (*types.Transaction, error) { + return _Proxy.Contract.Receive(&_Proxy.TransactOpts) +} + +// ProxyAdminChangedIterator is returned from FilterAdminChanged and is used to iterate over the raw logs and unpacked data for AdminChanged events raised by the Proxy contract. +type ProxyAdminChangedIterator struct { + Event *ProxyAdminChanged // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ProxyAdminChangedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ProxyAdminChanged) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ProxyAdminChanged) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ProxyAdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ProxyAdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ProxyAdminChanged represents a AdminChanged event raised by the Proxy contract. +type ProxyAdminChanged struct { + PreviousAdmin common.Address + NewAdmin common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterAdminChanged is a free log retrieval operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. +// +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_Proxy *ProxyFilterer) FilterAdminChanged(opts *bind.FilterOpts) (*ProxyAdminChangedIterator, error) { + + logs, sub, err := _Proxy.contract.FilterLogs(opts, "AdminChanged") + if err != nil { + return nil, err + } + return &ProxyAdminChangedIterator{contract: _Proxy.contract, event: "AdminChanged", logs: logs, sub: sub}, nil +} + +// WatchAdminChanged is a free log subscription operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. +// +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_Proxy *ProxyFilterer) WatchAdminChanged(opts *bind.WatchOpts, sink chan<- *ProxyAdminChanged) (event.Subscription, error) { + + logs, sub, err := _Proxy.contract.WatchLogs(opts, "AdminChanged") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ProxyAdminChanged) + if err := _Proxy.contract.UnpackLog(event, "AdminChanged", 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 +} + +// ParseAdminChanged is a log parse operation binding the contract event 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f. +// +// Solidity: event AdminChanged(address previousAdmin, address newAdmin) +func (_Proxy *ProxyFilterer) ParseAdminChanged(log types.Log) (*ProxyAdminChanged, error) { + event := new(ProxyAdminChanged) + if err := _Proxy.contract.UnpackLog(event, "AdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ProxyUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the Proxy contract. +type ProxyUpgradedIterator struct { + Event *ProxyUpgraded // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ProxyUpgradedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ProxyUpgraded) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ProxyUpgraded) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ProxyUpgradedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ProxyUpgradedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ProxyUpgraded represents a Upgraded event raised by the Proxy contract. +type ProxyUpgraded struct { + Implementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_Proxy *ProxyFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*ProxyUpgradedIterator, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _Proxy.contract.FilterLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return &ProxyUpgradedIterator{contract: _Proxy.contract, event: "Upgraded", logs: logs, sub: sub}, nil +} + +// WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_Proxy *ProxyFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *ProxyUpgraded, implementation []common.Address) (event.Subscription, error) { + + var implementationRule []interface{} + for _, implementationItem := range implementation { + implementationRule = append(implementationRule, implementationItem) + } + + logs, sub, err := _Proxy.contract.WatchLogs(opts, "Upgraded", implementationRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ProxyUpgraded) + if err := _Proxy.contract.UnpackLog(event, "Upgraded", 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 +} + +// ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b. +// +// Solidity: event Upgraded(address indexed implementation) +func (_Proxy *ProxyFilterer) ParseUpgraded(log types.Log) (*ProxyUpgraded, error) { + event := new(ProxyUpgraded) + if err := _Proxy.contract.UnpackLog(event, "Upgraded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/kroma-bindings/bindings/proxy_more.go b/kroma-bindings/bindings/proxy_more.go new file mode 100644 index 000000000..bd1df18dc --- /dev/null +++ b/kroma-bindings/bindings/proxy_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const ProxyStorageLayoutJSON = "{\"storage\":null,\"types\":{}}" + +var ProxyStorageLayout = new(solc.StorageLayout) + +var ProxyDeployedBin = "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106d9565b610224565b6100a86100a33660046106f4565b610296565b6040516100b59190610777565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106d9565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ea565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060b565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006106357fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038390556040805173ffffffffffffffffffffffffffffffffffffffff8084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d457600080fd5b919050565b6000602082840312156106eb57600080fd5b610412826106b0565b60008060006040848603121561070957600080fd5b610712846106b0565b9250602084013567ffffffffffffffff8082111561072f57600080fd5b818601915086601f83011261074357600080fd5b81358181111561075257600080fd5b87602082850101111561076457600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a457858101830151858201604001528201610788565b818111156107b6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(ProxyStorageLayoutJSON), ProxyStorageLayout); err != nil { + panic(err) + } + + layouts["Proxy"] = ProxyStorageLayout + deployedBytecodes["Proxy"] = ProxyDeployedBin +} diff --git a/kroma-bindings/bindings/proxyadmin.go b/kroma-bindings/bindings/proxyadmin.go new file mode 100644 index 000000000..30516ac55 --- /dev/null +++ b/kroma-bindings/bindings/proxyadmin.go @@ -0,0 +1,554 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// ProxyAdminMetaData contains all meta data concerning the ProxyAdmin contract. +var ProxyAdminMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b506040516109d43803806109d483398101604081905261002f91610097565b61003833610047565b61004181610047565b506100c7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a957600080fd5b81516001600160a01b03811681146100c057600080fd5b9392505050565b6108fe806100d66000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046105fd565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610215565b005b3480156100ec57600080fd5b506100de6100fb366004610621565b610229565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de61013936600461071e565b6102b7565b34801561014a57600080fd5b506100de610159366004610621565b610380565b34801561016a57600080fd5b506100de6101793660046105fd565b6103dc565b34801561018a57600080fd5b506100a06101993660046105fd565b610498565b60008173ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020f91906107c3565b92915050565b61021d6104e5565b6102276000610566565b565b6102316104e5565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b15801561029b57600080fd5b505af11580156102af573d6000803e3d6000fd5b505050505050565b6102bf6104e5565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef286903490610315908690869060040161080c565b60006040518083038185885af1158015610333573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261037a919081019061087a565b50505050565b6103886104e5565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe690602401610281565b6103e46104e5565b73ffffffffffffffffffffffffffffffffffffffff811661048c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61049581610566565b50565b60008173ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101eb573d6000803e3d6000fd5b60005473ffffffffffffffffffffffffffffffffffffffff163314610227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610483565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff8116811461049557600080fd5b60006020828403121561060f57600080fd5b813561061a816105db565b9392505050565b6000806040838503121561063457600080fd5b823561063f816105db565b9150602083013561064f816105db565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156106d0576106d061065a565b604052919050565b600067ffffffffffffffff8211156106f2576106f261065a565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60008060006060848603121561073357600080fd5b833561073e816105db565b9250602084013561074e816105db565b9150604084013567ffffffffffffffff81111561076a57600080fd5b8401601f8101861361077b57600080fd5b803561078e610789826106d8565b610689565b8181528760208385010111156107a357600080fd5b816020840160208301376000602083830101528093505050509250925092565b6000602082840312156107d557600080fd5b815161061a816105db565b60005b838110156107fb5781810151838201526020016107e3565b8381111561037a5750506000910152565b73ffffffffffffffffffffffffffffffffffffffff8316815260406020820152600082518060408401526108478160608501602087016107e0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016060019392505050565b60006020828403121561088c57600080fd5b815167ffffffffffffffff8111156108a357600080fd5b8201601f810184136108b457600080fd5b80516108c2610789826106d8565b8181528560208385010111156108d757600080fd5b6108e88260208301602086016107e0565b9594505050505056fea164736f6c634300080f000a", +} + +// ProxyAdminABI is the input ABI used to generate the binding from. +// Deprecated: Use ProxyAdminMetaData.ABI instead. +var ProxyAdminABI = ProxyAdminMetaData.ABI + +// ProxyAdminBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ProxyAdminMetaData.Bin instead. +var ProxyAdminBin = ProxyAdminMetaData.Bin + +// DeployProxyAdmin deploys a new Ethereum contract, binding an instance of ProxyAdmin to it. +func DeployProxyAdmin(auth *bind.TransactOpts, backend bind.ContractBackend, _owner common.Address) (common.Address, *types.Transaction, *ProxyAdmin, error) { + parsed, err := ProxyAdminMetaData.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(ProxyAdminBin), backend, _owner) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ProxyAdmin{ProxyAdminCaller: ProxyAdminCaller{contract: contract}, ProxyAdminTransactor: ProxyAdminTransactor{contract: contract}, ProxyAdminFilterer: ProxyAdminFilterer{contract: contract}}, nil +} + +// ProxyAdmin is an auto generated Go binding around an Ethereum contract. +type ProxyAdmin struct { + ProxyAdminCaller // Read-only binding to the contract + ProxyAdminTransactor // Write-only binding to the contract + ProxyAdminFilterer // Log filterer for contract events +} + +// ProxyAdminCaller is an auto generated read-only Go binding around an Ethereum contract. +type ProxyAdminCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ProxyAdminTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ProxyAdminTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ProxyAdminFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ProxyAdminFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ProxyAdminSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ProxyAdminSession struct { + Contract *ProxyAdmin // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ProxyAdminCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ProxyAdminCallerSession struct { + Contract *ProxyAdminCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ProxyAdminTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ProxyAdminTransactorSession struct { + Contract *ProxyAdminTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ProxyAdminRaw is an auto generated low-level Go binding around an Ethereum contract. +type ProxyAdminRaw struct { + Contract *ProxyAdmin // Generic contract binding to access the raw methods on +} + +// ProxyAdminCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ProxyAdminCallerRaw struct { + Contract *ProxyAdminCaller // Generic read-only contract binding to access the raw methods on +} + +// ProxyAdminTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ProxyAdminTransactorRaw struct { + Contract *ProxyAdminTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewProxyAdmin creates a new instance of ProxyAdmin, bound to a specific deployed contract. +func NewProxyAdmin(address common.Address, backend bind.ContractBackend) (*ProxyAdmin, error) { + contract, err := bindProxyAdmin(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ProxyAdmin{ProxyAdminCaller: ProxyAdminCaller{contract: contract}, ProxyAdminTransactor: ProxyAdminTransactor{contract: contract}, ProxyAdminFilterer: ProxyAdminFilterer{contract: contract}}, nil +} + +// NewProxyAdminCaller creates a new read-only instance of ProxyAdmin, bound to a specific deployed contract. +func NewProxyAdminCaller(address common.Address, caller bind.ContractCaller) (*ProxyAdminCaller, error) { + contract, err := bindProxyAdmin(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ProxyAdminCaller{contract: contract}, nil +} + +// NewProxyAdminTransactor creates a new write-only instance of ProxyAdmin, bound to a specific deployed contract. +func NewProxyAdminTransactor(address common.Address, transactor bind.ContractTransactor) (*ProxyAdminTransactor, error) { + contract, err := bindProxyAdmin(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ProxyAdminTransactor{contract: contract}, nil +} + +// NewProxyAdminFilterer creates a new log filterer instance of ProxyAdmin, bound to a specific deployed contract. +func NewProxyAdminFilterer(address common.Address, filterer bind.ContractFilterer) (*ProxyAdminFilterer, error) { + contract, err := bindProxyAdmin(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ProxyAdminFilterer{contract: contract}, nil +} + +// bindProxyAdmin binds a generic wrapper to an already deployed contract. +func bindProxyAdmin(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ProxyAdminMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ProxyAdmin *ProxyAdminRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ProxyAdmin.Contract.ProxyAdminCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ProxyAdmin *ProxyAdminRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ProxyAdmin.Contract.ProxyAdminTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ProxyAdmin *ProxyAdminRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ProxyAdmin.Contract.ProxyAdminTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ProxyAdmin *ProxyAdminCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ProxyAdmin.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ProxyAdmin *ProxyAdminTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ProxyAdmin.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ProxyAdmin *ProxyAdminTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ProxyAdmin.Contract.contract.Transact(opts, method, params...) +} + +// GetProxyAdmin is a free data retrieval call binding the contract method 0xf3b7dead. +// +// Solidity: function getProxyAdmin(address _proxy) view returns(address) +func (_ProxyAdmin *ProxyAdminCaller) GetProxyAdmin(opts *bind.CallOpts, _proxy common.Address) (common.Address, error) { + var out []interface{} + err := _ProxyAdmin.contract.Call(opts, &out, "getProxyAdmin", _proxy) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetProxyAdmin is a free data retrieval call binding the contract method 0xf3b7dead. +// +// Solidity: function getProxyAdmin(address _proxy) view returns(address) +func (_ProxyAdmin *ProxyAdminSession) GetProxyAdmin(_proxy common.Address) (common.Address, error) { + return _ProxyAdmin.Contract.GetProxyAdmin(&_ProxyAdmin.CallOpts, _proxy) +} + +// GetProxyAdmin is a free data retrieval call binding the contract method 0xf3b7dead. +// +// Solidity: function getProxyAdmin(address _proxy) view returns(address) +func (_ProxyAdmin *ProxyAdminCallerSession) GetProxyAdmin(_proxy common.Address) (common.Address, error) { + return _ProxyAdmin.Contract.GetProxyAdmin(&_ProxyAdmin.CallOpts, _proxy) +} + +// GetProxyImplementation is a free data retrieval call binding the contract method 0x204e1c7a. +// +// Solidity: function getProxyImplementation(address _proxy) view returns(address) +func (_ProxyAdmin *ProxyAdminCaller) GetProxyImplementation(opts *bind.CallOpts, _proxy common.Address) (common.Address, error) { + var out []interface{} + err := _ProxyAdmin.contract.Call(opts, &out, "getProxyImplementation", _proxy) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetProxyImplementation is a free data retrieval call binding the contract method 0x204e1c7a. +// +// Solidity: function getProxyImplementation(address _proxy) view returns(address) +func (_ProxyAdmin *ProxyAdminSession) GetProxyImplementation(_proxy common.Address) (common.Address, error) { + return _ProxyAdmin.Contract.GetProxyImplementation(&_ProxyAdmin.CallOpts, _proxy) +} + +// GetProxyImplementation is a free data retrieval call binding the contract method 0x204e1c7a. +// +// Solidity: function getProxyImplementation(address _proxy) view returns(address) +func (_ProxyAdmin *ProxyAdminCallerSession) GetProxyImplementation(_proxy common.Address) (common.Address, error) { + return _ProxyAdmin.Contract.GetProxyImplementation(&_ProxyAdmin.CallOpts, _proxy) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ProxyAdmin *ProxyAdminCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ProxyAdmin.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 + +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ProxyAdmin *ProxyAdminSession) Owner() (common.Address, error) { + return _ProxyAdmin.Contract.Owner(&_ProxyAdmin.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ProxyAdmin *ProxyAdminCallerSession) Owner() (common.Address, error) { + return _ProxyAdmin.Contract.Owner(&_ProxyAdmin.CallOpts) +} + +// ChangeProxyAdmin is a paid mutator transaction binding the contract method 0x7eff275e. +// +// Solidity: function changeProxyAdmin(address _proxy, address _newAdmin) returns() +func (_ProxyAdmin *ProxyAdminTransactor) ChangeProxyAdmin(opts *bind.TransactOpts, _proxy common.Address, _newAdmin common.Address) (*types.Transaction, error) { + return _ProxyAdmin.contract.Transact(opts, "changeProxyAdmin", _proxy, _newAdmin) +} + +// ChangeProxyAdmin is a paid mutator transaction binding the contract method 0x7eff275e. +// +// Solidity: function changeProxyAdmin(address _proxy, address _newAdmin) returns() +func (_ProxyAdmin *ProxyAdminSession) ChangeProxyAdmin(_proxy common.Address, _newAdmin common.Address) (*types.Transaction, error) { + return _ProxyAdmin.Contract.ChangeProxyAdmin(&_ProxyAdmin.TransactOpts, _proxy, _newAdmin) +} + +// ChangeProxyAdmin is a paid mutator transaction binding the contract method 0x7eff275e. +// +// Solidity: function changeProxyAdmin(address _proxy, address _newAdmin) returns() +func (_ProxyAdmin *ProxyAdminTransactorSession) ChangeProxyAdmin(_proxy common.Address, _newAdmin common.Address) (*types.Transaction, error) { + return _ProxyAdmin.Contract.ChangeProxyAdmin(&_ProxyAdmin.TransactOpts, _proxy, _newAdmin) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ProxyAdmin *ProxyAdminTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ProxyAdmin.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ProxyAdmin *ProxyAdminSession) RenounceOwnership() (*types.Transaction, error) { + return _ProxyAdmin.Contract.RenounceOwnership(&_ProxyAdmin.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ProxyAdmin *ProxyAdminTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _ProxyAdmin.Contract.RenounceOwnership(&_ProxyAdmin.TransactOpts) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ProxyAdmin *ProxyAdminTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _ProxyAdmin.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ProxyAdmin *ProxyAdminSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _ProxyAdmin.Contract.TransferOwnership(&_ProxyAdmin.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ProxyAdmin *ProxyAdminTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _ProxyAdmin.Contract.TransferOwnership(&_ProxyAdmin.TransactOpts, newOwner) +} + +// Upgrade is a paid mutator transaction binding the contract method 0x99a88ec4. +// +// Solidity: function upgrade(address _proxy, address _implementation) returns() +func (_ProxyAdmin *ProxyAdminTransactor) Upgrade(opts *bind.TransactOpts, _proxy common.Address, _implementation common.Address) (*types.Transaction, error) { + return _ProxyAdmin.contract.Transact(opts, "upgrade", _proxy, _implementation) +} + +// Upgrade is a paid mutator transaction binding the contract method 0x99a88ec4. +// +// Solidity: function upgrade(address _proxy, address _implementation) returns() +func (_ProxyAdmin *ProxyAdminSession) Upgrade(_proxy common.Address, _implementation common.Address) (*types.Transaction, error) { + return _ProxyAdmin.Contract.Upgrade(&_ProxyAdmin.TransactOpts, _proxy, _implementation) +} + +// Upgrade is a paid mutator transaction binding the contract method 0x99a88ec4. +// +// Solidity: function upgrade(address _proxy, address _implementation) returns() +func (_ProxyAdmin *ProxyAdminTransactorSession) Upgrade(_proxy common.Address, _implementation common.Address) (*types.Transaction, error) { + return _ProxyAdmin.Contract.Upgrade(&_ProxyAdmin.TransactOpts, _proxy, _implementation) +} + +// UpgradeAndCall is a paid mutator transaction binding the contract method 0x9623609d. +// +// Solidity: function upgradeAndCall(address _proxy, address _implementation, bytes _data) payable returns() +func (_ProxyAdmin *ProxyAdminTransactor) UpgradeAndCall(opts *bind.TransactOpts, _proxy common.Address, _implementation common.Address, _data []byte) (*types.Transaction, error) { + return _ProxyAdmin.contract.Transact(opts, "upgradeAndCall", _proxy, _implementation, _data) +} + +// UpgradeAndCall is a paid mutator transaction binding the contract method 0x9623609d. +// +// Solidity: function upgradeAndCall(address _proxy, address _implementation, bytes _data) payable returns() +func (_ProxyAdmin *ProxyAdminSession) UpgradeAndCall(_proxy common.Address, _implementation common.Address, _data []byte) (*types.Transaction, error) { + return _ProxyAdmin.Contract.UpgradeAndCall(&_ProxyAdmin.TransactOpts, _proxy, _implementation, _data) +} + +// UpgradeAndCall is a paid mutator transaction binding the contract method 0x9623609d. +// +// Solidity: function upgradeAndCall(address _proxy, address _implementation, bytes _data) payable returns() +func (_ProxyAdmin *ProxyAdminTransactorSession) UpgradeAndCall(_proxy common.Address, _implementation common.Address, _data []byte) (*types.Transaction, error) { + return _ProxyAdmin.Contract.UpgradeAndCall(&_ProxyAdmin.TransactOpts, _proxy, _implementation, _data) +} + +// ProxyAdminOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the ProxyAdmin contract. +type ProxyAdminOwnershipTransferredIterator struct { + Event *ProxyAdminOwnershipTransferred // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ProxyAdminOwnershipTransferredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ProxyAdminOwnershipTransferred) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ProxyAdminOwnershipTransferred) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ProxyAdminOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ProxyAdminOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ProxyAdminOwnershipTransferred represents a OwnershipTransferred event raised by the ProxyAdmin contract. +type ProxyAdminOwnershipTransferred struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ProxyAdmin *ProxyAdminFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*ProxyAdminOwnershipTransferredIterator, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _ProxyAdmin.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &ProxyAdminOwnershipTransferredIterator{contract: _ProxyAdmin.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ProxyAdmin *ProxyAdminFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ProxyAdminOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _ProxyAdmin.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ProxyAdminOwnershipTransferred) + if err := _ProxyAdmin.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 +} + +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ProxyAdmin *ProxyAdminFilterer) ParseOwnershipTransferred(log types.Log) (*ProxyAdminOwnershipTransferred, error) { + event := new(ProxyAdminOwnershipTransferred) + if err := _ProxyAdmin.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/kroma-bindings/bindings/proxyadmin_more.go b/kroma-bindings/bindings/proxyadmin_more.go new file mode 100644 index 000000000..6f615228e --- /dev/null +++ b/kroma-bindings/bindings/proxyadmin_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const ProxyAdminStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/universal/ProxyAdmin.sol:ProxyAdmin\",\"label\":\"_owner\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_address\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"}}}" + +var ProxyAdminStorageLayout = new(solc.StorageLayout) + +var ProxyAdminDeployedBin = "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046105fd565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610215565b005b3480156100ec57600080fd5b506100de6100fb366004610621565b610229565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de61013936600461071e565b6102b7565b34801561014a57600080fd5b506100de610159366004610621565b610380565b34801561016a57600080fd5b506100de6101793660046105fd565b6103dc565b34801561018a57600080fd5b506100a06101993660046105fd565b610498565b60008173ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020f91906107c3565b92915050565b61021d6104e5565b6102276000610566565b565b6102316104e5565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b15801561029b57600080fd5b505af11580156102af573d6000803e3d6000fd5b505050505050565b6102bf6104e5565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef286903490610315908690869060040161080c565b60006040518083038185885af1158015610333573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261037a919081019061087a565b50505050565b6103886104e5565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe690602401610281565b6103e46104e5565b73ffffffffffffffffffffffffffffffffffffffff811661048c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61049581610566565b50565b60008173ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101eb573d6000803e3d6000fd5b60005473ffffffffffffffffffffffffffffffffffffffff163314610227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610483565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff8116811461049557600080fd5b60006020828403121561060f57600080fd5b813561061a816105db565b9392505050565b6000806040838503121561063457600080fd5b823561063f816105db565b9150602083013561064f816105db565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156106d0576106d061065a565b604052919050565b600067ffffffffffffffff8211156106f2576106f261065a565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60008060006060848603121561073357600080fd5b833561073e816105db565b9250602084013561074e816105db565b9150604084013567ffffffffffffffff81111561076a57600080fd5b8401601f8101861361077b57600080fd5b803561078e610789826106d8565b610689565b8181528760208385010111156107a357600080fd5b816020840160208301376000602083830101528093505050509250925092565b6000602082840312156107d557600080fd5b815161061a816105db565b60005b838110156107fb5781810151838201526020016107e3565b8381111561037a5750506000910152565b73ffffffffffffffffffffffffffffffffffffffff8316815260406020820152600082518060408401526108478160608501602087016107e0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016060019392505050565b60006020828403121561088c57600080fd5b815167ffffffffffffffff8111156108a357600080fd5b8201601f810184136108b457600080fd5b80516108c2610789826106d8565b8181528560208385010111156108d757600080fd5b6108e88260208301602086016107e0565b9594505050505056fea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(ProxyAdminStorageLayoutJSON), ProxyAdminStorageLayout); err != nil { + panic(err) + } + + layouts["ProxyAdmin"] = ProxyAdminStorageLayout + deployedBytecodes["ProxyAdmin"] = ProxyAdminDeployedBin +} diff --git a/kroma-bindings/bindings/registry.go b/kroma-bindings/bindings/registry.go new file mode 100644 index 000000000..b2571d6bb --- /dev/null +++ b/kroma-bindings/bindings/registry.go @@ -0,0 +1,60 @@ +package bindings + +import ( + "fmt" + "strings" + + "github.com/ethereum/go-ethereum/common" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +// layouts respresents the set of storage layouts. It is populated in an init function. +var layouts = make(map[string]*solc.StorageLayout) + +// deployedBytecodes represents the set of deployed bytecodes. It is populated +// in an init function. +var deployedBytecodes = make(map[string]string) + +// GetStorageLayout returns the storage layout of a contract by name. +func GetStorageLayout(name string) (*solc.StorageLayout, error) { + layout := layouts[name] + if layout == nil { + return nil, fmt.Errorf("%s: storage layout not found", name) + } + return layout, nil +} + +// GetDeployedBytecode returns the deployed bytecode of a contract by name. +func GetDeployedBytecode(name string) ([]byte, error) { + bc := deployedBytecodes[name] + if bc == "" { + return nil, fmt.Errorf("%s: deployed bytecode not found", name) + } + + if !isHex(bc) { + return nil, fmt.Errorf("%s: invalid deployed bytecode", name) + } + + return common.FromHex(bc), nil +} + +// isHexCharacter returns bool of c being a valid hexadecimal. +func isHexCharacter(c byte) bool { + return ('0' <= c && c <= '9') || ('a' <= c && c <= 'f') || ('A' <= c && c <= 'F') +} + +// isHex validates whether each byte is valid hexadecimal string. +func isHex(str string) bool { + if len(str)%2 != 0 { + return false + } + str = strings.TrimPrefix(str, "0x") + + for _, c := range []byte(str) { + if !isHexCharacter(c) { + return false + } + } + return true +} diff --git a/op-bindings/bindings/securitycouncil.go b/kroma-bindings/bindings/securitycouncil.go similarity index 100% rename from op-bindings/bindings/securitycouncil.go rename to kroma-bindings/bindings/securitycouncil.go diff --git a/op-bindings/bindings/securitycouncil_more.go b/kroma-bindings/bindings/securitycouncil_more.go similarity index 86% rename from op-bindings/bindings/securitycouncil_more.go rename to kroma-bindings/bindings/securitycouncil_more.go index b736638ac..b1a8d2184 100644 --- a/op-bindings/bindings/securitycouncil_more.go +++ b/kroma-bindings/bindings/securitycouncil_more.go @@ -9,7 +9,7 @@ import ( "github.com/ethereum-optimism/optimism/op-bindings/solc" ) -const SecurityCouncilStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L1/SecurityCouncil.sol:SecurityCouncil\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/L1/SecurityCouncil.sol:SecurityCouncil\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/L1/SecurityCouncil.sol:SecurityCouncil\",\"label\":\"_status\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_uint256\"},{\"astId\":1003,\"contract\":\"contracts/L1/SecurityCouncil.sol:SecurityCouncil\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_array(t_uint256)1010_storage\"},{\"astId\":1004,\"contract\":\"contracts/L1/SecurityCouncil.sol:SecurityCouncil\",\"label\":\"transactions\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_mapping(t_uint256,t_struct(MultiSigTransaction)1012_storage)\"},{\"astId\":1005,\"contract\":\"contracts/L1/SecurityCouncil.sol:SecurityCouncil\",\"label\":\"confirmations\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_mapping(t_uint256,t_struct(MultiSigConfirmation)1011_storage)\"},{\"astId\":1006,\"contract\":\"contracts/L1/SecurityCouncil.sol:SecurityCouncil\",\"label\":\"spacer_53_0_96\",\"offset\":0,\"slot\":\"53\",\"type\":\"t_array(t_uint256)1009_storage\"},{\"astId\":1007,\"contract\":\"contracts/L1/SecurityCouncil.sol:SecurityCouncil\",\"label\":\"transactionCount\",\"offset\":0,\"slot\":\"56\",\"type\":\"t_uint256\"},{\"astId\":1008,\"contract\":\"contracts/L1/SecurityCouncil.sol:SecurityCouncil\",\"label\":\"outputsDeleteRequested\",\"offset\":0,\"slot\":\"57\",\"type\":\"t_mapping(t_uint256,t_bool)\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)1009_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[3]\",\"numberOfBytes\":\"96\"},\"t_array(t_uint256)1010_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes_storage\":{\"encoding\":\"bytes\",\"label\":\"bytes\",\"numberOfBytes\":\"32\"},\"t_mapping(t_address,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_bool\"},\"t_mapping(t_uint256,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_bool\"},\"t_mapping(t_uint256,t_struct(MultiSigConfirmation)1011_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e struct Types.MultiSigConfirmation)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_struct(MultiSigConfirmation)1011_storage\"},\"t_mapping(t_uint256,t_struct(MultiSigTransaction)1012_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e struct Types.MultiSigTransaction)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_struct(MultiSigTransaction)1012_storage\"},\"t_struct(MultiSigConfirmation)1011_storage\":{\"encoding\":\"inplace\",\"label\":\"struct Types.MultiSigConfirmation\",\"numberOfBytes\":\"64\"},\"t_struct(MultiSigTransaction)1012_storage\":{\"encoding\":\"inplace\",\"label\":\"struct Types.MultiSigTransaction\",\"numberOfBytes\":\"96\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" +const SecurityCouncilStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L1/SecurityCouncil.sol:SecurityCouncil\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/L1/SecurityCouncil.sol:SecurityCouncil\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/L1/SecurityCouncil.sol:SecurityCouncil\",\"label\":\"_status\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_uint256\"},{\"astId\":1003,\"contract\":\"contracts/L1/SecurityCouncil.sol:SecurityCouncil\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_array(t_uint256)49_storage\"},{\"astId\":1004,\"contract\":\"contracts/L1/SecurityCouncil.sol:SecurityCouncil\",\"label\":\"transactions\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_mapping(t_uint256,t_struct(MultiSigTransaction)1010_storage)\"},{\"astId\":1005,\"contract\":\"contracts/L1/SecurityCouncil.sol:SecurityCouncil\",\"label\":\"confirmations\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_mapping(t_uint256,t_struct(MultiSigConfirmation)1009_storage)\"},{\"astId\":1006,\"contract\":\"contracts/L1/SecurityCouncil.sol:SecurityCouncil\",\"label\":\"spacer_53_0_96\",\"offset\":0,\"slot\":\"53\",\"type\":\"t_array(t_uint256)3_storage\"},{\"astId\":1007,\"contract\":\"contracts/L1/SecurityCouncil.sol:SecurityCouncil\",\"label\":\"transactionCount\",\"offset\":0,\"slot\":\"56\",\"type\":\"t_uint256\"},{\"astId\":1008,\"contract\":\"contracts/L1/SecurityCouncil.sol:SecurityCouncil\",\"label\":\"outputsDeleteRequested\",\"offset\":0,\"slot\":\"57\",\"type\":\"t_mapping(t_uint256,t_bool)\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)3_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[3]\",\"numberOfBytes\":\"96\",\"base\":\"t_uint256\"},\"t_array(t_uint256)49_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\",\"base\":\"t_uint256\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes_storage\":{\"encoding\":\"bytes\",\"label\":\"bytes\",\"numberOfBytes\":\"32\"},\"t_mapping(t_address,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_bool\"},\"t_mapping(t_uint256,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_bool\"},\"t_mapping(t_uint256,t_struct(MultiSigConfirmation)1009_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e struct Types.MultiSigConfirmation)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_struct(MultiSigConfirmation)1009_storage\"},\"t_mapping(t_uint256,t_struct(MultiSigTransaction)1010_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e struct Types.MultiSigTransaction)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_struct(MultiSigTransaction)1010_storage\"},\"t_struct(MultiSigConfirmation)1009_storage\":{\"encoding\":\"inplace\",\"label\":\"struct Types.MultiSigConfirmation\",\"numberOfBytes\":\"64\"},\"t_struct(MultiSigTransaction)1010_storage\":{\"encoding\":\"inplace\",\"label\":\"struct Types.MultiSigTransaction\",\"numberOfBytes\":\"96\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" var SecurityCouncilStorageLayout = new(solc.StorageLayout) diff --git a/op-bindings/bindings/securitycounciltoken.go b/kroma-bindings/bindings/securitycounciltoken.go similarity index 100% rename from op-bindings/bindings/securitycounciltoken.go rename to kroma-bindings/bindings/securitycounciltoken.go diff --git a/op-bindings/bindings/securitycounciltoken_more.go b/kroma-bindings/bindings/securitycounciltoken_more.go similarity index 79% rename from op-bindings/bindings/securitycounciltoken_more.go rename to kroma-bindings/bindings/securitycounciltoken_more.go index f05fb18e0..9ee7f9908 100644 --- a/op-bindings/bindings/securitycounciltoken_more.go +++ b/kroma-bindings/bindings/securitycounciltoken_more.go @@ -9,7 +9,7 @@ import ( "github.com/ethereum-optimism/optimism/op-bindings/solc" ) -const SecurityCouncilTokenStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)1039_storage\"},{\"astId\":1003,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_array(t_uint256)1039_storage\"},{\"astId\":1004,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_name\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_string_storage\"},{\"astId\":1005,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_symbol\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_string_storage\"},{\"astId\":1006,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_owners\",\"offset\":0,\"slot\":\"103\",\"type\":\"t_mapping(t_uint256,t_address)\"},{\"astId\":1007,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_balances\",\"offset\":0,\"slot\":\"104\",\"type\":\"t_mapping(t_address,t_uint256)\"},{\"astId\":1008,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_tokenApprovals\",\"offset\":0,\"slot\":\"105\",\"type\":\"t_mapping(t_uint256,t_address)\"},{\"astId\":1009,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_operatorApprovals\",\"offset\":0,\"slot\":\"106\",\"type\":\"t_mapping(t_address,t_mapping(t_address,t_bool))\"},{\"astId\":1010,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"107\",\"type\":\"t_array(t_uint256)1035_storage\"},{\"astId\":1011,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_ownedTokens\",\"offset\":0,\"slot\":\"151\",\"type\":\"t_mapping(t_address,t_mapping(t_uint256,t_uint256))\"},{\"astId\":1012,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_ownedTokensIndex\",\"offset\":0,\"slot\":\"152\",\"type\":\"t_mapping(t_uint256,t_uint256)\"},{\"astId\":1013,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_allTokens\",\"offset\":0,\"slot\":\"153\",\"type\":\"t_array(t_uint256)dyn_storage\"},{\"astId\":1014,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_allTokensIndex\",\"offset\":0,\"slot\":\"154\",\"type\":\"t_mapping(t_uint256,t_uint256)\"},{\"astId\":1015,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"155\",\"type\":\"t_array(t_uint256)1036_storage\"},{\"astId\":1016,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_tokenURIs\",\"offset\":0,\"slot\":\"201\",\"type\":\"t_mapping(t_uint256,t_string_storage)\"},{\"astId\":1017,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"202\",\"type\":\"t_array(t_uint256)1038_storage\"},{\"astId\":1018,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_paused\",\"offset\":0,\"slot\":\"251\",\"type\":\"t_bool\"},{\"astId\":1019,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"252\",\"type\":\"t_array(t_uint256)1038_storage\"},{\"astId\":1020,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_owner\",\"offset\":0,\"slot\":\"301\",\"type\":\"t_address\"},{\"astId\":1021,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"302\",\"type\":\"t_array(t_uint256)1038_storage\"},{\"astId\":1022,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_hashedName\",\"offset\":0,\"slot\":\"351\",\"type\":\"t_bytes32\"},{\"astId\":1023,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_hashedVersion\",\"offset\":0,\"slot\":\"352\",\"type\":\"t_bytes32\"},{\"astId\":1024,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_name\",\"offset\":0,\"slot\":\"353\",\"type\":\"t_string_storage\"},{\"astId\":1025,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_version\",\"offset\":0,\"slot\":\"354\",\"type\":\"t_string_storage\"},{\"astId\":1026,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"355\",\"type\":\"t_array(t_uint256)1037_storage\"},{\"astId\":1027,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_delegation\",\"offset\":0,\"slot\":\"403\",\"type\":\"t_mapping(t_address,t_address)\"},{\"astId\":1028,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_delegateCheckpoints\",\"offset\":0,\"slot\":\"404\",\"type\":\"t_mapping(t_address,t_struct(Trace224)1042_storage)\"},{\"astId\":1029,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_totalCheckpoints\",\"offset\":0,\"slot\":\"405\",\"type\":\"t_struct(Trace224)1042_storage\"},{\"astId\":1030,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_nonces\",\"offset\":0,\"slot\":\"406\",\"type\":\"t_mapping(t_address,t_struct(Counter)1041_storage)\"},{\"astId\":1031,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"407\",\"type\":\"t_array(t_uint256)1036_storage\"},{\"astId\":1032,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"453\",\"type\":\"t_array(t_uint256)1039_storage\"},{\"astId\":1033,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_tokenIdCounter\",\"offset\":0,\"slot\":\"503\",\"type\":\"t_struct(Counter)1041_storage\"},{\"astId\":1034,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"isLocked\",\"offset\":0,\"slot\":\"504\",\"type\":\"t_bool\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_struct(Checkpoint224)1040_storage)dyn_storage\":{\"encoding\":\"dynamic_array\",\"label\":\"struct CheckpointsUpgradeable.Checkpoint224[]\",\"numberOfBytes\":\"32\"},\"t_array(t_uint256)1035_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[44]\",\"numberOfBytes\":\"1408\"},\"t_array(t_uint256)1036_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[46]\",\"numberOfBytes\":\"1472\"},\"t_array(t_uint256)1037_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[48]\",\"numberOfBytes\":\"1536\"},\"t_array(t_uint256)1038_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\"},\"t_array(t_uint256)1039_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\"},\"t_array(t_uint256)dyn_storage\":{\"encoding\":\"dynamic_array\",\"label\":\"uint256[]\",\"numberOfBytes\":\"32\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_address,t_address)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e address)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_address\"},\"t_mapping(t_address,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_bool\"},\"t_mapping(t_address,t_mapping(t_address,t_bool))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(address =\u003e bool))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_address,t_bool)\"},\"t_mapping(t_address,t_mapping(t_uint256,t_uint256))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(uint256 =\u003e uint256))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_uint256,t_uint256)\"},\"t_mapping(t_address,t_struct(Counter)1041_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e struct CountersUpgradeable.Counter)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_struct(Counter)1041_storage\"},\"t_mapping(t_address,t_struct(Trace224)1042_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e struct CheckpointsUpgradeable.Trace224)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_struct(Trace224)1042_storage\"},\"t_mapping(t_address,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint256\"},\"t_mapping(t_uint256,t_address)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e address)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_address\"},\"t_mapping(t_uint256,t_string_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e string)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_string_storage\"},\"t_mapping(t_uint256,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_uint256\"},\"t_string_storage\":{\"encoding\":\"bytes\",\"label\":\"string\",\"numberOfBytes\":\"32\"},\"t_struct(Checkpoint224)1040_storage\":{\"encoding\":\"inplace\",\"label\":\"struct CheckpointsUpgradeable.Checkpoint224\",\"numberOfBytes\":\"32\"},\"t_struct(Counter)1041_storage\":{\"encoding\":\"inplace\",\"label\":\"struct CountersUpgradeable.Counter\",\"numberOfBytes\":\"32\"},\"t_struct(Trace224)1042_storage\":{\"encoding\":\"inplace\",\"label\":\"struct CheckpointsUpgradeable.Trace224\",\"numberOfBytes\":\"32\"},\"t_uint224\":{\"encoding\":\"inplace\",\"label\":\"uint224\",\"numberOfBytes\":\"28\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint32\":{\"encoding\":\"inplace\",\"label\":\"uint32\",\"numberOfBytes\":\"4\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" +const SecurityCouncilTokenStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)50_storage\"},{\"astId\":1003,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_array(t_uint256)50_storage\"},{\"astId\":1004,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_name\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_string_storage\"},{\"astId\":1005,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_symbol\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_string_storage\"},{\"astId\":1006,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_owners\",\"offset\":0,\"slot\":\"103\",\"type\":\"t_mapping(t_uint256,t_address)\"},{\"astId\":1007,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_balances\",\"offset\":0,\"slot\":\"104\",\"type\":\"t_mapping(t_address,t_uint256)\"},{\"astId\":1008,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_tokenApprovals\",\"offset\":0,\"slot\":\"105\",\"type\":\"t_mapping(t_uint256,t_address)\"},{\"astId\":1009,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_operatorApprovals\",\"offset\":0,\"slot\":\"106\",\"type\":\"t_mapping(t_address,t_mapping(t_address,t_bool))\"},{\"astId\":1010,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"107\",\"type\":\"t_array(t_uint256)44_storage\"},{\"astId\":1011,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_ownedTokens\",\"offset\":0,\"slot\":\"151\",\"type\":\"t_mapping(t_address,t_mapping(t_uint256,t_uint256))\"},{\"astId\":1012,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_ownedTokensIndex\",\"offset\":0,\"slot\":\"152\",\"type\":\"t_mapping(t_uint256,t_uint256)\"},{\"astId\":1013,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_allTokens\",\"offset\":0,\"slot\":\"153\",\"type\":\"t_array(t_uint256)dyn_storage\"},{\"astId\":1014,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_allTokensIndex\",\"offset\":0,\"slot\":\"154\",\"type\":\"t_mapping(t_uint256,t_uint256)\"},{\"astId\":1015,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"155\",\"type\":\"t_array(t_uint256)46_storage\"},{\"astId\":1016,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_tokenURIs\",\"offset\":0,\"slot\":\"201\",\"type\":\"t_mapping(t_uint256,t_string_storage)\"},{\"astId\":1017,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"202\",\"type\":\"t_array(t_uint256)49_storage\"},{\"astId\":1018,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_paused\",\"offset\":0,\"slot\":\"251\",\"type\":\"t_bool\"},{\"astId\":1019,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"252\",\"type\":\"t_array(t_uint256)49_storage\"},{\"astId\":1020,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_owner\",\"offset\":0,\"slot\":\"301\",\"type\":\"t_address\"},{\"astId\":1021,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"302\",\"type\":\"t_array(t_uint256)49_storage\"},{\"astId\":1022,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_hashedName\",\"offset\":0,\"slot\":\"351\",\"type\":\"t_bytes32\"},{\"astId\":1023,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_hashedVersion\",\"offset\":0,\"slot\":\"352\",\"type\":\"t_bytes32\"},{\"astId\":1024,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_name\",\"offset\":0,\"slot\":\"353\",\"type\":\"t_string_storage\"},{\"astId\":1025,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_version\",\"offset\":0,\"slot\":\"354\",\"type\":\"t_string_storage\"},{\"astId\":1026,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"355\",\"type\":\"t_array(t_uint256)48_storage\"},{\"astId\":1027,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_delegation\",\"offset\":0,\"slot\":\"403\",\"type\":\"t_mapping(t_address,t_address)\"},{\"astId\":1028,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_delegateCheckpoints\",\"offset\":0,\"slot\":\"404\",\"type\":\"t_mapping(t_address,t_struct(Trace224)1037_storage)\"},{\"astId\":1029,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_totalCheckpoints\",\"offset\":0,\"slot\":\"405\",\"type\":\"t_struct(Trace224)1037_storage\"},{\"astId\":1030,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_nonces\",\"offset\":0,\"slot\":\"406\",\"type\":\"t_mapping(t_address,t_struct(Counter)1036_storage)\"},{\"astId\":1031,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"407\",\"type\":\"t_array(t_uint256)46_storage\"},{\"astId\":1032,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"453\",\"type\":\"t_array(t_uint256)50_storage\"},{\"astId\":1033,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"_tokenIdCounter\",\"offset\":0,\"slot\":\"503\",\"type\":\"t_struct(Counter)1036_storage\"},{\"astId\":1034,\"contract\":\"contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken\",\"label\":\"isLocked\",\"offset\":0,\"slot\":\"504\",\"type\":\"t_bool\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_struct(Checkpoint224)1035_storage)dyn_storage\":{\"encoding\":\"dynamic_array\",\"label\":\"struct CheckpointsUpgradeable.Checkpoint224[]\",\"numberOfBytes\":\"32\",\"base\":\"t_struct(Checkpoint224)1035_storage\"},\"t_array(t_uint256)44_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[44]\",\"numberOfBytes\":\"1408\",\"base\":\"t_uint256\"},\"t_array(t_uint256)46_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[46]\",\"numberOfBytes\":\"1472\",\"base\":\"t_uint256\"},\"t_array(t_uint256)48_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[48]\",\"numberOfBytes\":\"1536\",\"base\":\"t_uint256\"},\"t_array(t_uint256)49_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\",\"base\":\"t_uint256\"},\"t_array(t_uint256)50_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\",\"base\":\"t_uint256\"},\"t_array(t_uint256)dyn_storage\":{\"encoding\":\"dynamic_array\",\"label\":\"uint256[]\",\"numberOfBytes\":\"32\",\"base\":\"t_uint256\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_address,t_address)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e address)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_address\"},\"t_mapping(t_address,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_bool\"},\"t_mapping(t_address,t_mapping(t_address,t_bool))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(address =\u003e bool))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_address,t_bool)\"},\"t_mapping(t_address,t_mapping(t_uint256,t_uint256))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(uint256 =\u003e uint256))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_uint256,t_uint256)\"},\"t_mapping(t_address,t_struct(Counter)1036_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e struct CountersUpgradeable.Counter)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_struct(Counter)1036_storage\"},\"t_mapping(t_address,t_struct(Trace224)1037_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e struct CheckpointsUpgradeable.Trace224)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_struct(Trace224)1037_storage\"},\"t_mapping(t_address,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint256\"},\"t_mapping(t_uint256,t_address)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e address)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_address\"},\"t_mapping(t_uint256,t_string_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e string)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_string_storage\"},\"t_mapping(t_uint256,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_uint256\"},\"t_string_storage\":{\"encoding\":\"bytes\",\"label\":\"string\",\"numberOfBytes\":\"32\"},\"t_struct(Checkpoint224)1035_storage\":{\"encoding\":\"inplace\",\"label\":\"struct CheckpointsUpgradeable.Checkpoint224\",\"numberOfBytes\":\"32\"},\"t_struct(Counter)1036_storage\":{\"encoding\":\"inplace\",\"label\":\"struct CountersUpgradeable.Counter\",\"numberOfBytes\":\"32\"},\"t_struct(Trace224)1037_storage\":{\"encoding\":\"inplace\",\"label\":\"struct CheckpointsUpgradeable.Trace224\",\"numberOfBytes\":\"32\"},\"t_uint224\":{\"encoding\":\"inplace\",\"label\":\"uint224\",\"numberOfBytes\":\"28\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint32\":{\"encoding\":\"inplace\",\"label\":\"uint32\",\"numberOfBytes\":\"4\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" var SecurityCouncilTokenStorageLayout = new(solc.StorageLayout) diff --git a/kroma-bindings/bindings/standardbridge.go b/kroma-bindings/bindings/standardbridge.go new file mode 100644 index 000000000..8d4874cc1 --- /dev/null +++ b/kroma-bindings/bindings/standardbridge.go @@ -0,0 +1,1061 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// StandardBridgeMetaData contains all meta data concerning the StandardBridge contract. +var StandardBridgeMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC20BridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC20BridgeInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ETHBridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ETHBridgeInitiated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSENGER\",\"outputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_BRIDGE\",\"outputs\":[{\"internalType\":\"contractStandardBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC20To\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeETHTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"deposits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", +} + +// StandardBridgeABI is the input ABI used to generate the binding from. +// Deprecated: Use StandardBridgeMetaData.ABI instead. +var StandardBridgeABI = StandardBridgeMetaData.ABI + +// StandardBridge is an auto generated Go binding around an Ethereum contract. +type StandardBridge struct { + StandardBridgeCaller // Read-only binding to the contract + StandardBridgeTransactor // Write-only binding to the contract + StandardBridgeFilterer // Log filterer for contract events +} + +// StandardBridgeCaller is an auto generated read-only Go binding around an Ethereum contract. +type StandardBridgeCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StandardBridgeTransactor is an auto generated write-only Go binding around an Ethereum contract. +type StandardBridgeTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StandardBridgeFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type StandardBridgeFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StandardBridgeSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type StandardBridgeSession struct { + Contract *StandardBridge // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// StandardBridgeCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type StandardBridgeCallerSession struct { + Contract *StandardBridgeCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// StandardBridgeTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type StandardBridgeTransactorSession struct { + Contract *StandardBridgeTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// StandardBridgeRaw is an auto generated low-level Go binding around an Ethereum contract. +type StandardBridgeRaw struct { + Contract *StandardBridge // Generic contract binding to access the raw methods on +} + +// StandardBridgeCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type StandardBridgeCallerRaw struct { + Contract *StandardBridgeCaller // Generic read-only contract binding to access the raw methods on +} + +// StandardBridgeTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type StandardBridgeTransactorRaw struct { + Contract *StandardBridgeTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewStandardBridge creates a new instance of StandardBridge, bound to a specific deployed contract. +func NewStandardBridge(address common.Address, backend bind.ContractBackend) (*StandardBridge, error) { + contract, err := bindStandardBridge(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &StandardBridge{StandardBridgeCaller: StandardBridgeCaller{contract: contract}, StandardBridgeTransactor: StandardBridgeTransactor{contract: contract}, StandardBridgeFilterer: StandardBridgeFilterer{contract: contract}}, nil +} + +// NewStandardBridgeCaller creates a new read-only instance of StandardBridge, bound to a specific deployed contract. +func NewStandardBridgeCaller(address common.Address, caller bind.ContractCaller) (*StandardBridgeCaller, error) { + contract, err := bindStandardBridge(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &StandardBridgeCaller{contract: contract}, nil +} + +// NewStandardBridgeTransactor creates a new write-only instance of StandardBridge, bound to a specific deployed contract. +func NewStandardBridgeTransactor(address common.Address, transactor bind.ContractTransactor) (*StandardBridgeTransactor, error) { + contract, err := bindStandardBridge(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &StandardBridgeTransactor{contract: contract}, nil +} + +// NewStandardBridgeFilterer creates a new log filterer instance of StandardBridge, bound to a specific deployed contract. +func NewStandardBridgeFilterer(address common.Address, filterer bind.ContractFilterer) (*StandardBridgeFilterer, error) { + contract, err := bindStandardBridge(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &StandardBridgeFilterer{contract: contract}, nil +} + +// bindStandardBridge binds a generic wrapper to an already deployed contract. +func bindStandardBridge(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := StandardBridgeMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_StandardBridge *StandardBridgeRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _StandardBridge.Contract.StandardBridgeCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_StandardBridge *StandardBridgeRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StandardBridge.Contract.StandardBridgeTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_StandardBridge *StandardBridgeRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _StandardBridge.Contract.StandardBridgeTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_StandardBridge *StandardBridgeCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _StandardBridge.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_StandardBridge *StandardBridgeTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StandardBridge.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_StandardBridge *StandardBridgeTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _StandardBridge.Contract.contract.Transact(opts, method, params...) +} + +// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. +// +// Solidity: function MESSENGER() view returns(address) +func (_StandardBridge *StandardBridgeCaller) MESSENGER(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StandardBridge.contract.Call(opts, &out, "MESSENGER") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. +// +// Solidity: function MESSENGER() view returns(address) +func (_StandardBridge *StandardBridgeSession) MESSENGER() (common.Address, error) { + return _StandardBridge.Contract.MESSENGER(&_StandardBridge.CallOpts) +} + +// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. +// +// Solidity: function MESSENGER() view returns(address) +func (_StandardBridge *StandardBridgeCallerSession) MESSENGER() (common.Address, error) { + return _StandardBridge.Contract.MESSENGER(&_StandardBridge.CallOpts) +} + +// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. +// +// Solidity: function OTHER_BRIDGE() view returns(address) +func (_StandardBridge *StandardBridgeCaller) OTHERBRIDGE(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StandardBridge.contract.Call(opts, &out, "OTHER_BRIDGE") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. +// +// Solidity: function OTHER_BRIDGE() view returns(address) +func (_StandardBridge *StandardBridgeSession) OTHERBRIDGE() (common.Address, error) { + return _StandardBridge.Contract.OTHERBRIDGE(&_StandardBridge.CallOpts) +} + +// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. +// +// Solidity: function OTHER_BRIDGE() view returns(address) +func (_StandardBridge *StandardBridgeCallerSession) OTHERBRIDGE() (common.Address, error) { + return _StandardBridge.Contract.OTHERBRIDGE(&_StandardBridge.CallOpts) +} + +// Deposits is a free data retrieval call binding the contract method 0x8f601f66. +// +// Solidity: function deposits(address , address ) view returns(uint256) +func (_StandardBridge *StandardBridgeCaller) Deposits(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) { + var out []interface{} + err := _StandardBridge.contract.Call(opts, &out, "deposits", arg0, arg1) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Deposits is a free data retrieval call binding the contract method 0x8f601f66. +// +// Solidity: function deposits(address , address ) view returns(uint256) +func (_StandardBridge *StandardBridgeSession) Deposits(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _StandardBridge.Contract.Deposits(&_StandardBridge.CallOpts, arg0, arg1) +} + +// Deposits is a free data retrieval call binding the contract method 0x8f601f66. +// +// Solidity: function deposits(address , address ) view returns(uint256) +func (_StandardBridge *StandardBridgeCallerSession) Deposits(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _StandardBridge.Contract.Deposits(&_StandardBridge.CallOpts, arg0, arg1) +} + +// BridgeERC20 is a paid mutator transaction binding the contract method 0x87087623. +// +// Solidity: function bridgeERC20(address _localToken, address _remoteToken, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_StandardBridge *StandardBridgeTransactor) BridgeERC20(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.contract.Transact(opts, "bridgeERC20", _localToken, _remoteToken, _amount, _minGasLimit, _extraData) +} + +// BridgeERC20 is a paid mutator transaction binding the contract method 0x87087623. +// +// Solidity: function bridgeERC20(address _localToken, address _remoteToken, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_StandardBridge *StandardBridgeSession) BridgeERC20(_localToken common.Address, _remoteToken common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.Contract.BridgeERC20(&_StandardBridge.TransactOpts, _localToken, _remoteToken, _amount, _minGasLimit, _extraData) +} + +// BridgeERC20 is a paid mutator transaction binding the contract method 0x87087623. +// +// Solidity: function bridgeERC20(address _localToken, address _remoteToken, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_StandardBridge *StandardBridgeTransactorSession) BridgeERC20(_localToken common.Address, _remoteToken common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.Contract.BridgeERC20(&_StandardBridge.TransactOpts, _localToken, _remoteToken, _amount, _minGasLimit, _extraData) +} + +// BridgeERC20To is a paid mutator transaction binding the contract method 0x540abf73. +// +// Solidity: function bridgeERC20To(address _localToken, address _remoteToken, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_StandardBridge *StandardBridgeTransactor) BridgeERC20To(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.contract.Transact(opts, "bridgeERC20To", _localToken, _remoteToken, _to, _amount, _minGasLimit, _extraData) +} + +// BridgeERC20To is a paid mutator transaction binding the contract method 0x540abf73. +// +// Solidity: function bridgeERC20To(address _localToken, address _remoteToken, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_StandardBridge *StandardBridgeSession) BridgeERC20To(_localToken common.Address, _remoteToken common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.Contract.BridgeERC20To(&_StandardBridge.TransactOpts, _localToken, _remoteToken, _to, _amount, _minGasLimit, _extraData) +} + +// BridgeERC20To is a paid mutator transaction binding the contract method 0x540abf73. +// +// Solidity: function bridgeERC20To(address _localToken, address _remoteToken, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_StandardBridge *StandardBridgeTransactorSession) BridgeERC20To(_localToken common.Address, _remoteToken common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.Contract.BridgeERC20To(&_StandardBridge.TransactOpts, _localToken, _remoteToken, _to, _amount, _minGasLimit, _extraData) +} + +// BridgeETH is a paid mutator transaction binding the contract method 0x09fc8843. +// +// Solidity: function bridgeETH(uint32 _minGasLimit, bytes _extraData) payable returns() +func (_StandardBridge *StandardBridgeTransactor) BridgeETH(opts *bind.TransactOpts, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.contract.Transact(opts, "bridgeETH", _minGasLimit, _extraData) +} + +// BridgeETH is a paid mutator transaction binding the contract method 0x09fc8843. +// +// Solidity: function bridgeETH(uint32 _minGasLimit, bytes _extraData) payable returns() +func (_StandardBridge *StandardBridgeSession) BridgeETH(_minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.Contract.BridgeETH(&_StandardBridge.TransactOpts, _minGasLimit, _extraData) +} + +// BridgeETH is a paid mutator transaction binding the contract method 0x09fc8843. +// +// Solidity: function bridgeETH(uint32 _minGasLimit, bytes _extraData) payable returns() +func (_StandardBridge *StandardBridgeTransactorSession) BridgeETH(_minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.Contract.BridgeETH(&_StandardBridge.TransactOpts, _minGasLimit, _extraData) +} + +// BridgeETHTo is a paid mutator transaction binding the contract method 0xe11013dd. +// +// Solidity: function bridgeETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() +func (_StandardBridge *StandardBridgeTransactor) BridgeETHTo(opts *bind.TransactOpts, _to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.contract.Transact(opts, "bridgeETHTo", _to, _minGasLimit, _extraData) +} + +// BridgeETHTo is a paid mutator transaction binding the contract method 0xe11013dd. +// +// Solidity: function bridgeETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() +func (_StandardBridge *StandardBridgeSession) BridgeETHTo(_to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.Contract.BridgeETHTo(&_StandardBridge.TransactOpts, _to, _minGasLimit, _extraData) +} + +// BridgeETHTo is a paid mutator transaction binding the contract method 0xe11013dd. +// +// Solidity: function bridgeETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() +func (_StandardBridge *StandardBridgeTransactorSession) BridgeETHTo(_to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.Contract.BridgeETHTo(&_StandardBridge.TransactOpts, _to, _minGasLimit, _extraData) +} + +// FinalizeBridgeERC20 is a paid mutator transaction binding the contract method 0x0166a07a. +// +// Solidity: function finalizeBridgeERC20(address _localToken, address _remoteToken, address _from, address _to, uint256 _amount, bytes _extraData) returns() +func (_StandardBridge *StandardBridgeTransactor) FinalizeBridgeERC20(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.contract.Transact(opts, "finalizeBridgeERC20", _localToken, _remoteToken, _from, _to, _amount, _extraData) +} + +// FinalizeBridgeERC20 is a paid mutator transaction binding the contract method 0x0166a07a. +// +// Solidity: function finalizeBridgeERC20(address _localToken, address _remoteToken, address _from, address _to, uint256 _amount, bytes _extraData) returns() +func (_StandardBridge *StandardBridgeSession) FinalizeBridgeERC20(_localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.Contract.FinalizeBridgeERC20(&_StandardBridge.TransactOpts, _localToken, _remoteToken, _from, _to, _amount, _extraData) +} + +// FinalizeBridgeERC20 is a paid mutator transaction binding the contract method 0x0166a07a. +// +// Solidity: function finalizeBridgeERC20(address _localToken, address _remoteToken, address _from, address _to, uint256 _amount, bytes _extraData) returns() +func (_StandardBridge *StandardBridgeTransactorSession) FinalizeBridgeERC20(_localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.Contract.FinalizeBridgeERC20(&_StandardBridge.TransactOpts, _localToken, _remoteToken, _from, _to, _amount, _extraData) +} + +// FinalizeBridgeETH is a paid mutator transaction binding the contract method 0x1635f5fd. +// +// Solidity: function finalizeBridgeETH(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() +func (_StandardBridge *StandardBridgeTransactor) FinalizeBridgeETH(opts *bind.TransactOpts, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.contract.Transact(opts, "finalizeBridgeETH", _from, _to, _amount, _extraData) +} + +// FinalizeBridgeETH is a paid mutator transaction binding the contract method 0x1635f5fd. +// +// Solidity: function finalizeBridgeETH(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() +func (_StandardBridge *StandardBridgeSession) FinalizeBridgeETH(_from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.Contract.FinalizeBridgeETH(&_StandardBridge.TransactOpts, _from, _to, _amount, _extraData) +} + +// FinalizeBridgeETH is a paid mutator transaction binding the contract method 0x1635f5fd. +// +// Solidity: function finalizeBridgeETH(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() +func (_StandardBridge *StandardBridgeTransactorSession) FinalizeBridgeETH(_from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.Contract.FinalizeBridgeETH(&_StandardBridge.TransactOpts, _from, _to, _amount, _extraData) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_StandardBridge *StandardBridgeTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StandardBridge.contract.RawTransact(opts, nil) // calldata is disallowed for receive function +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_StandardBridge *StandardBridgeSession) Receive() (*types.Transaction, error) { + return _StandardBridge.Contract.Receive(&_StandardBridge.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_StandardBridge *StandardBridgeTransactorSession) Receive() (*types.Transaction, error) { + return _StandardBridge.Contract.Receive(&_StandardBridge.TransactOpts) +} + +// StandardBridgeERC20BridgeFinalizedIterator is returned from FilterERC20BridgeFinalized and is used to iterate over the raw logs and unpacked data for ERC20BridgeFinalized events raised by the StandardBridge contract. +type StandardBridgeERC20BridgeFinalizedIterator struct { + Event *StandardBridgeERC20BridgeFinalized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *StandardBridgeERC20BridgeFinalizedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(StandardBridgeERC20BridgeFinalized) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(StandardBridgeERC20BridgeFinalized) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *StandardBridgeERC20BridgeFinalizedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StandardBridgeERC20BridgeFinalizedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StandardBridgeERC20BridgeFinalized represents a ERC20BridgeFinalized event raised by the StandardBridge contract. +type StandardBridgeERC20BridgeFinalized struct { + LocalToken common.Address + RemoteToken common.Address + From common.Address + To common.Address + Amount *big.Int + ExtraData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterERC20BridgeFinalized is a free log retrieval operation binding the contract event 0xd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd. +// +// Solidity: event ERC20BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) +func (_StandardBridge *StandardBridgeFilterer) FilterERC20BridgeFinalized(opts *bind.FilterOpts, localToken []common.Address, remoteToken []common.Address, from []common.Address) (*StandardBridgeERC20BridgeFinalizedIterator, error) { + + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _StandardBridge.contract.FilterLogs(opts, "ERC20BridgeFinalized", localTokenRule, remoteTokenRule, fromRule) + if err != nil { + return nil, err + } + return &StandardBridgeERC20BridgeFinalizedIterator{contract: _StandardBridge.contract, event: "ERC20BridgeFinalized", logs: logs, sub: sub}, nil +} + +// WatchERC20BridgeFinalized is a free log subscription operation binding the contract event 0xd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd. +// +// Solidity: event ERC20BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) +func (_StandardBridge *StandardBridgeFilterer) WatchERC20BridgeFinalized(opts *bind.WatchOpts, sink chan<- *StandardBridgeERC20BridgeFinalized, localToken []common.Address, remoteToken []common.Address, from []common.Address) (event.Subscription, error) { + + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _StandardBridge.contract.WatchLogs(opts, "ERC20BridgeFinalized", localTokenRule, remoteTokenRule, fromRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(StandardBridgeERC20BridgeFinalized) + if err := _StandardBridge.contract.UnpackLog(event, "ERC20BridgeFinalized", 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 +} + +// ParseERC20BridgeFinalized is a log parse operation binding the contract event 0xd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd. +// +// Solidity: event ERC20BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) +func (_StandardBridge *StandardBridgeFilterer) ParseERC20BridgeFinalized(log types.Log) (*StandardBridgeERC20BridgeFinalized, error) { + event := new(StandardBridgeERC20BridgeFinalized) + if err := _StandardBridge.contract.UnpackLog(event, "ERC20BridgeFinalized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StandardBridgeERC20BridgeInitiatedIterator is returned from FilterERC20BridgeInitiated and is used to iterate over the raw logs and unpacked data for ERC20BridgeInitiated events raised by the StandardBridge contract. +type StandardBridgeERC20BridgeInitiatedIterator struct { + Event *StandardBridgeERC20BridgeInitiated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *StandardBridgeERC20BridgeInitiatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(StandardBridgeERC20BridgeInitiated) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(StandardBridgeERC20BridgeInitiated) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *StandardBridgeERC20BridgeInitiatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StandardBridgeERC20BridgeInitiatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StandardBridgeERC20BridgeInitiated represents a ERC20BridgeInitiated event raised by the StandardBridge contract. +type StandardBridgeERC20BridgeInitiated struct { + LocalToken common.Address + RemoteToken common.Address + From common.Address + To common.Address + Amount *big.Int + ExtraData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterERC20BridgeInitiated is a free log retrieval operation binding the contract event 0x7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf. +// +// Solidity: event ERC20BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) +func (_StandardBridge *StandardBridgeFilterer) FilterERC20BridgeInitiated(opts *bind.FilterOpts, localToken []common.Address, remoteToken []common.Address, from []common.Address) (*StandardBridgeERC20BridgeInitiatedIterator, error) { + + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _StandardBridge.contract.FilterLogs(opts, "ERC20BridgeInitiated", localTokenRule, remoteTokenRule, fromRule) + if err != nil { + return nil, err + } + return &StandardBridgeERC20BridgeInitiatedIterator{contract: _StandardBridge.contract, event: "ERC20BridgeInitiated", logs: logs, sub: sub}, nil +} + +// WatchERC20BridgeInitiated is a free log subscription operation binding the contract event 0x7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf. +// +// Solidity: event ERC20BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) +func (_StandardBridge *StandardBridgeFilterer) WatchERC20BridgeInitiated(opts *bind.WatchOpts, sink chan<- *StandardBridgeERC20BridgeInitiated, localToken []common.Address, remoteToken []common.Address, from []common.Address) (event.Subscription, error) { + + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _StandardBridge.contract.WatchLogs(opts, "ERC20BridgeInitiated", localTokenRule, remoteTokenRule, fromRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(StandardBridgeERC20BridgeInitiated) + if err := _StandardBridge.contract.UnpackLog(event, "ERC20BridgeInitiated", 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 +} + +// ParseERC20BridgeInitiated is a log parse operation binding the contract event 0x7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf. +// +// Solidity: event ERC20BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) +func (_StandardBridge *StandardBridgeFilterer) ParseERC20BridgeInitiated(log types.Log) (*StandardBridgeERC20BridgeInitiated, error) { + event := new(StandardBridgeERC20BridgeInitiated) + if err := _StandardBridge.contract.UnpackLog(event, "ERC20BridgeInitiated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StandardBridgeETHBridgeFinalizedIterator is returned from FilterETHBridgeFinalized and is used to iterate over the raw logs and unpacked data for ETHBridgeFinalized events raised by the StandardBridge contract. +type StandardBridgeETHBridgeFinalizedIterator struct { + Event *StandardBridgeETHBridgeFinalized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *StandardBridgeETHBridgeFinalizedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(StandardBridgeETHBridgeFinalized) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(StandardBridgeETHBridgeFinalized) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *StandardBridgeETHBridgeFinalizedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StandardBridgeETHBridgeFinalizedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StandardBridgeETHBridgeFinalized represents a ETHBridgeFinalized event raised by the StandardBridge contract. +type StandardBridgeETHBridgeFinalized struct { + From common.Address + To common.Address + Amount *big.Int + ExtraData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterETHBridgeFinalized is a free log retrieval operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. +// +// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_StandardBridge *StandardBridgeFilterer) FilterETHBridgeFinalized(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*StandardBridgeETHBridgeFinalizedIterator, 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 := _StandardBridge.contract.FilterLogs(opts, "ETHBridgeFinalized", fromRule, toRule) + if err != nil { + return nil, err + } + return &StandardBridgeETHBridgeFinalizedIterator{contract: _StandardBridge.contract, event: "ETHBridgeFinalized", logs: logs, sub: sub}, nil +} + +// WatchETHBridgeFinalized is a free log subscription operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. +// +// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_StandardBridge *StandardBridgeFilterer) WatchETHBridgeFinalized(opts *bind.WatchOpts, sink chan<- *StandardBridgeETHBridgeFinalized, 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 := _StandardBridge.contract.WatchLogs(opts, "ETHBridgeFinalized", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(StandardBridgeETHBridgeFinalized) + if err := _StandardBridge.contract.UnpackLog(event, "ETHBridgeFinalized", 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 +} + +// ParseETHBridgeFinalized is a log parse operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. +// +// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_StandardBridge *StandardBridgeFilterer) ParseETHBridgeFinalized(log types.Log) (*StandardBridgeETHBridgeFinalized, error) { + event := new(StandardBridgeETHBridgeFinalized) + if err := _StandardBridge.contract.UnpackLog(event, "ETHBridgeFinalized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StandardBridgeETHBridgeInitiatedIterator is returned from FilterETHBridgeInitiated and is used to iterate over the raw logs and unpacked data for ETHBridgeInitiated events raised by the StandardBridge contract. +type StandardBridgeETHBridgeInitiatedIterator struct { + Event *StandardBridgeETHBridgeInitiated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *StandardBridgeETHBridgeInitiatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(StandardBridgeETHBridgeInitiated) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(StandardBridgeETHBridgeInitiated) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *StandardBridgeETHBridgeInitiatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StandardBridgeETHBridgeInitiatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StandardBridgeETHBridgeInitiated represents a ETHBridgeInitiated event raised by the StandardBridge contract. +type StandardBridgeETHBridgeInitiated struct { + From common.Address + To common.Address + Amount *big.Int + ExtraData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterETHBridgeInitiated is a free log retrieval operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. +// +// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_StandardBridge *StandardBridgeFilterer) FilterETHBridgeInitiated(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*StandardBridgeETHBridgeInitiatedIterator, 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 := _StandardBridge.contract.FilterLogs(opts, "ETHBridgeInitiated", fromRule, toRule) + if err != nil { + return nil, err + } + return &StandardBridgeETHBridgeInitiatedIterator{contract: _StandardBridge.contract, event: "ETHBridgeInitiated", logs: logs, sub: sub}, nil +} + +// WatchETHBridgeInitiated is a free log subscription operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. +// +// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_StandardBridge *StandardBridgeFilterer) WatchETHBridgeInitiated(opts *bind.WatchOpts, sink chan<- *StandardBridgeETHBridgeInitiated, 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 := _StandardBridge.contract.WatchLogs(opts, "ETHBridgeInitiated", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(StandardBridgeETHBridgeInitiated) + if err := _StandardBridge.contract.UnpackLog(event, "ETHBridgeInitiated", 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 +} + +// ParseETHBridgeInitiated is a log parse operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. +// +// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_StandardBridge *StandardBridgeFilterer) ParseETHBridgeInitiated(log types.Log) (*StandardBridgeETHBridgeInitiated, error) { + event := new(StandardBridgeETHBridgeInitiated) + if err := _StandardBridge.contract.UnpackLog(event, "ETHBridgeInitiated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/kroma-bindings/bindings/standardbridge_more.go b/kroma-bindings/bindings/standardbridge_more.go new file mode 100644 index 000000000..01509698d --- /dev/null +++ b/kroma-bindings/bindings/standardbridge_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const StandardBridgeStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/universal/StandardBridge.sol:StandardBridge\",\"label\":\"deposits\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_mapping(t_address,t_mapping(t_address,t_uint256))\"},{\"astId\":1001,\"contract\":\"contracts/universal/StandardBridge.sol:StandardBridge\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)49_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)49_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\",\"base\":\"t_uint256\"},\"t_mapping(t_address,t_mapping(t_address,t_uint256))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(address =\u003e uint256))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_address,t_uint256)\"},\"t_mapping(t_address,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint256\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"}}}" + +var StandardBridgeStorageLayout = new(solc.StorageLayout) + +var StandardBridgeDeployedBin = "0x" + +func init() { + if err := json.Unmarshal([]byte(StandardBridgeStorageLayoutJSON), StandardBridgeStorageLayout); err != nil { + panic(err) + } + + layouts["StandardBridge"] = StandardBridgeStorageLayout + deployedBytecodes["StandardBridge"] = StandardBridgeDeployedBin +} diff --git a/kroma-bindings/bindings/systemconfig.go b/kroma-bindings/bindings/systemconfig.go new file mode 100644 index 000000000..5ba45d07b --- /dev/null +++ b/kroma-bindings/bindings/systemconfig.go @@ -0,0 +1,1215 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// ResourceMeteringResourceConfig is an auto generated low-level Go binding around an user-defined struct. +type ResourceMeteringResourceConfig struct { + MaxResourceLimit uint32 + ElasticityMultiplier uint8 + BaseFeeMaxChangeDenominator uint8 + MinimumBaseFee uint32 + SystemTxMaxGas uint32 + MaximumBaseFee *big.Int +} + +// SystemConfigMetaData contains all meta data concerning the SystemConfig contract. +var SystemConfigMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structResourceMetering.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_validatorRewardScalar\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\",\"name\":\"updateType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ConfigUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VERSION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batcherHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structResourceMetering.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_validatorRewardScalar\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumGasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"overhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resourceConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structResourceMetering.ResourceConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"}],\"name\":\"setBatcherHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"}],\"name\":\"setGasConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"}],\"name\":\"setGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structResourceMetering.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"}],\"name\":\"setResourceConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"}],\"name\":\"setUnsafeBlockSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_validatorRewardScalar\",\"type\":\"uint256\"}],\"name\":\"setValidatorRewardScalar\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unsafeBlockSigner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorRewardScalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60e06040523480156200001157600080fd5b506040516200226f3803806200226f833981016040819052620000349162000861565b6001608052600060a081905260c05262000055888888888888888862000063565b505050505050505062000a6b565b600054610100900460ff1615808015620000845750600054600160ff909116105b80620000b45750620000a1306200027860201b62000b8d1760201c565b158015620000b4575060005460ff166001145b6200011d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000141576000805461ff0019166101001790555b6200014b62000287565b6200015689620002ef565b606588905560668790556067869055606880546001600160401b0319166001600160401b038716179055620001a9847f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b620001b4836200036e565b620001be620006c3565b6001600160401b0316856001600160401b03161015620002215760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640162000114565b606a82905580156200026d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6001600160a01b03163b151590565b600054610100900460ff16620002e35760405162461bcd60e51b815260206004820152602b60248201526000805160206200224f83398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000114565b620002ed620006f0565b565b620002f962000757565b6001600160a01b038116620003605760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000114565b6200036b81620007b3565b50565b8060a001516001600160801b0316816060015163ffffffff161115620003fd5760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d617820626173650000000000000000000000606482015260840162000114565b6001816040015160ff16116200046e5760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201526e65206c6172676572207468616e203160881b606482015260840162000114565b606854608082015182516001600160401b0390921691620004909190620009ba565b63ffffffff161115620004e65760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640162000114565b6000816020015160ff1611620005575760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201526e06965722063616e6e6f74206265203608c1b606482015260840162000114565b8051602082015163ffffffff82169160ff9091169062000579908290620009e5565b62000585919062000a17565b63ffffffff1614620006005760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d6974000000000000000000606482015260840162000114565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff96871664ffffffffff199095169490941764010000000060ff948516021764ffffffffff60281b191665010000000000939092169290920263ffffffff60301b19161766010000000000009185169190910217600160501b600160f01b0319166a01000000000000000000009390941692909202600160701b600160f01b03191692909217600160701b6001600160801b0390921691909102179055565b606954600090620006eb9063ffffffff6a010000000000000000000082048116911662000a46565b905090565b600054610100900460ff166200074c5760405162461bcd60e51b815260206004820152602b60248201526000805160206200224f83398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000114565b620002ed33620007b3565b6033546001600160a01b03163314620002ed5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000114565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146200081d57600080fd5b919050565b805163ffffffff811681146200081d57600080fd5b805160ff811681146200081d57600080fd5b80516001600160801b03811681146200081d57600080fd5b600080600080600080600080888a036101a08112156200088057600080fd5b6200088b8a62000805565b60208b015160408c015160608d015160808e0151939c50919a50985096506001600160401b038082168214620008c057600080fd5b819650620008d160a08d0162000805565b955060c060bf1984011215620008e657600080fd5b604051925060c08301915082821081831117156200091457634e487b7160e01b600052604160045260246000fd5b506040526200092660c08b0162000822565b81526200093660e08b0162000837565b60208201526200094a6101008b0162000837565b60408201526200095e6101208b0162000822565b6060820152620009726101408b0162000822565b6080820152620009866101608b0162000849565b60a08201528092505061018089015190509295985092959890939650565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff808316818516808303821115620009dc57620009dc620009a4565b01949350505050565b600063ffffffff8084168062000a0b57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161562000a3d5762000a3d620009a4565b02949350505050565b60006001600160401b03828116848216808303821115620009dc57620009dc620009a4565b60805160a05160c0516117b462000a9b60003960006105b0015260006105870152600061055e01526117b46000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c8063c71973f6116100d8578063ed579ad31161008c578063f68016b711610066578063f68016b714610439578063fc7ffea71461044d578063ffa1ad741461046057600080fd5b8063ed579ad314610414578063f2fde38b1461041d578063f45e65d81461043057600080fd5b8063cc731b02116100bd578063cc731b02146102c4578063e81b2c6d146103f8578063ecdd939d1461040157600080fd5b8063c71973f61461029e578063c9b26f61146102b157600080fd5b806354fd4d501161012f5780638da5cb5b116101145780638da5cb5b1461025a578063935f029e14610278578063b40a817c1461028b57600080fd5b806354fd4d501461023d578063715018a61461025257600080fd5b80631fd19ee1116101605780631fd19ee1146101ad5780634add321d146101f55780634f16540b1461021657600080fd5b80630c18c1621461017c57806318d1391814610198575b600080fd5b61018560655481565b6040519081526020015b60405180910390f35b6101ab6101a636600461134e565b610468565b005b7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08545b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161018f565b6101fd61052c565b60405167ffffffffffffffff909116815260200161018f565b6101857f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b610245610557565b60405161018f91906113ea565b6101ab6105fa565b60335473ffffffffffffffffffffffffffffffffffffffff166101d0565b6101ab6102863660046113fd565b61060e565b6101ab610299366004611437565b6106a7565b6101ab6102ac36600461158f565b610778565b6101ab6102bf3660046115ab565b61078c565b6103886040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b60405161018f9190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61018560675481565b6101ab61040f3660046115ab565b6107bc565b610185606a5481565b6101ab61042b36600461134e565b61088a565b61018560665481565b6068546101fd9067ffffffffffffffff1681565b6101ab61045b3660046115c4565b610924565b610185600081565b610470610ba9565b610498817f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161052091906113ea565b60405180910390a35050565b6069546000906105529063ffffffff6a0100000000000000000000820481169116611670565b905090565b60606105827f0000000000000000000000000000000000000000000000000000000000000000610c10565b6105ab7f0000000000000000000000000000000000000000000000000000000000000000610c10565b6105d47f0000000000000000000000000000000000000000000000000000000000000000610c10565b6040516020016105e69392919061169c565b604051602081830303815290604052905090565b610602610ba9565b61060c6000610cce565b565b610616610ba9565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161069a91906113ea565b60405180910390a3505050565b6106af610ba9565b6106b761052c565b67ffffffffffffffff168167ffffffffffffffff16101561071f5760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064015b60405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831690811790915560408051602080820193909352815180820390930183528101905260026104ef565b610780610ba9565b61078981610d45565b50565b610794610ba9565b60678190556040805160208082018490528251808303909101815290820190915260006104ef565b6107c4610ba9565b6127108111156108625760405162461bcd60e51b815260206004820152604860248201527f53797374656d436f6e6669673a20746865206d61782076616c7565206f66207660448201527f616c696461746f7220726577617264207363616c617220686173206265656e2060648201527f6578636565646564000000000000000000000000000000000000000000000000608482015260a401610716565b606a8190556040805160208082018490528251808303909101815290820190915260046104ef565b610892610ba9565b73ffffffffffffffffffffffffffffffffffffffff811661091b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610716565b61078981610cce565b600054610100900460ff16158080156109445750600054600160ff909116105b8061095e5750303b15801561095e575060005460ff166001145b6109d05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610716565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610a2e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610a36611137565b610a3f8961088a565b606588905560668790556067869055606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff87161790557f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08849055610aaf83610d45565b610ab761052c565b67ffffffffffffffff168567ffffffffffffffff161015610b1a5760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610716565b606a8290558015610b8257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60335473ffffffffffffffffffffffffffffffffffffffff16331461060c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610716565b60606000610c1d836111bc565b600101905060008167ffffffffffffffff811115610c3d57610c3d611452565b6040519080825280601f01601f191660200182016040528015610c67576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084610c7157509392505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115610ddb5760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610716565b6001816040015160ff1611610e585760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e203100000000000000000000000000000000006064820152608401610716565b6068546080820151825167ffffffffffffffff90921691610e799190611712565b63ffffffff161115610ecd5760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610716565b6000816020015160ff1611610f4a5760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610716565b8051602082015163ffffffff82169160ff90911690610f6a908290611731565b610f74919061177b565b63ffffffff1614610fed5760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610716565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b600054610100900460ff166111b45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610716565b61060c61129f565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611205577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611231576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061124f57662386f26fc10000830492506010015b6305f5e1008310611267576305f5e100830492506008015b612710831061127b57612710830492506004015b6064831061128d576064830492506002015b600a8310611299576001015b92915050565b600054610100900460ff1661131c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610716565b61060c33610cce565b803573ffffffffffffffffffffffffffffffffffffffff8116811461134957600080fd5b919050565b60006020828403121561136057600080fd5b61136982611325565b9392505050565b60005b8381101561138b578181015183820152602001611373565b8381111561139a576000848401525b50505050565b600081518084526113b8816020860160208601611370565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061136960208301846113a0565b6000806040838503121561141057600080fd5b50508035926020909101359150565b803567ffffffffffffffff8116811461134957600080fd5b60006020828403121561144957600080fd5b6113698261141f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b803563ffffffff8116811461134957600080fd5b803560ff8116811461134957600080fd5b80356fffffffffffffffffffffffffffffffff8116811461134957600080fd5b600060c082840312156114d857600080fd5b60405160c0810181811067ffffffffffffffff82111715611522577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290508061153183611481565b815261153f60208401611495565b602082015261155060408401611495565b604082015261156160608401611481565b606082015261157260808401611481565b608082015261158360a084016114a6565b60a08201525092915050565b600060c082840312156115a157600080fd5b61136983836114c6565b6000602082840312156115bd57600080fd5b5035919050565b6000806000806000806000806101a0898b0312156115e157600080fd5b6115ea89611325565b975060208901359650604089013595506060890135945061160d60808a0161141f565b935061161b60a08a01611325565b925061162a8a60c08b016114c6565b915061018089013590509295985092959890939650565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851680830382111561169357611693611641565b01949350505050565b600084516116ae818460208901611370565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516116ea816001850160208a01611370565b60019201918201528351611705816002840160208801611370565b0160020195945050505050565b600063ffffffff80831681851680830382111561169357611693611641565b600063ffffffff8084168061176f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161561179e5761179e611641565b0294935050505056fea164736f6c634300080f000a496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", +} + +// SystemConfigABI is the input ABI used to generate the binding from. +// Deprecated: Use SystemConfigMetaData.ABI instead. +var SystemConfigABI = SystemConfigMetaData.ABI + +// SystemConfigBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use SystemConfigMetaData.Bin instead. +var SystemConfigBin = SystemConfigMetaData.Bin + +// DeploySystemConfig deploys a new Ethereum contract, binding an instance of SystemConfig to it. +func DeploySystemConfig(auth *bind.TransactOpts, backend bind.ContractBackend, _owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config ResourceMeteringResourceConfig, _validatorRewardScalar *big.Int) (common.Address, *types.Transaction, *SystemConfig, error) { + parsed, err := SystemConfigMetaData.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(SystemConfigBin), backend, _owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _validatorRewardScalar) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &SystemConfig{SystemConfigCaller: SystemConfigCaller{contract: contract}, SystemConfigTransactor: SystemConfigTransactor{contract: contract}, SystemConfigFilterer: SystemConfigFilterer{contract: contract}}, nil +} + +// SystemConfig is an auto generated Go binding around an Ethereum contract. +type SystemConfig struct { + SystemConfigCaller // Read-only binding to the contract + SystemConfigTransactor // Write-only binding to the contract + SystemConfigFilterer // Log filterer for contract events +} + +// SystemConfigCaller is an auto generated read-only Go binding around an Ethereum contract. +type SystemConfigCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SystemConfigTransactor is an auto generated write-only Go binding around an Ethereum contract. +type SystemConfigTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SystemConfigFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type SystemConfigFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SystemConfigSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type SystemConfigSession struct { + Contract *SystemConfig // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SystemConfigCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type SystemConfigCallerSession struct { + Contract *SystemConfigCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// SystemConfigTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type SystemConfigTransactorSession struct { + Contract *SystemConfigTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SystemConfigRaw is an auto generated low-level Go binding around an Ethereum contract. +type SystemConfigRaw struct { + Contract *SystemConfig // Generic contract binding to access the raw methods on +} + +// SystemConfigCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type SystemConfigCallerRaw struct { + Contract *SystemConfigCaller // Generic read-only contract binding to access the raw methods on +} + +// SystemConfigTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type SystemConfigTransactorRaw struct { + Contract *SystemConfigTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewSystemConfig creates a new instance of SystemConfig, bound to a specific deployed contract. +func NewSystemConfig(address common.Address, backend bind.ContractBackend) (*SystemConfig, error) { + contract, err := bindSystemConfig(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &SystemConfig{SystemConfigCaller: SystemConfigCaller{contract: contract}, SystemConfigTransactor: SystemConfigTransactor{contract: contract}, SystemConfigFilterer: SystemConfigFilterer{contract: contract}}, nil +} + +// NewSystemConfigCaller creates a new read-only instance of SystemConfig, bound to a specific deployed contract. +func NewSystemConfigCaller(address common.Address, caller bind.ContractCaller) (*SystemConfigCaller, error) { + contract, err := bindSystemConfig(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &SystemConfigCaller{contract: contract}, nil +} + +// NewSystemConfigTransactor creates a new write-only instance of SystemConfig, bound to a specific deployed contract. +func NewSystemConfigTransactor(address common.Address, transactor bind.ContractTransactor) (*SystemConfigTransactor, error) { + contract, err := bindSystemConfig(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &SystemConfigTransactor{contract: contract}, nil +} + +// NewSystemConfigFilterer creates a new log filterer instance of SystemConfig, bound to a specific deployed contract. +func NewSystemConfigFilterer(address common.Address, filterer bind.ContractFilterer) (*SystemConfigFilterer, error) { + contract, err := bindSystemConfig(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &SystemConfigFilterer{contract: contract}, nil +} + +// bindSystemConfig binds a generic wrapper to an already deployed contract. +func bindSystemConfig(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := SystemConfigMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_SystemConfig *SystemConfigRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SystemConfig.Contract.SystemConfigCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_SystemConfig *SystemConfigRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SystemConfig.Contract.SystemConfigTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SystemConfig *SystemConfigRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SystemConfig.Contract.SystemConfigTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_SystemConfig *SystemConfigCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SystemConfig.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_SystemConfig *SystemConfigTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SystemConfig.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SystemConfig *SystemConfigTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SystemConfig.Contract.contract.Transact(opts, method, params...) +} + +// UNSAFEBLOCKSIGNERSLOT is a free data retrieval call binding the contract method 0x4f16540b. +// +// Solidity: function UNSAFE_BLOCK_SIGNER_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCaller) UNSAFEBLOCKSIGNERSLOT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "UNSAFE_BLOCK_SIGNER_SLOT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// UNSAFEBLOCKSIGNERSLOT is a free data retrieval call binding the contract method 0x4f16540b. +// +// Solidity: function UNSAFE_BLOCK_SIGNER_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigSession) UNSAFEBLOCKSIGNERSLOT() ([32]byte, error) { + return _SystemConfig.Contract.UNSAFEBLOCKSIGNERSLOT(&_SystemConfig.CallOpts) +} + +// UNSAFEBLOCKSIGNERSLOT is a free data retrieval call binding the contract method 0x4f16540b. +// +// Solidity: function UNSAFE_BLOCK_SIGNER_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCallerSession) UNSAFEBLOCKSIGNERSLOT() ([32]byte, error) { + return _SystemConfig.Contract.UNSAFEBLOCKSIGNERSLOT(&_SystemConfig.CallOpts) +} + +// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. +// +// Solidity: function VERSION() view returns(uint256) +func (_SystemConfig *SystemConfigCaller) VERSION(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _SystemConfig.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 + +} + +// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. +// +// Solidity: function VERSION() view returns(uint256) +func (_SystemConfig *SystemConfigSession) VERSION() (*big.Int, error) { + return _SystemConfig.Contract.VERSION(&_SystemConfig.CallOpts) +} + +// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. +// +// Solidity: function VERSION() view returns(uint256) +func (_SystemConfig *SystemConfigCallerSession) VERSION() (*big.Int, error) { + return _SystemConfig.Contract.VERSION(&_SystemConfig.CallOpts) +} + +// BatcherHash is a free data retrieval call binding the contract method 0xe81b2c6d. +// +// Solidity: function batcherHash() view returns(bytes32) +func (_SystemConfig *SystemConfigCaller) BatcherHash(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "batcherHash") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// BatcherHash is a free data retrieval call binding the contract method 0xe81b2c6d. +// +// Solidity: function batcherHash() view returns(bytes32) +func (_SystemConfig *SystemConfigSession) BatcherHash() ([32]byte, error) { + return _SystemConfig.Contract.BatcherHash(&_SystemConfig.CallOpts) +} + +// BatcherHash is a free data retrieval call binding the contract method 0xe81b2c6d. +// +// Solidity: function batcherHash() view returns(bytes32) +func (_SystemConfig *SystemConfigCallerSession) BatcherHash() ([32]byte, error) { + return _SystemConfig.Contract.BatcherHash(&_SystemConfig.CallOpts) +} + +// GasLimit is a free data retrieval call binding the contract method 0xf68016b7. +// +// Solidity: function gasLimit() view returns(uint64) +func (_SystemConfig *SystemConfigCaller) GasLimit(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "gasLimit") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// GasLimit is a free data retrieval call binding the contract method 0xf68016b7. +// +// Solidity: function gasLimit() view returns(uint64) +func (_SystemConfig *SystemConfigSession) GasLimit() (uint64, error) { + return _SystemConfig.Contract.GasLimit(&_SystemConfig.CallOpts) +} + +// GasLimit is a free data retrieval call binding the contract method 0xf68016b7. +// +// Solidity: function gasLimit() view returns(uint64) +func (_SystemConfig *SystemConfigCallerSession) GasLimit() (uint64, error) { + return _SystemConfig.Contract.GasLimit(&_SystemConfig.CallOpts) +} + +// MinimumGasLimit is a free data retrieval call binding the contract method 0x4add321d. +// +// Solidity: function minimumGasLimit() view returns(uint64) +func (_SystemConfig *SystemConfigCaller) MinimumGasLimit(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "minimumGasLimit") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// MinimumGasLimit is a free data retrieval call binding the contract method 0x4add321d. +// +// Solidity: function minimumGasLimit() view returns(uint64) +func (_SystemConfig *SystemConfigSession) MinimumGasLimit() (uint64, error) { + return _SystemConfig.Contract.MinimumGasLimit(&_SystemConfig.CallOpts) +} + +// MinimumGasLimit is a free data retrieval call binding the contract method 0x4add321d. +// +// Solidity: function minimumGasLimit() view returns(uint64) +func (_SystemConfig *SystemConfigCallerSession) MinimumGasLimit() (uint64, error) { + return _SystemConfig.Contract.MinimumGasLimit(&_SystemConfig.CallOpts) +} + +// Overhead is a free data retrieval call binding the contract method 0x0c18c162. +// +// Solidity: function overhead() view returns(uint256) +func (_SystemConfig *SystemConfigCaller) Overhead(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "overhead") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Overhead is a free data retrieval call binding the contract method 0x0c18c162. +// +// Solidity: function overhead() view returns(uint256) +func (_SystemConfig *SystemConfigSession) Overhead() (*big.Int, error) { + return _SystemConfig.Contract.Overhead(&_SystemConfig.CallOpts) +} + +// Overhead is a free data retrieval call binding the contract method 0x0c18c162. +// +// Solidity: function overhead() view returns(uint256) +func (_SystemConfig *SystemConfigCallerSession) Overhead() (*big.Int, error) { + return _SystemConfig.Contract.Overhead(&_SystemConfig.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_SystemConfig *SystemConfigCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.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 + +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_SystemConfig *SystemConfigSession) Owner() (common.Address, error) { + return _SystemConfig.Contract.Owner(&_SystemConfig.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_SystemConfig *SystemConfigCallerSession) Owner() (common.Address, error) { + return _SystemConfig.Contract.Owner(&_SystemConfig.CallOpts) +} + +// ResourceConfig is a free data retrieval call binding the contract method 0xcc731b02. +// +// Solidity: function resourceConfig() view returns((uint32,uint8,uint8,uint32,uint32,uint128)) +func (_SystemConfig *SystemConfigCaller) ResourceConfig(opts *bind.CallOpts) (ResourceMeteringResourceConfig, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "resourceConfig") + + if err != nil { + return *new(ResourceMeteringResourceConfig), err + } + + out0 := *abi.ConvertType(out[0], new(ResourceMeteringResourceConfig)).(*ResourceMeteringResourceConfig) + + return out0, err + +} + +// ResourceConfig is a free data retrieval call binding the contract method 0xcc731b02. +// +// Solidity: function resourceConfig() view returns((uint32,uint8,uint8,uint32,uint32,uint128)) +func (_SystemConfig *SystemConfigSession) ResourceConfig() (ResourceMeteringResourceConfig, error) { + return _SystemConfig.Contract.ResourceConfig(&_SystemConfig.CallOpts) +} + +// ResourceConfig is a free data retrieval call binding the contract method 0xcc731b02. +// +// Solidity: function resourceConfig() view returns((uint32,uint8,uint8,uint32,uint32,uint128)) +func (_SystemConfig *SystemConfigCallerSession) ResourceConfig() (ResourceMeteringResourceConfig, error) { + return _SystemConfig.Contract.ResourceConfig(&_SystemConfig.CallOpts) +} + +// Scalar is a free data retrieval call binding the contract method 0xf45e65d8. +// +// Solidity: function scalar() view returns(uint256) +func (_SystemConfig *SystemConfigCaller) Scalar(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "scalar") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Scalar is a free data retrieval call binding the contract method 0xf45e65d8. +// +// Solidity: function scalar() view returns(uint256) +func (_SystemConfig *SystemConfigSession) Scalar() (*big.Int, error) { + return _SystemConfig.Contract.Scalar(&_SystemConfig.CallOpts) +} + +// Scalar is a free data retrieval call binding the contract method 0xf45e65d8. +// +// Solidity: function scalar() view returns(uint256) +func (_SystemConfig *SystemConfigCallerSession) Scalar() (*big.Int, error) { + return _SystemConfig.Contract.Scalar(&_SystemConfig.CallOpts) +} + +// UnsafeBlockSigner is a free data retrieval call binding the contract method 0x1fd19ee1. +// +// Solidity: function unsafeBlockSigner() view returns(address) +func (_SystemConfig *SystemConfigCaller) UnsafeBlockSigner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "unsafeBlockSigner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// UnsafeBlockSigner is a free data retrieval call binding the contract method 0x1fd19ee1. +// +// Solidity: function unsafeBlockSigner() view returns(address) +func (_SystemConfig *SystemConfigSession) UnsafeBlockSigner() (common.Address, error) { + return _SystemConfig.Contract.UnsafeBlockSigner(&_SystemConfig.CallOpts) +} + +// UnsafeBlockSigner is a free data retrieval call binding the contract method 0x1fd19ee1. +// +// Solidity: function unsafeBlockSigner() view returns(address) +func (_SystemConfig *SystemConfigCallerSession) UnsafeBlockSigner() (common.Address, error) { + return _SystemConfig.Contract.UnsafeBlockSigner(&_SystemConfig.CallOpts) +} + +// ValidatorRewardScalar is a free data retrieval call binding the contract method 0xed579ad3. +// +// Solidity: function validatorRewardScalar() view returns(uint256) +func (_SystemConfig *SystemConfigCaller) ValidatorRewardScalar(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "validatorRewardScalar") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ValidatorRewardScalar is a free data retrieval call binding the contract method 0xed579ad3. +// +// Solidity: function validatorRewardScalar() view returns(uint256) +func (_SystemConfig *SystemConfigSession) ValidatorRewardScalar() (*big.Int, error) { + return _SystemConfig.Contract.ValidatorRewardScalar(&_SystemConfig.CallOpts) +} + +// ValidatorRewardScalar is a free data retrieval call binding the contract method 0xed579ad3. +// +// Solidity: function validatorRewardScalar() view returns(uint256) +func (_SystemConfig *SystemConfigCallerSession) ValidatorRewardScalar() (*big.Int, error) { + return _SystemConfig.Contract.ValidatorRewardScalar(&_SystemConfig.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_SystemConfig *SystemConfigCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_SystemConfig *SystemConfigSession) Version() (string, error) { + return _SystemConfig.Contract.Version(&_SystemConfig.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_SystemConfig *SystemConfigCallerSession) Version() (string, error) { + return _SystemConfig.Contract.Version(&_SystemConfig.CallOpts) +} + +// Initialize is a paid mutator transaction binding the contract method 0xfc7ffea7. +// +// Solidity: function initialize(address _owner, uint256 _overhead, uint256 _scalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, uint256 _validatorRewardScalar) returns() +func (_SystemConfig *SystemConfigTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config ResourceMeteringResourceConfig, _validatorRewardScalar *big.Int) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "initialize", _owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _validatorRewardScalar) +} + +// Initialize is a paid mutator transaction binding the contract method 0xfc7ffea7. +// +// Solidity: function initialize(address _owner, uint256 _overhead, uint256 _scalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, uint256 _validatorRewardScalar) returns() +func (_SystemConfig *SystemConfigSession) Initialize(_owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config ResourceMeteringResourceConfig, _validatorRewardScalar *big.Int) (*types.Transaction, error) { + return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _validatorRewardScalar) +} + +// Initialize is a paid mutator transaction binding the contract method 0xfc7ffea7. +// +// Solidity: function initialize(address _owner, uint256 _overhead, uint256 _scalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, uint256 _validatorRewardScalar) returns() +func (_SystemConfig *SystemConfigTransactorSession) Initialize(_owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config ResourceMeteringResourceConfig, _validatorRewardScalar *big.Int) (*types.Transaction, error) { + return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _validatorRewardScalar) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_SystemConfig *SystemConfigTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_SystemConfig *SystemConfigSession) RenounceOwnership() (*types.Transaction, error) { + return _SystemConfig.Contract.RenounceOwnership(&_SystemConfig.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_SystemConfig *SystemConfigTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _SystemConfig.Contract.RenounceOwnership(&_SystemConfig.TransactOpts) +} + +// SetBatcherHash is a paid mutator transaction binding the contract method 0xc9b26f61. +// +// Solidity: function setBatcherHash(bytes32 _batcherHash) returns() +func (_SystemConfig *SystemConfigTransactor) SetBatcherHash(opts *bind.TransactOpts, _batcherHash [32]byte) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "setBatcherHash", _batcherHash) +} + +// SetBatcherHash is a paid mutator transaction binding the contract method 0xc9b26f61. +// +// Solidity: function setBatcherHash(bytes32 _batcherHash) returns() +func (_SystemConfig *SystemConfigSession) SetBatcherHash(_batcherHash [32]byte) (*types.Transaction, error) { + return _SystemConfig.Contract.SetBatcherHash(&_SystemConfig.TransactOpts, _batcherHash) +} + +// SetBatcherHash is a paid mutator transaction binding the contract method 0xc9b26f61. +// +// Solidity: function setBatcherHash(bytes32 _batcherHash) returns() +func (_SystemConfig *SystemConfigTransactorSession) SetBatcherHash(_batcherHash [32]byte) (*types.Transaction, error) { + return _SystemConfig.Contract.SetBatcherHash(&_SystemConfig.TransactOpts, _batcherHash) +} + +// SetGasConfig is a paid mutator transaction binding the contract method 0x935f029e. +// +// Solidity: function setGasConfig(uint256 _overhead, uint256 _scalar) returns() +func (_SystemConfig *SystemConfigTransactor) SetGasConfig(opts *bind.TransactOpts, _overhead *big.Int, _scalar *big.Int) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "setGasConfig", _overhead, _scalar) +} + +// SetGasConfig is a paid mutator transaction binding the contract method 0x935f029e. +// +// Solidity: function setGasConfig(uint256 _overhead, uint256 _scalar) returns() +func (_SystemConfig *SystemConfigSession) SetGasConfig(_overhead *big.Int, _scalar *big.Int) (*types.Transaction, error) { + return _SystemConfig.Contract.SetGasConfig(&_SystemConfig.TransactOpts, _overhead, _scalar) +} + +// SetGasConfig is a paid mutator transaction binding the contract method 0x935f029e. +// +// Solidity: function setGasConfig(uint256 _overhead, uint256 _scalar) returns() +func (_SystemConfig *SystemConfigTransactorSession) SetGasConfig(_overhead *big.Int, _scalar *big.Int) (*types.Transaction, error) { + return _SystemConfig.Contract.SetGasConfig(&_SystemConfig.TransactOpts, _overhead, _scalar) +} + +// SetGasLimit is a paid mutator transaction binding the contract method 0xb40a817c. +// +// Solidity: function setGasLimit(uint64 _gasLimit) returns() +func (_SystemConfig *SystemConfigTransactor) SetGasLimit(opts *bind.TransactOpts, _gasLimit uint64) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "setGasLimit", _gasLimit) +} + +// SetGasLimit is a paid mutator transaction binding the contract method 0xb40a817c. +// +// Solidity: function setGasLimit(uint64 _gasLimit) returns() +func (_SystemConfig *SystemConfigSession) SetGasLimit(_gasLimit uint64) (*types.Transaction, error) { + return _SystemConfig.Contract.SetGasLimit(&_SystemConfig.TransactOpts, _gasLimit) +} + +// SetGasLimit is a paid mutator transaction binding the contract method 0xb40a817c. +// +// Solidity: function setGasLimit(uint64 _gasLimit) returns() +func (_SystemConfig *SystemConfigTransactorSession) SetGasLimit(_gasLimit uint64) (*types.Transaction, error) { + return _SystemConfig.Contract.SetGasLimit(&_SystemConfig.TransactOpts, _gasLimit) +} + +// SetResourceConfig is a paid mutator transaction binding the contract method 0xc71973f6. +// +// Solidity: function setResourceConfig((uint32,uint8,uint8,uint32,uint32,uint128) _config) returns() +func (_SystemConfig *SystemConfigTransactor) SetResourceConfig(opts *bind.TransactOpts, _config ResourceMeteringResourceConfig) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "setResourceConfig", _config) +} + +// SetResourceConfig is a paid mutator transaction binding the contract method 0xc71973f6. +// +// Solidity: function setResourceConfig((uint32,uint8,uint8,uint32,uint32,uint128) _config) returns() +func (_SystemConfig *SystemConfigSession) SetResourceConfig(_config ResourceMeteringResourceConfig) (*types.Transaction, error) { + return _SystemConfig.Contract.SetResourceConfig(&_SystemConfig.TransactOpts, _config) +} + +// SetResourceConfig is a paid mutator transaction binding the contract method 0xc71973f6. +// +// Solidity: function setResourceConfig((uint32,uint8,uint8,uint32,uint32,uint128) _config) returns() +func (_SystemConfig *SystemConfigTransactorSession) SetResourceConfig(_config ResourceMeteringResourceConfig) (*types.Transaction, error) { + return _SystemConfig.Contract.SetResourceConfig(&_SystemConfig.TransactOpts, _config) +} + +// SetUnsafeBlockSigner is a paid mutator transaction binding the contract method 0x18d13918. +// +// Solidity: function setUnsafeBlockSigner(address _unsafeBlockSigner) returns() +func (_SystemConfig *SystemConfigTransactor) SetUnsafeBlockSigner(opts *bind.TransactOpts, _unsafeBlockSigner common.Address) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "setUnsafeBlockSigner", _unsafeBlockSigner) +} + +// SetUnsafeBlockSigner is a paid mutator transaction binding the contract method 0x18d13918. +// +// Solidity: function setUnsafeBlockSigner(address _unsafeBlockSigner) returns() +func (_SystemConfig *SystemConfigSession) SetUnsafeBlockSigner(_unsafeBlockSigner common.Address) (*types.Transaction, error) { + return _SystemConfig.Contract.SetUnsafeBlockSigner(&_SystemConfig.TransactOpts, _unsafeBlockSigner) +} + +// SetUnsafeBlockSigner is a paid mutator transaction binding the contract method 0x18d13918. +// +// Solidity: function setUnsafeBlockSigner(address _unsafeBlockSigner) returns() +func (_SystemConfig *SystemConfigTransactorSession) SetUnsafeBlockSigner(_unsafeBlockSigner common.Address) (*types.Transaction, error) { + return _SystemConfig.Contract.SetUnsafeBlockSigner(&_SystemConfig.TransactOpts, _unsafeBlockSigner) +} + +// SetValidatorRewardScalar is a paid mutator transaction binding the contract method 0xecdd939d. +// +// Solidity: function setValidatorRewardScalar(uint256 _validatorRewardScalar) returns() +func (_SystemConfig *SystemConfigTransactor) SetValidatorRewardScalar(opts *bind.TransactOpts, _validatorRewardScalar *big.Int) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "setValidatorRewardScalar", _validatorRewardScalar) +} + +// SetValidatorRewardScalar is a paid mutator transaction binding the contract method 0xecdd939d. +// +// Solidity: function setValidatorRewardScalar(uint256 _validatorRewardScalar) returns() +func (_SystemConfig *SystemConfigSession) SetValidatorRewardScalar(_validatorRewardScalar *big.Int) (*types.Transaction, error) { + return _SystemConfig.Contract.SetValidatorRewardScalar(&_SystemConfig.TransactOpts, _validatorRewardScalar) +} + +// SetValidatorRewardScalar is a paid mutator transaction binding the contract method 0xecdd939d. +// +// Solidity: function setValidatorRewardScalar(uint256 _validatorRewardScalar) returns() +func (_SystemConfig *SystemConfigTransactorSession) SetValidatorRewardScalar(_validatorRewardScalar *big.Int) (*types.Transaction, error) { + return _SystemConfig.Contract.SetValidatorRewardScalar(&_SystemConfig.TransactOpts, _validatorRewardScalar) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_SystemConfig *SystemConfigTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_SystemConfig *SystemConfigSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _SystemConfig.Contract.TransferOwnership(&_SystemConfig.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_SystemConfig *SystemConfigTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _SystemConfig.Contract.TransferOwnership(&_SystemConfig.TransactOpts, newOwner) +} + +// SystemConfigConfigUpdateIterator is returned from FilterConfigUpdate and is used to iterate over the raw logs and unpacked data for ConfigUpdate events raised by the SystemConfig contract. +type SystemConfigConfigUpdateIterator struct { + Event *SystemConfigConfigUpdate // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *SystemConfigConfigUpdateIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(SystemConfigConfigUpdate) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(SystemConfigConfigUpdate) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *SystemConfigConfigUpdateIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SystemConfigConfigUpdateIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SystemConfigConfigUpdate represents a ConfigUpdate event raised by the SystemConfig contract. +type SystemConfigConfigUpdate struct { + Version *big.Int + UpdateType uint8 + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterConfigUpdate is a free log retrieval operation binding the contract event 0x1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be. +// +// Solidity: event ConfigUpdate(uint256 indexed version, uint8 indexed updateType, bytes data) +func (_SystemConfig *SystemConfigFilterer) FilterConfigUpdate(opts *bind.FilterOpts, version []*big.Int, updateType []uint8) (*SystemConfigConfigUpdateIterator, error) { + + var versionRule []interface{} + for _, versionItem := range version { + versionRule = append(versionRule, versionItem) + } + var updateTypeRule []interface{} + for _, updateTypeItem := range updateType { + updateTypeRule = append(updateTypeRule, updateTypeItem) + } + + logs, sub, err := _SystemConfig.contract.FilterLogs(opts, "ConfigUpdate", versionRule, updateTypeRule) + if err != nil { + return nil, err + } + return &SystemConfigConfigUpdateIterator{contract: _SystemConfig.contract, event: "ConfigUpdate", logs: logs, sub: sub}, nil +} + +// WatchConfigUpdate is a free log subscription operation binding the contract event 0x1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be. +// +// Solidity: event ConfigUpdate(uint256 indexed version, uint8 indexed updateType, bytes data) +func (_SystemConfig *SystemConfigFilterer) WatchConfigUpdate(opts *bind.WatchOpts, sink chan<- *SystemConfigConfigUpdate, version []*big.Int, updateType []uint8) (event.Subscription, error) { + + var versionRule []interface{} + for _, versionItem := range version { + versionRule = append(versionRule, versionItem) + } + var updateTypeRule []interface{} + for _, updateTypeItem := range updateType { + updateTypeRule = append(updateTypeRule, updateTypeItem) + } + + logs, sub, err := _SystemConfig.contract.WatchLogs(opts, "ConfigUpdate", versionRule, updateTypeRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(SystemConfigConfigUpdate) + if err := _SystemConfig.contract.UnpackLog(event, "ConfigUpdate", 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 +} + +// ParseConfigUpdate is a log parse operation binding the contract event 0x1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be. +// +// Solidity: event ConfigUpdate(uint256 indexed version, uint8 indexed updateType, bytes data) +func (_SystemConfig *SystemConfigFilterer) ParseConfigUpdate(log types.Log) (*SystemConfigConfigUpdate, error) { + event := new(SystemConfigConfigUpdate) + if err := _SystemConfig.contract.UnpackLog(event, "ConfigUpdate", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SystemConfigInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the SystemConfig contract. +type SystemConfigInitializedIterator struct { + Event *SystemConfigInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *SystemConfigInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(SystemConfigInitialized) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(SystemConfigInitialized) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *SystemConfigInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SystemConfigInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SystemConfigInitialized represents a Initialized event raised by the SystemConfig contract. +type SystemConfigInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_SystemConfig *SystemConfigFilterer) FilterInitialized(opts *bind.FilterOpts) (*SystemConfigInitializedIterator, error) { + + logs, sub, err := _SystemConfig.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &SystemConfigInitializedIterator{contract: _SystemConfig.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_SystemConfig *SystemConfigFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *SystemConfigInitialized) (event.Subscription, error) { + + logs, sub, err := _SystemConfig.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: + // New log arrived, parse the event and forward to the user + event := new(SystemConfigInitialized) + if err := _SystemConfig.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 +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_SystemConfig *SystemConfigFilterer) ParseInitialized(log types.Log) (*SystemConfigInitialized, error) { + event := new(SystemConfigInitialized) + if err := _SystemConfig.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SystemConfigOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the SystemConfig contract. +type SystemConfigOwnershipTransferredIterator struct { + Event *SystemConfigOwnershipTransferred // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *SystemConfigOwnershipTransferredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(SystemConfigOwnershipTransferred) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(SystemConfigOwnershipTransferred) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *SystemConfigOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SystemConfigOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SystemConfigOwnershipTransferred represents a OwnershipTransferred event raised by the SystemConfig contract. +type SystemConfigOwnershipTransferred struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_SystemConfig *SystemConfigFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*SystemConfigOwnershipTransferredIterator, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _SystemConfig.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &SystemConfigOwnershipTransferredIterator{contract: _SystemConfig.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_SystemConfig *SystemConfigFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *SystemConfigOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _SystemConfig.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(SystemConfigOwnershipTransferred) + if err := _SystemConfig.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 +} + +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_SystemConfig *SystemConfigFilterer) ParseOwnershipTransferred(log types.Log) (*SystemConfigOwnershipTransferred, error) { + event := new(SystemConfigOwnershipTransferred) + if err := _SystemConfig.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/kroma-bindings/bindings/systemconfig_more.go b/kroma-bindings/bindings/systemconfig_more.go new file mode 100644 index 000000000..4ef129b21 --- /dev/null +++ b/kroma-bindings/bindings/systemconfig_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const SystemConfigStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)50_storage\"},{\"astId\":1003,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"_owner\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_address\"},{\"astId\":1004,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_array(t_uint256)49_storage\"},{\"astId\":1005,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"overhead\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_uint256\"},{\"astId\":1006,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"scalar\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_uint256\"},{\"astId\":1007,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"batcherHash\",\"offset\":0,\"slot\":\"103\",\"type\":\"t_bytes32\"},{\"astId\":1008,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"gasLimit\",\"offset\":0,\"slot\":\"104\",\"type\":\"t_uint64\"},{\"astId\":1009,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"_resourceConfig\",\"offset\":0,\"slot\":\"105\",\"type\":\"t_struct(ResourceConfig)1011_storage\"},{\"astId\":1010,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"validatorRewardScalar\",\"offset\":0,\"slot\":\"106\",\"type\":\"t_uint256\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)49_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\",\"base\":\"t_uint256\"},\"t_array(t_uint256)50_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\",\"base\":\"t_uint256\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_struct(ResourceConfig)1011_storage\":{\"encoding\":\"inplace\",\"label\":\"struct ResourceMetering.ResourceConfig\",\"numberOfBytes\":\"32\"},\"t_uint128\":{\"encoding\":\"inplace\",\"label\":\"uint128\",\"numberOfBytes\":\"16\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint32\":{\"encoding\":\"inplace\",\"label\":\"uint32\",\"numberOfBytes\":\"4\"},\"t_uint64\":{\"encoding\":\"inplace\",\"label\":\"uint64\",\"numberOfBytes\":\"8\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" + +var SystemConfigStorageLayout = new(solc.StorageLayout) + +var SystemConfigDeployedBin = "0x608060405234801561001057600080fd5b50600436106101775760003560e01c8063c71973f6116100d8578063ed579ad31161008c578063f68016b711610066578063f68016b714610439578063fc7ffea71461044d578063ffa1ad741461046057600080fd5b8063ed579ad314610414578063f2fde38b1461041d578063f45e65d81461043057600080fd5b8063cc731b02116100bd578063cc731b02146102c4578063e81b2c6d146103f8578063ecdd939d1461040157600080fd5b8063c71973f61461029e578063c9b26f61146102b157600080fd5b806354fd4d501161012f5780638da5cb5b116101145780638da5cb5b1461025a578063935f029e14610278578063b40a817c1461028b57600080fd5b806354fd4d501461023d578063715018a61461025257600080fd5b80631fd19ee1116101605780631fd19ee1146101ad5780634add321d146101f55780634f16540b1461021657600080fd5b80630c18c1621461017c57806318d1391814610198575b600080fd5b61018560655481565b6040519081526020015b60405180910390f35b6101ab6101a636600461134e565b610468565b005b7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08545b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161018f565b6101fd61052c565b60405167ffffffffffffffff909116815260200161018f565b6101857f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b610245610557565b60405161018f91906113ea565b6101ab6105fa565b60335473ffffffffffffffffffffffffffffffffffffffff166101d0565b6101ab6102863660046113fd565b61060e565b6101ab610299366004611437565b6106a7565b6101ab6102ac36600461158f565b610778565b6101ab6102bf3660046115ab565b61078c565b6103886040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b60405161018f9190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61018560675481565b6101ab61040f3660046115ab565b6107bc565b610185606a5481565b6101ab61042b36600461134e565b61088a565b61018560665481565b6068546101fd9067ffffffffffffffff1681565b6101ab61045b3660046115c4565b610924565b610185600081565b610470610ba9565b610498817f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161052091906113ea565b60405180910390a35050565b6069546000906105529063ffffffff6a0100000000000000000000820481169116611670565b905090565b60606105827f0000000000000000000000000000000000000000000000000000000000000000610c10565b6105ab7f0000000000000000000000000000000000000000000000000000000000000000610c10565b6105d47f0000000000000000000000000000000000000000000000000000000000000000610c10565b6040516020016105e69392919061169c565b604051602081830303815290604052905090565b610602610ba9565b61060c6000610cce565b565b610616610ba9565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161069a91906113ea565b60405180910390a3505050565b6106af610ba9565b6106b761052c565b67ffffffffffffffff168167ffffffffffffffff16101561071f5760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064015b60405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831690811790915560408051602080820193909352815180820390930183528101905260026104ef565b610780610ba9565b61078981610d45565b50565b610794610ba9565b60678190556040805160208082018490528251808303909101815290820190915260006104ef565b6107c4610ba9565b6127108111156108625760405162461bcd60e51b815260206004820152604860248201527f53797374656d436f6e6669673a20746865206d61782076616c7565206f66207660448201527f616c696461746f7220726577617264207363616c617220686173206265656e2060648201527f6578636565646564000000000000000000000000000000000000000000000000608482015260a401610716565b606a8190556040805160208082018490528251808303909101815290820190915260046104ef565b610892610ba9565b73ffffffffffffffffffffffffffffffffffffffff811661091b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610716565b61078981610cce565b600054610100900460ff16158080156109445750600054600160ff909116105b8061095e5750303b15801561095e575060005460ff166001145b6109d05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610716565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610a2e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610a36611137565b610a3f8961088a565b606588905560668790556067869055606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff87161790557f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08849055610aaf83610d45565b610ab761052c565b67ffffffffffffffff168567ffffffffffffffff161015610b1a5760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610716565b606a8290558015610b8257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60335473ffffffffffffffffffffffffffffffffffffffff16331461060c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610716565b60606000610c1d836111bc565b600101905060008167ffffffffffffffff811115610c3d57610c3d611452565b6040519080825280601f01601f191660200182016040528015610c67576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084610c7157509392505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115610ddb5760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610716565b6001816040015160ff1611610e585760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e203100000000000000000000000000000000006064820152608401610716565b6068546080820151825167ffffffffffffffff90921691610e799190611712565b63ffffffff161115610ecd5760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610716565b6000816020015160ff1611610f4a5760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610716565b8051602082015163ffffffff82169160ff90911690610f6a908290611731565b610f74919061177b565b63ffffffff1614610fed5760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610716565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b600054610100900460ff166111b45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610716565b61060c61129f565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611205577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611231576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061124f57662386f26fc10000830492506010015b6305f5e1008310611267576305f5e100830492506008015b612710831061127b57612710830492506004015b6064831061128d576064830492506002015b600a8310611299576001015b92915050565b600054610100900460ff1661131c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610716565b61060c33610cce565b803573ffffffffffffffffffffffffffffffffffffffff8116811461134957600080fd5b919050565b60006020828403121561136057600080fd5b61136982611325565b9392505050565b60005b8381101561138b578181015183820152602001611373565b8381111561139a576000848401525b50505050565b600081518084526113b8816020860160208601611370565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061136960208301846113a0565b6000806040838503121561141057600080fd5b50508035926020909101359150565b803567ffffffffffffffff8116811461134957600080fd5b60006020828403121561144957600080fd5b6113698261141f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b803563ffffffff8116811461134957600080fd5b803560ff8116811461134957600080fd5b80356fffffffffffffffffffffffffffffffff8116811461134957600080fd5b600060c082840312156114d857600080fd5b60405160c0810181811067ffffffffffffffff82111715611522577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290508061153183611481565b815261153f60208401611495565b602082015261155060408401611495565b604082015261156160608401611481565b606082015261157260808401611481565b608082015261158360a084016114a6565b60a08201525092915050565b600060c082840312156115a157600080fd5b61136983836114c6565b6000602082840312156115bd57600080fd5b5035919050565b6000806000806000806000806101a0898b0312156115e157600080fd5b6115ea89611325565b975060208901359650604089013595506060890135945061160d60808a0161141f565b935061161b60a08a01611325565b925061162a8a60c08b016114c6565b915061018089013590509295985092959890939650565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851680830382111561169357611693611641565b01949350505050565b600084516116ae818460208901611370565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516116ea816001850160208a01611370565b60019201918201528351611705816002840160208801611370565b0160020195945050505050565b600063ffffffff80831681851680830382111561169357611693611641565b600063ffffffff8084168061176f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161561179e5761179e611641565b0294935050505056fea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(SystemConfigStorageLayoutJSON), SystemConfigStorageLayout); err != nil { + panic(err) + } + + layouts["SystemConfig"] = SystemConfigStorageLayout + deployedBytecodes["SystemConfig"] = SystemConfigDeployedBin +} diff --git a/op-bindings/bindings/timelock.go b/kroma-bindings/bindings/timelock.go similarity index 87% rename from op-bindings/bindings/timelock.go rename to kroma-bindings/bindings/timelock.go index 50c2f93f9..394e7dab8 100644 --- a/op-bindings/bindings/timelock.go +++ b/kroma-bindings/bindings/timelock.go @@ -32,7 +32,7 @@ var ( // TimeLockMetaData contains all meta data concerning the TimeLock contract. var TimeLockMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"CallExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"CallSalt\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"predecessor\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"delay\",\"type\":\"uint256\"}],\"name\":\"CallScheduled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"name\":\"Cancelled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldDuration\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newDuration\",\"type\":\"uint256\"}],\"name\":\"MinDelayChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CANCELLER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EXECUTOR_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROPOSER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TIMELOCK_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"name\":\"cancel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"predecessor\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"targets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"payloads\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32\",\"name\":\"predecessor\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"executeBatch\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"name\":\"getTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"predecessor\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"hashOperation\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"targets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"payloads\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32\",\"name\":\"predecessor\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"hashOperationBatch\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minDelay\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"_proposers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_executors\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"name\":\"isOperation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"name\":\"isOperationDone\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"name\":\"isOperationPending\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"name\":\"isOperationReady\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"predecessor\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delay\",\"type\":\"uint256\"}],\"name\":\"schedule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"targets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"payloads\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32\",\"name\":\"predecessor\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delay\",\"type\":\"uint256\"}],\"name\":\"scheduleBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newDelay\",\"type\":\"uint256\"}],\"name\":\"updateDelay\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60e060405234801561001057600080fd5b5060016080819052600060a081905260c081905280612dd861004a82396000610a6d01526000610a4401526000610a1b0152612dd86000f3fe6080604052600436106101d15760003560e01c80638065657f116100f7578063bc197c8111610095578063d547741f11610064578063d547741f14610656578063e38335e514610676578063f23a6e6114610689578063f27a0c92146106ce57600080fd5b8063bc197c81146105a4578063c4c4c7b3146105e9578063c4d252f514610609578063d45c44351461062957600080fd5b806391d14854116100d157806391d14854146104e8578063a217fddf1461053b578063b08e51c014610550578063b1c5f4271461058457600080fd5b80638065657f146104745780638f2a0bb0146104945780638f61f4f5146104b457600080fd5b8063248a9ca31161016f57806336568abe1161013e57806336568abe146103f257806354fd4d5014610412578063584b153e1461043457806364d623531461045457600080fd5b8063248a9ca3146103525780632ab0f529146103825780632f2ff15d146103b257806331d50750146103d257600080fd5b80630d3cf6fc116101ab5780630d3cf6fc14610276578063134008d3146102aa57806313bc9f20146102bd578063150b7a02146102dd57600080fd5b806301d5062a146101dd57806301ffc9a7146101ff57806307bd02651461023457600080fd5b366101d857005b600080fd5b3480156101e957600080fd5b506101fd6101f836600461220a565b6106e3565b005b34801561020b57600080fd5b5061021f61021a36600461227f565b6107b9565b60405190151581526020015b60405180910390f35b34801561024057600080fd5b506102687fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6381565b60405190815260200161022b565b34801561028257600080fd5b506102687f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca581565b6101fd6102b83660046122c1565b610815565b3480156102c957600080fd5b5061021f6102d836600461232d565b61090d565b3480156102e957600080fd5b506103216102f8366004612416565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161022b565b34801561035e57600080fd5b5061026861036d36600461232d565b60009081526065602052604090206001015490565b34801561038e57600080fd5b5061021f61039d36600461232d565b60009081526097602052604090205460011490565b3480156103be57600080fd5b506101fd6103cd36600461247e565b610933565b3480156103de57600080fd5b5061021f6103ed36600461232d565b61095d565b3480156103fe57600080fd5b506101fd61040d36600461247e565b610976565b34801561041e57600080fd5b50610427610a14565b60405161022b91906124ce565b34801561044057600080fd5b5061021f61044f36600461232d565b610ab7565b34801561046057600080fd5b506101fd61046f36600461232d565b610ace565b34801561048057600080fd5b5061026861048f3660046122c1565b610b84565b3480156104a057600080fd5b506101fd6104af366004612546565b610bc3565b3480156104c057600080fd5b506102687fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc181565b3480156104f457600080fd5b5061021f61050336600461247e565b600091825260656020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b34801561054757600080fd5b50610268600081565b34801561055c57600080fd5b506102687ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f78381565b34801561059057600080fd5b5061026861059f3660046125f8565b610e02565b3480156105b057600080fd5b506103216105bf366004612730565b7fbc197c810000000000000000000000000000000000000000000000000000000095945050505050565b3480156105f557600080fd5b506101fd61060436600461283c565b610e47565b34801561061557600080fd5b506101fd61062436600461232d565b610fc7565b34801561063557600080fd5b5061026861064436600461232d565b60009081526097602052604090205490565b34801561066257600080fd5b506101fd61067136600461247e565b6110a8565b6101fd6106843660046125f8565b6110cd565b34801561069557600080fd5b506103216106a43660046128ba565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b3480156106da57600080fd5b50609854610268565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc161070d81611346565b600061071d898989898989610b84565b90506107298184611353565b6000817f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8b8b8b8b8b8a6040516107659695949392919061294a565b60405180910390a383156107ae57807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d0387856040516107a591815260200190565b60405180910390a25b505050505050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000148061080f575061080f82611467565b92915050565b600080527f7dc9f88e569f94faad6fa0d44dd44858caf3f34f1bd1c985800aedf5793aad8b6020527fa01e231ca478cf51f663e103939e98de36fa76d3e4e0b1de673dc711acc3a01b547fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e639060ff166108925761089281336114fe565b60006108a2888888888888610b84565b90506108ae8185611580565b6108ba88888888611688565b6000817fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b588a8a8a8a6040516108f29493929190612995565b60405180910390a36109038161176b565b5050505050505050565b60008181526097602052604081205460018111801561092c5750428111155b9392505050565b60008281526065602052604090206001015461094e81611346565b61095883836117fa565b505050565b60008181526097602052604081205481905b1192915050565b73ffffffffffffffffffffffffffffffffffffffff81163314610a065760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b610a1082826118ee565b5050565b6060610a3f7f00000000000000000000000000000000000000000000000000000000000000006119a9565b610a687f00000000000000000000000000000000000000000000000000000000000000006119a9565b610a917f00000000000000000000000000000000000000000000000000000000000000006119a9565b604051602001610aa3939291906129d5565b604051602081830303815290604052905090565b60008181526097602052604081205460019061096f565b333014610b435760405162461bcd60e51b815260206004820152602b60248201527f54696d656c6f636b436f6e74726f6c6c65723a2063616c6c6572206d7573742060448201527f62652074696d656c6f636b00000000000000000000000000000000000000000060648201526084016109fd565b60985460408051918252602082018390527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a1609855565b6000868686868686604051602001610ba19695949392919061294a565b6040516020818303038152906040528051906020012090509695505050505050565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1610bed81611346565b888714610c625760405162461bcd60e51b815260206004820152602360248201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d6160448201527f746368000000000000000000000000000000000000000000000000000000000060648201526084016109fd565b888514610cd75760405162461bcd60e51b815260206004820152602360248201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d6160448201527f746368000000000000000000000000000000000000000000000000000000000060648201526084016109fd565b6000610ce98b8b8b8b8b8b8b8b610e02565b9050610cf58184611353565b60005b8a811015610db35780827f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8e8e85818110610d3557610d35612a4b565b9050602002016020810190610d4a9190612a7a565b8d8d86818110610d5c57610d5c612a4b565b905060200201358c8c87818110610d7557610d75612a4b565b9050602002810190610d879190612a95565b8c8b604051610d9b9695949392919061294a565b60405180910390a3610dac81612b29565b9050610cf8565b508315610df557807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d038785604051610dec91815260200190565b60405180910390a25b5050505050505050505050565b60008888888888888888604051602001610e23989796959493929190612c14565b60405160208183030381529060405280519060200120905098975050505050505050565b600054610100900460ff1615808015610e675750600054600160ff909116105b80610e815750303b158015610e81575060005460ff166001145b610ef35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109fd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610f5157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610f5d85858585611a67565b8015610fc057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783610ff181611346565b610ffa82610ab7565b61106c5760405162461bcd60e51b815260206004820152603160248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20636160448201527f6e6e6f742062652063616e63656c6c656400000000000000000000000000000060648201526084016109fd565b6000828152609760205260408082208290555183917fbaa1eb22f2a492ba1a5fea61b8df4d27c6c8b5f3971e63bb58fa14ff72eedb7091a25050565b6000828152606560205260409020600101546110c381611346565b61095883836118ee565b600080527f7dc9f88e569f94faad6fa0d44dd44858caf3f34f1bd1c985800aedf5793aad8b6020527fa01e231ca478cf51f663e103939e98de36fa76d3e4e0b1de673dc711acc3a01b547fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e639060ff1661114a5761114a81336114fe565b8786146111bf5760405162461bcd60e51b815260206004820152602360248201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d6160448201527f746368000000000000000000000000000000000000000000000000000000000060648201526084016109fd565b8784146112345760405162461bcd60e51b815260206004820152602360248201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d6160448201527f746368000000000000000000000000000000000000000000000000000000000060648201526084016109fd565b60006112468a8a8a8a8a8a8a8a610e02565b90506112528185611580565b60005b898110156113305760008b8b8381811061127157611271612a4b565b90506020020160208101906112869190612a7a565b905060008a8a8481811061129c5761129c612a4b565b9050602002013590503660008a8a868181106112ba576112ba612a4b565b90506020028101906112cc9190612a95565b915091506112dc84848484611688565b84867fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b58868686866040516113139493929190612995565b60405180910390a3505050508061132990612b29565b9050611255565b5061133a8161176b565b50505050505050505050565b61135081336114fe565b50565b61135c8261095d565b156113cf5760405162461bcd60e51b815260206004820152602f60248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20616c60448201527f7265616479207363686564756c6564000000000000000000000000000000000060648201526084016109fd565b6098548110156114475760405162461bcd60e51b815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a20696e73756666696369656e7460448201527f2064656c6179000000000000000000000000000000000000000000000000000060648201526084016109fd565b6114518142612cdb565b6000928352609760205260409092209190915550565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061080f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461080f565b600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610a105761153e81611af6565b611549836020611b15565b60405160200161155a929190612cee565b60408051601f198184030181529082905262461bcd60e51b82526109fd916004016124ce565b6115898261090d565b6115fb5760405162461bcd60e51b815260206004820152602a60248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20697360448201527f206e6f742072656164790000000000000000000000000000000000000000000060648201526084016109fd565b80158061161657506000818152609760205260409020546001145b610a105760405162461bcd60e51b815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a206d697373696e67206465706560448201527f6e64656e6379000000000000000000000000000000000000000000000000000060648201526084016109fd565b60008473ffffffffffffffffffffffffffffffffffffffff168484846040516116b2929190612d6f565b60006040518083038185875af1925050503d80600081146116ef576040519150601f19603f3d011682016040523d82523d6000602084013e6116f4565b606091505b5050905080610fc05760405162461bcd60e51b815260206004820152603360248201527f54696d656c6f636b436f6e74726f6c6c65723a20756e6465726c79696e67207460448201527f72616e73616374696f6e2072657665727465640000000000000000000000000060648201526084016109fd565b6117748161090d565b6117e65760405162461bcd60e51b815260206004820152602a60248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20697360448201527f206e6f742072656164790000000000000000000000000000000000000000000060648201526084016109fd565b600090815260976020526040902060019055565b600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610a1057600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118903390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1615610a1057600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b606060006119b683611d3e565b600101905060008167ffffffffffffffff8111156119d6576119d6612346565b6040519080825280601f01601f191660200182016040528015611a00576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084611a0a57509392505050565b600054610100900460ff16611ae45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109fd565b611af084848484611e20565b50505050565b606061080f73ffffffffffffffffffffffffffffffffffffffff831660145b60606000611b24836002612d7f565b611b2f906002612cdb565b67ffffffffffffffff811115611b4757611b47612346565b6040519080825280601f01601f191660200182016040528015611b71576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611ba857611ba8612a4b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611c0b57611c0b612a4b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000611c47846002612d7f565b611c52906001612cdb565b90505b6001811115611cef577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110611c9357611c93612a4b565b1a60f81b828281518110611ca957611ca9612a4b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93611ce881612d96565b9050611c55565b50831561092c5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016109fd565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611d87577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611db3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611dd157662386f26fc10000830492506010015b6305f5e1008310611de9576305f5e100830492506008015b6127108310611dfd57612710830492506004015b60648310611e0f576064830492506002015b600a831061080f5760010192915050565b600054610100900460ff16611e9d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109fd565b611ec77f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca580612143565b611f117fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc17f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5612143565b611f5b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e637f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5612143565b611fa57ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f7837f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5612143565b611fcf7f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca53061218e565b73ffffffffffffffffffffffffffffffffffffffff811615612015576120157f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca58261218e565b60005b83518110156120aa576120647fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc185838151811061205757612057612a4b565b602002602001015161218e565b61209a7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f78385838151811061205757612057612a4b565b6120a381612b29565b9050612018565b5060005b82518110156120fd576120ed7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6384838151811061205757612057612a4b565b6120f681612b29565b90506120ae565b5060988490556040805160008152602081018690527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a150505050565b600082815260656020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b610a1082826117fa565b803573ffffffffffffffffffffffffffffffffffffffff811681146121bc57600080fd5b919050565b60008083601f8401126121d357600080fd5b50813567ffffffffffffffff8111156121eb57600080fd5b60208301915083602082850101111561220357600080fd5b9250929050565b600080600080600080600060c0888a03121561222557600080fd5b61222e88612198565b965060208801359550604088013567ffffffffffffffff81111561225157600080fd5b61225d8a828b016121c1565b989b979a50986060810135976080820135975060a09091013595509350505050565b60006020828403121561229157600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461092c57600080fd5b60008060008060008060a087890312156122da57600080fd5b6122e387612198565b955060208701359450604087013567ffffffffffffffff81111561230657600080fd5b61231289828a016121c1565b979a9699509760608101359660809091013595509350505050565b60006020828403121561233f57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561239e5761239e612346565b604052919050565b600082601f8301126123b757600080fd5b813567ffffffffffffffff8111156123d1576123d1612346565b6123e46020601f19601f84011601612375565b8181528460208386010111156123f957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561242c57600080fd5b61243585612198565b935061244360208601612198565b925060408501359150606085013567ffffffffffffffff81111561246657600080fd5b612472878288016123a6565b91505092959194509250565b6000806040838503121561249157600080fd5b823591506124a160208401612198565b90509250929050565b60005b838110156124c55781810151838201526020016124ad565b50506000910152565b60208152600082518060208401526124ed8160408501602087016124aa565b601f01601f19169190910160400192915050565b60008083601f84011261251357600080fd5b50813567ffffffffffffffff81111561252b57600080fd5b6020830191508360208260051b850101111561220357600080fd5b600080600080600080600080600060c08a8c03121561256457600080fd5b893567ffffffffffffffff8082111561257c57600080fd5b6125888d838e01612501565b909b50995060208c01359150808211156125a157600080fd5b6125ad8d838e01612501565b909950975060408c01359150808211156125c657600080fd5b506125d38c828d01612501565b9a9d999c50979a969997986060880135976080810135975060a0013595509350505050565b60008060008060008060008060a0898b03121561261457600080fd5b883567ffffffffffffffff8082111561262c57600080fd5b6126388c838d01612501565b909a50985060208b013591508082111561265157600080fd5b61265d8c838d01612501565b909850965060408b013591508082111561267657600080fd5b506126838b828c01612501565b999c989b509699959896976060870135966080013595509350505050565b600067ffffffffffffffff8211156126bb576126bb612346565b5060051b60200190565b600082601f8301126126d657600080fd5b813560206126eb6126e6836126a1565b612375565b82815260059290921b8401810191818101908684111561270a57600080fd5b8286015b84811015612725578035835291830191830161270e565b509695505050505050565b600080600080600060a0868803121561274857600080fd5b61275186612198565b945061275f60208701612198565b9350604086013567ffffffffffffffff8082111561277c57600080fd5b61278889838a016126c5565b9450606088013591508082111561279e57600080fd5b6127aa89838a016126c5565b935060808801359150808211156127c057600080fd5b506127cd888289016123a6565b9150509295509295909350565b600082601f8301126127eb57600080fd5b813560206127fb6126e6836126a1565b82815260059290921b8401810191818101908684111561281a57600080fd5b8286015b848110156127255761282f81612198565b835291830191830161281e565b6000806000806080858703121561285257600080fd5b84359350602085013567ffffffffffffffff8082111561287157600080fd5b61287d888389016127da565b9450604087013591508082111561289357600080fd5b506128a0878288016127da565b9250506128af60608601612198565b905092959194509250565b600080600080600060a086880312156128d257600080fd5b6128db86612198565b94506128e960208701612198565b93506040860135925060608601359150608086013567ffffffffffffffff81111561291357600080fd5b6127cd888289016123a6565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8716815285602082015260a06040820152600061298060a08301868861291f565b60608301949094525060800152949350505050565b73ffffffffffffffffffffffffffffffffffffffff851681528360208201526060604082015260006129cb60608301848661291f565b9695505050505050565b600084516129e78184602089016124aa565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612a23816001850160208a016124aa565b60019201918201528351612a3e8160028401602088016124aa565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215612a8c57600080fd5b61092c82612198565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612aca57600080fd5b83018035915067ffffffffffffffff821115612ae557600080fd5b60200191503681900382131561220357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b5a57612b5a612afa565b5060010190565b60008383855260208086019550808560051b8301018460005b87811015612c0757601f1985840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112612bbd57600080fd5b8701848101903567ffffffffffffffff811115612bd957600080fd5b803603821315612be857600080fd5b612bf385828461291f565b9a86019a9450505090830190600101612b7a565b5090979650505050505050565b60a0808252810188905260008960c08301825b8b811015612c625773ffffffffffffffffffffffffffffffffffffffff612c4d84612198565b16825260209283019290910190600101612c27565b5083810360208501528881527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff891115612c9b57600080fd5b8860051b9150818a60208301370182810360209081016040850152612cc39082018789612b61565b60608401959095525050608001529695505050505050565b8082018082111561080f5761080f612afa565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612d268160178501602088016124aa565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351612d638160288401602088016124aa565b01602801949350505050565b8183823760009101908152919050565b808202811582820484141761080f5761080f612afa565b600081612da557612da5612afa565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea164736f6c6343000813000a", + Bin: "0x60e060405234801561001057600080fd5b5060016080819052600060a081905260c081905280612ea861004a82396000610a6d01526000610a4401526000610a1b0152612ea86000f3fe6080604052600436106101d15760003560e01c80638065657f116100f7578063bc197c8111610095578063d547741f11610064578063d547741f14610656578063e38335e514610676578063f23a6e6114610689578063f27a0c92146106ce57600080fd5b8063bc197c81146105a4578063c4c4c7b3146105e9578063c4d252f514610609578063d45c44351461062957600080fd5b806391d14854116100d157806391d14854146104e8578063a217fddf1461053b578063b08e51c014610550578063b1c5f4271461058457600080fd5b80638065657f146104745780638f2a0bb0146104945780638f61f4f5146104b457600080fd5b8063248a9ca31161016f57806336568abe1161013e57806336568abe146103f257806354fd4d5014610412578063584b153e1461043457806364d623531461045457600080fd5b8063248a9ca3146103525780632ab0f529146103825780632f2ff15d146103b257806331d50750146103d257600080fd5b80630d3cf6fc116101ab5780630d3cf6fc14610276578063134008d3146102aa57806313bc9f20146102bd578063150b7a02146102dd57600080fd5b806301d5062a146101dd57806301ffc9a7146101ff57806307bd02651461023457600080fd5b366101d857005b600080fd5b3480156101e957600080fd5b506101fd6101f8366004612228565b6106e3565b005b34801561020b57600080fd5b5061021f61021a36600461229d565b6107b9565b60405190151581526020015b60405180910390f35b34801561024057600080fd5b506102687fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6381565b60405190815260200161022b565b34801561028257600080fd5b506102687f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca581565b6101fd6102b83660046122df565b610815565b3480156102c957600080fd5b5061021f6102d836600461234b565b61090d565b3480156102e957600080fd5b506103216102f8366004612470565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161022b565b34801561035e57600080fd5b5061026861036d36600461234b565b60009081526065602052604090206001015490565b34801561038e57600080fd5b5061021f61039d36600461234b565b60009081526097602052604090205460011490565b3480156103be57600080fd5b506101fd6103cd3660046124d8565b610933565b3480156103de57600080fd5b5061021f6103ed36600461234b565b61095d565b3480156103fe57600080fd5b506101fd61040d3660046124d8565b610976565b34801561041e57600080fd5b50610427610a14565b60405161022b9190612530565b34801561044057600080fd5b5061021f61044f36600461234b565b610ab7565b34801561046057600080fd5b506101fd61046f36600461234b565b610ace565b34801561048057600080fd5b5061026861048f3660046122df565b610b84565b3480156104a057600080fd5b506101fd6104af3660046125c6565b610bc3565b3480156104c057600080fd5b506102687fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc181565b3480156104f457600080fd5b5061021f6105033660046124d8565b600091825260656020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b34801561054757600080fd5b50610268600081565b34801561055c57600080fd5b506102687ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f78381565b34801561059057600080fd5b5061026861059f366004612678565b610e02565b3480156105b057600080fd5b506103216105bf3660046127b0565b7fbc197c810000000000000000000000000000000000000000000000000000000095945050505050565b3480156105f557600080fd5b506101fd6106043660046128bc565b610e47565b34801561061557600080fd5b506101fd61062436600461234b565b610fc7565b34801561063557600080fd5b5061026861064436600461234b565b60009081526097602052604090205490565b34801561066257600080fd5b506101fd6106713660046124d8565b6110a8565b6101fd610684366004612678565b6110cd565b34801561069557600080fd5b506103216106a436600461293a565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b3480156106da57600080fd5b50609854610268565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc161070d81611346565b600061071d898989898989610b84565b90506107298184611353565b6000817f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8b8b8b8b8b8a604051610765969594939291906129e8565b60405180910390a383156107ae57807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d0387856040516107a591815260200190565b60405180910390a25b505050505050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000148061080f575061080f82611467565b92915050565b600080527f7dc9f88e569f94faad6fa0d44dd44858caf3f34f1bd1c985800aedf5793aad8b6020527fa01e231ca478cf51f663e103939e98de36fa76d3e4e0b1de673dc711acc3a01b547fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e639060ff166108925761089281336114fe565b60006108a2888888888888610b84565b90506108ae818561159e565b6108ba888888886116a6565b6000817fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b588a8a8a8a6040516108f29493929190612a33565b60405180910390a361090381611789565b5050505050505050565b60008181526097602052604081205460018111801561092c5750428111155b9392505050565b60008281526065602052604090206001015461094e81611346565b6109588383611818565b505050565b60008181526097602052604081205481905b1192915050565b73ffffffffffffffffffffffffffffffffffffffff81163314610a065760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b610a10828261190c565b5050565b6060610a3f7f00000000000000000000000000000000000000000000000000000000000000006119c7565b610a687f00000000000000000000000000000000000000000000000000000000000000006119c7565b610a917f00000000000000000000000000000000000000000000000000000000000000006119c7565b604051602001610aa393929190612a73565b604051602081830303815290604052905090565b60008181526097602052604081205460019061096f565b333014610b435760405162461bcd60e51b815260206004820152602b60248201527f54696d656c6f636b436f6e74726f6c6c65723a2063616c6c6572206d7573742060448201527f62652074696d656c6f636b00000000000000000000000000000000000000000060648201526084016109fd565b60985460408051918252602082018390527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a1609855565b6000868686868686604051602001610ba1969594939291906129e8565b6040516020818303038152906040528051906020012090509695505050505050565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1610bed81611346565b888714610c625760405162461bcd60e51b815260206004820152602360248201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d6160448201527f746368000000000000000000000000000000000000000000000000000000000060648201526084016109fd565b888514610cd75760405162461bcd60e51b815260206004820152602360248201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d6160448201527f746368000000000000000000000000000000000000000000000000000000000060648201526084016109fd565b6000610ce98b8b8b8b8b8b8b8b610e02565b9050610cf58184611353565b60005b8a811015610db35780827f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8e8e85818110610d3557610d35612ae9565b9050602002016020810190610d4a9190612b18565b8d8d86818110610d5c57610d5c612ae9565b905060200201358c8c87818110610d7557610d75612ae9565b9050602002810190610d879190612b33565b8c8b604051610d9b969594939291906129e8565b60405180910390a3610dac81612bc7565b9050610cf8565b508315610df557807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d038785604051610dec91815260200190565b60405180910390a25b5050505050505050505050565b60008888888888888888604051602001610e23989796959493929190612caf565b60405160208183030381529060405280519060200120905098975050505050505050565b600054610100900460ff1615808015610e675750600054600160ff909116105b80610e815750303b158015610e81575060005460ff166001145b610ef35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109fd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610f5157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610f5d85858585611a85565b8015610fc057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783610ff181611346565b610ffa82610ab7565b61106c5760405162461bcd60e51b815260206004820152603160248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20636160448201527f6e6e6f742062652063616e63656c6c656400000000000000000000000000000060648201526084016109fd565b6000828152609760205260408082208290555183917fbaa1eb22f2a492ba1a5fea61b8df4d27c6c8b5f3971e63bb58fa14ff72eedb7091a25050565b6000828152606560205260409020600101546110c381611346565b610958838361190c565b600080527f7dc9f88e569f94faad6fa0d44dd44858caf3f34f1bd1c985800aedf5793aad8b6020527fa01e231ca478cf51f663e103939e98de36fa76d3e4e0b1de673dc711acc3a01b547fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e639060ff1661114a5761114a81336114fe565b8786146111bf5760405162461bcd60e51b815260206004820152602360248201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d6160448201527f746368000000000000000000000000000000000000000000000000000000000060648201526084016109fd565b8784146112345760405162461bcd60e51b815260206004820152602360248201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d6160448201527f746368000000000000000000000000000000000000000000000000000000000060648201526084016109fd565b60006112468a8a8a8a8a8a8a8a610e02565b9050611252818561159e565b60005b898110156113305760008b8b8381811061127157611271612ae9565b90506020020160208101906112869190612b18565b905060008a8a8481811061129c5761129c612ae9565b9050602002013590503660008a8a868181106112ba576112ba612ae9565b90506020028101906112cc9190612b33565b915091506112dc848484846116a6565b84867fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b58868686866040516113139493929190612a33565b60405180910390a3505050508061132990612bc7565b9050611255565b5061133a81611789565b50505050505050505050565b61135081336114fe565b50565b61135c8261095d565b156113cf5760405162461bcd60e51b815260206004820152602f60248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20616c60448201527f7265616479207363686564756c6564000000000000000000000000000000000060648201526084016109fd565b6098548110156114475760405162461bcd60e51b815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a20696e73756666696369656e7460448201527f2064656c6179000000000000000000000000000000000000000000000000000060648201526084016109fd565b6114518142612d80565b6000928352609760205260409092209190915550565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061080f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461080f565b600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610a105761153e81611b14565b611549836020611b33565b60405160200161155a929190612d98565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262461bcd60e51b82526109fd91600401612530565b6115a78261090d565b6116195760405162461bcd60e51b815260206004820152602a60248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20697360448201527f206e6f742072656164790000000000000000000000000000000000000000000060648201526084016109fd565b80158061163457506000818152609760205260409020546001145b610a105760405162461bcd60e51b815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a206d697373696e67206465706560448201527f6e64656e6379000000000000000000000000000000000000000000000000000060648201526084016109fd565b60008473ffffffffffffffffffffffffffffffffffffffff168484846040516116d0929190612e19565b60006040518083038185875af1925050503d806000811461170d576040519150601f19603f3d011682016040523d82523d6000602084013e611712565b606091505b5050905080610fc05760405162461bcd60e51b815260206004820152603360248201527f54696d656c6f636b436f6e74726f6c6c65723a20756e6465726c79696e67207460448201527f72616e73616374696f6e2072657665727465640000000000000000000000000060648201526084016109fd565b6117928161090d565b6118045760405162461bcd60e51b815260206004820152602a60248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20697360448201527f206e6f742072656164790000000000000000000000000000000000000000000060648201526084016109fd565b600090815260976020526040902060019055565b600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610a1057600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118ae3390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1615610a1057600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b606060006119d483611d5c565b600101905060008167ffffffffffffffff8111156119f4576119f4612364565b6040519080825280601f01601f191660200182016040528015611a1e576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084611a2857509392505050565b600054610100900460ff16611b025760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109fd565b611b0e84848484611e3e565b50505050565b606061080f73ffffffffffffffffffffffffffffffffffffffff831660145b60606000611b42836002612e29565b611b4d906002612d80565b67ffffffffffffffff811115611b6557611b65612364565b6040519080825280601f01601f191660200182016040528015611b8f576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611bc657611bc6612ae9565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611c2957611c29612ae9565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000611c65846002612e29565b611c70906001612d80565b90505b6001811115611d0d577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110611cb157611cb1612ae9565b1a60f81b828281518110611cc757611cc7612ae9565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93611d0681612e66565b9050611c73565b50831561092c5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016109fd565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611da5577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611dd1576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611def57662386f26fc10000830492506010015b6305f5e1008310611e07576305f5e100830492506008015b6127108310611e1b57612710830492506004015b60648310611e2d576064830492506002015b600a831061080f5760010192915050565b600054610100900460ff16611ebb5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109fd565b611ee57f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca580612161565b611f2f7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc17f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5612161565b611f797fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e637f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5612161565b611fc37ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f7837f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5612161565b611fed7f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5306121ac565b73ffffffffffffffffffffffffffffffffffffffff811615612033576120337f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5826121ac565b60005b83518110156120c8576120827fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc185838151811061207557612075612ae9565b60200260200101516121ac565b6120b87ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f78385838151811061207557612075612ae9565b6120c181612bc7565b9050612036565b5060005b825181101561211b5761210b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6384838151811061207557612075612ae9565b61211481612bc7565b90506120cc565b5060988490556040805160008152602081018690527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a150505050565b600082815260656020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b610a108282611818565b803573ffffffffffffffffffffffffffffffffffffffff811681146121da57600080fd5b919050565b60008083601f8401126121f157600080fd5b50813567ffffffffffffffff81111561220957600080fd5b60208301915083602082850101111561222157600080fd5b9250929050565b600080600080600080600060c0888a03121561224357600080fd5b61224c886121b6565b965060208801359550604088013567ffffffffffffffff81111561226f57600080fd5b61227b8a828b016121df565b989b979a50986060810135976080820135975060a09091013595509350505050565b6000602082840312156122af57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461092c57600080fd5b60008060008060008060a087890312156122f857600080fd5b612301876121b6565b955060208701359450604087013567ffffffffffffffff81111561232457600080fd5b61233089828a016121df565b979a9699509760608101359660809091013595509350505050565b60006020828403121561235d57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156123da576123da612364565b604052919050565b600082601f8301126123f357600080fd5b813567ffffffffffffffff81111561240d5761240d612364565b61243e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612393565b81815284602083860101111561245357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561248657600080fd5b61248f856121b6565b935061249d602086016121b6565b925060408501359150606085013567ffffffffffffffff8111156124c057600080fd5b6124cc878288016123e2565b91505092959194509250565b600080604083850312156124eb57600080fd5b823591506124fb602084016121b6565b90509250929050565b60005b8381101561251f578181015183820152602001612507565b83811115611b0e5750506000910152565b602081526000825180602084015261254f816040850160208701612504565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008083601f84011261259357600080fd5b50813567ffffffffffffffff8111156125ab57600080fd5b6020830191508360208260051b850101111561222157600080fd5b600080600080600080600080600060c08a8c0312156125e457600080fd5b893567ffffffffffffffff808211156125fc57600080fd5b6126088d838e01612581565b909b50995060208c013591508082111561262157600080fd5b61262d8d838e01612581565b909950975060408c013591508082111561264657600080fd5b506126538c828d01612581565b9a9d999c50979a969997986060880135976080810135975060a0013595509350505050565b60008060008060008060008060a0898b03121561269457600080fd5b883567ffffffffffffffff808211156126ac57600080fd5b6126b88c838d01612581565b909a50985060208b01359150808211156126d157600080fd5b6126dd8c838d01612581565b909850965060408b01359150808211156126f657600080fd5b506127038b828c01612581565b999c989b509699959896976060870135966080013595509350505050565b600067ffffffffffffffff82111561273b5761273b612364565b5060051b60200190565b600082601f83011261275657600080fd5b8135602061276b61276683612721565b612393565b82815260059290921b8401810191818101908684111561278a57600080fd5b8286015b848110156127a5578035835291830191830161278e565b509695505050505050565b600080600080600060a086880312156127c857600080fd5b6127d1866121b6565b94506127df602087016121b6565b9350604086013567ffffffffffffffff808211156127fc57600080fd5b61280889838a01612745565b9450606088013591508082111561281e57600080fd5b61282a89838a01612745565b9350608088013591508082111561284057600080fd5b5061284d888289016123e2565b9150509295509295909350565b600082601f83011261286b57600080fd5b8135602061287b61276683612721565b82815260059290921b8401810191818101908684111561289a57600080fd5b8286015b848110156127a5576128af816121b6565b835291830191830161289e565b600080600080608085870312156128d257600080fd5b84359350602085013567ffffffffffffffff808211156128f157600080fd5b6128fd8883890161285a565b9450604087013591508082111561291357600080fd5b506129208782880161285a565b92505061292f606086016121b6565b905092959194509250565b600080600080600060a0868803121561295257600080fd5b61295b866121b6565b9450612969602087016121b6565b93506040860135925060608601359150608086013567ffffffffffffffff81111561299357600080fd5b61284d888289016123e2565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8716815285602082015260a060408201526000612a1e60a08301868861299f565b60608301949094525060800152949350505050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000612a6960608301848661299f565b9695505050505050565b60008451612a85818460208901612504565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612ac1816001850160208a01612504565b60019201918201528351612adc816002840160208801612504565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215612b2a57600080fd5b61092c826121b6565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612b6857600080fd5b83018035915067ffffffffffffffff821115612b8357600080fd5b60200191503681900382131561222157600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612bf857612bf8612b98565b5060010190565b81835260006020808501808196508560051b810191508460005b87811015612ca257828403895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112612c5857600080fd5b8701858101903567ffffffffffffffff811115612c7457600080fd5b803603821315612c8357600080fd5b612c8e86828461299f565b9a87019a9550505090840190600101612c19565b5091979650505050505050565b60a0808252810188905260008960c08301825b8b811015612cfd5773ffffffffffffffffffffffffffffffffffffffff612ce8846121b6565b16825260209283019290910190600101612cc2565b5083810360208501528881527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff891115612d3657600080fd5b8860051b9150818a602083013781810191505060208101600081526020848303016040850152612d6781888a612bff565b6060850196909652505050608001529695505050505050565b60008219821115612d9357612d93612b98565b500190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612dd0816017850160208801612504565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351612e0d816028840160208801612504565b01602801949350505050565b8183823760009101908152919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612e6157612e61612b98565b500290565b600081612e7557612e75612b98565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea164736f6c634300080f000a", } // TimeLockABI is the input ABI used to generate the binding from. diff --git a/op-bindings/bindings/timelock_more.go b/kroma-bindings/bindings/timelock_more.go similarity index 90% rename from op-bindings/bindings/timelock_more.go rename to kroma-bindings/bindings/timelock_more.go index 4674928c2..522a248c6 100644 --- a/op-bindings/bindings/timelock_more.go +++ b/kroma-bindings/bindings/timelock_more.go @@ -9,7 +9,7 @@ import ( "github.com/ethereum-optimism/optimism/op-bindings/solc" ) -const TimeLockStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/governance/TimeLock.sol:TimeLock\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/governance/TimeLock.sol:TimeLock\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/governance/TimeLock.sol:TimeLock\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)1011_storage\"},{\"astId\":1003,\"contract\":\"contracts/governance/TimeLock.sol:TimeLock\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_array(t_uint256)1011_storage\"},{\"astId\":1004,\"contract\":\"contracts/governance/TimeLock.sol:TimeLock\",\"label\":\"_roles\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_mapping(t_bytes32,t_struct(RoleData)1012_storage)\"},{\"astId\":1005,\"contract\":\"contracts/governance/TimeLock.sol:TimeLock\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_array(t_uint256)1010_storage\"},{\"astId\":1006,\"contract\":\"contracts/governance/TimeLock.sol:TimeLock\",\"label\":\"_timestamps\",\"offset\":0,\"slot\":\"151\",\"type\":\"t_mapping(t_bytes32,t_uint256)\"},{\"astId\":1007,\"contract\":\"contracts/governance/TimeLock.sol:TimeLock\",\"label\":\"_minDelay\",\"offset\":0,\"slot\":\"152\",\"type\":\"t_uint256\"},{\"astId\":1008,\"contract\":\"contracts/governance/TimeLock.sol:TimeLock\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"153\",\"type\":\"t_array(t_uint256)1009_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)1009_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[48]\",\"numberOfBytes\":\"1536\"},\"t_array(t_uint256)1010_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\"},\"t_array(t_uint256)1011_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_address,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_bool\"},\"t_mapping(t_bytes32,t_struct(RoleData)1012_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e struct AccessControlUpgradeable.RoleData)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_struct(RoleData)1012_storage\"},\"t_mapping(t_bytes32,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_uint256\"},\"t_struct(RoleData)1012_storage\":{\"encoding\":\"inplace\",\"label\":\"struct AccessControlUpgradeable.RoleData\",\"numberOfBytes\":\"64\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" +const TimeLockStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/governance/TimeLock.sol:TimeLock\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/governance/TimeLock.sol:TimeLock\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/governance/TimeLock.sol:TimeLock\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)50_storage\"},{\"astId\":1003,\"contract\":\"contracts/governance/TimeLock.sol:TimeLock\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_array(t_uint256)50_storage\"},{\"astId\":1004,\"contract\":\"contracts/governance/TimeLock.sol:TimeLock\",\"label\":\"_roles\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_mapping(t_bytes32,t_struct(RoleData)1009_storage)\"},{\"astId\":1005,\"contract\":\"contracts/governance/TimeLock.sol:TimeLock\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_array(t_uint256)49_storage\"},{\"astId\":1006,\"contract\":\"contracts/governance/TimeLock.sol:TimeLock\",\"label\":\"_timestamps\",\"offset\":0,\"slot\":\"151\",\"type\":\"t_mapping(t_bytes32,t_uint256)\"},{\"astId\":1007,\"contract\":\"contracts/governance/TimeLock.sol:TimeLock\",\"label\":\"_minDelay\",\"offset\":0,\"slot\":\"152\",\"type\":\"t_uint256\"},{\"astId\":1008,\"contract\":\"contracts/governance/TimeLock.sol:TimeLock\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"153\",\"type\":\"t_array(t_uint256)48_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)48_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[48]\",\"numberOfBytes\":\"1536\",\"base\":\"t_uint256\"},\"t_array(t_uint256)49_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\",\"base\":\"t_uint256\"},\"t_array(t_uint256)50_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\",\"base\":\"t_uint256\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_address,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_bool\"},\"t_mapping(t_bytes32,t_struct(RoleData)1009_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e struct AccessControlUpgradeable.RoleData)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_struct(RoleData)1009_storage\"},\"t_mapping(t_bytes32,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_uint256\"},\"t_struct(RoleData)1009_storage\":{\"encoding\":\"inplace\",\"label\":\"struct AccessControlUpgradeable.RoleData\",\"numberOfBytes\":\"64\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" var TimeLockStorageLayout = new(solc.StorageLayout) diff --git a/op-bindings/bindings/types.go b/kroma-bindings/bindings/types.go old mode 100755 new mode 100644 similarity index 100% rename from op-bindings/bindings/types.go rename to kroma-bindings/bindings/types.go index d06feecb7..098009ad1 --- a/op-bindings/bindings/types.go +++ b/kroma-bindings/bindings/types.go @@ -56,6 +56,17 @@ type TypesPublicInput struct { TxHashes [][32]byte } +// TypesPublicInputProof is an auto generated low-level Go binding around an user-defined struct. +type TypesPublicInputProof struct { + SrcOutputRootProof TypesOutputRootProof + DstOutputRootProof TypesOutputRootProof + PublicInput TypesPublicInput + Rlps TypesBlockHeaderRLP + L2ToL1MessagePasserBalance [32]byte + L2ToL1MessagePasserCodeHash [32]byte + MerkleProof [][]byte +} + // TypesWithdrawalTransaction is an auto generated low-level Go binding around an user-defined struct. type TypesWithdrawalTransaction struct { Nonce *big.Int @@ -79,14 +90,3 @@ type TypesBond struct { Amount *big.Int ExpiresAt *big.Int } - -// TypesPublicInputProof is an auto generated low-level Go binding around an user-defined struct. -type TypesPublicInputProof struct { - SrcOutputRootProof TypesOutputRootProof - DstOutputRootProof TypesOutputRootProof - PublicInput TypesPublicInput - Rlps TypesBlockHeaderRLP - L2ToL1MessagePasserBalance [32]byte - L2ToL1MessagePasserCodeHash [32]byte - MerkleProof [][]byte -} diff --git a/op-bindings/bindings/upgradegovernor.go b/kroma-bindings/bindings/upgradegovernor.go similarity index 87% rename from op-bindings/bindings/upgradegovernor.go rename to kroma-bindings/bindings/upgradegovernor.go index 9d933c104..395ff12af 100644 --- a/op-bindings/bindings/upgradegovernor.go +++ b/kroma-bindings/bindings/upgradegovernor.go @@ -32,7 +32,7 @@ var ( // UpgradeGovernorMetaData contains all meta data concerning the UpgradeGovernor contract. var UpgradeGovernorMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"Empty\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"ProposalCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proposer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"targets\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"string[]\",\"name\":\"signatures\",\"type\":\"string[]\"},{\"indexed\":false,\"internalType\":\"bytes[]\",\"name\":\"calldatas\",\"type\":\"bytes[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"voteStart\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"voteEnd\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"}],\"name\":\"ProposalCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"ProposalExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"eta\",\"type\":\"uint256\"}],\"name\":\"ProposalQueued\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldProposalThreshold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newProposalThreshold\",\"type\":\"uint256\"}],\"name\":\"ProposalThresholdSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldQuorumNumerator\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newQuorumNumerator\",\"type\":\"uint256\"}],\"name\":\"QuorumNumeratorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldTimelock\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newTimelock\",\"type\":\"address\"}],\"name\":\"TimelockChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"support\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"VoteCast\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"support\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"VoteCastWithParams\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldVotingDelay\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newVotingDelay\",\"type\":\"uint256\"}],\"name\":\"VotingDelaySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldVotingPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newVotingPeriod\",\"type\":\"uint256\"}],\"name\":\"VotingPeriodSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BALLOT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CLOCK_MODE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"COUNTING_MODE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EXTENDED_BALLOT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"targets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"calldatas\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32\",\"name\":\"descriptionHash\",\"type\":\"bytes32\"}],\"name\":\"cancel\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"support\",\"type\":\"uint8\"}],\"name\":\"castVote\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"support\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"castVoteBySig\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"support\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"castVoteWithReason\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"support\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"castVoteWithReasonAndParams\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"support\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"castVoteWithReasonAndParamsBySig\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"clock\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"targets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"calldatas\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32\",\"name\":\"descriptionHash\",\"type\":\"bytes32\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timepoint\",\"type\":\"uint256\"}],\"name\":\"getVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timepoint\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"getVotesWithParams\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasVoted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"targets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"calldatas\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32\",\"name\":\"descriptionHash\",\"type\":\"bytes32\"}],\"name\":\"hashProposal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"_timelock\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_initialVotingDelay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_initialVotingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_initialProposalThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_votesQuorumFraction\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"proposalDeadline\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"proposalEta\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"proposalProposer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"proposalSnapshot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposalThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"proposalVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"againstVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"forVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"abstainVotes\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"targets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"calldatas\",\"type\":\"bytes[]\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"}],\"name\":\"propose\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"targets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"calldatas\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32\",\"name\":\"descriptionHash\",\"type\":\"bytes32\"}],\"name\":\"queue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"quorum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"quorumDenominator\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timepoint\",\"type\":\"uint256\"}],\"name\":\"quorumNumerator\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"quorumNumerator\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"relay\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProposalThreshold\",\"type\":\"uint256\"}],\"name\":\"setProposalThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newVotingDelay\",\"type\":\"uint256\"}],\"name\":\"setVotingDelay\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newVotingPeriod\",\"type\":\"uint256\"}],\"name\":\"setVotingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"state\",\"outputs\":[{\"internalType\":\"enumIGovernorUpgradeable.ProposalState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"timelock\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contractIERC5805Upgradeable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newQuorumNumerator\",\"type\":\"uint256\"}],\"name\":\"updateQuorumNumerator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractTimelockControllerUpgradeable\",\"name\":\"newTimelock\",\"type\":\"address\"}],\"name\":\"updateTimelock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"votingDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"votingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60e06040523480156200001157600080fd5b506001608052600060a081905260c0526200002b62000031565b620000f2565b600054610100900460ff16156200009e5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000f0576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60805160a05160c051615de062000122600039600061261a015260006125f1015260006125c80152615de06000f3fe60806040526004361061030c5760003560e01c80637b3c71d31161019a578063c01f9e37116100e1578063ea0217cf1161008a578063f23a6e6111610064578063f23a6e6114610a6d578063f8ce560a14610ab2578063fc0c546a14610ad257600080fd5b8063ea0217cf14610a0d578063eb9019d414610a2d578063ece40cc114610a4d57600080fd5b8063d33219b4116100bb578063d33219b414610974578063dd4e2ba514610993578063deaaa7cc146109d957600080fd5b8063c01f9e3714610907578063c28bc2fa14610941578063c59057e41461095457600080fd5b80639a802a6d11610143578063ab58fb8e1161011d578063ab58fb8e1461088d578063b58131b0146108ad578063bc197c81146108c257600080fd5b80639a802a6d14610838578063a7713a7014610858578063a890c9101461086d57600080fd5b806386489ba91161017457806386489ba9146107d857806391ddadf4146107f857806397c3d3341461082457600080fd5b80637b3c71d3146107705780637d5e81e21461079057806384b0196e146107b057600080fd5b80633932abb11161025e578063544ffc9c116102075780635f398a14116101e15780635f398a141461071057806360c4247f1461073057806370b0f6601461075057600080fd5b8063544ffc9c1461068557806354fd4d50146106db57806356781388146106f057600080fd5b806343859632116102385780634385963214610605578063452115d6146106505780634bf5d7e91461067057600080fd5b80633932abb1146105a35780633bccf4fd146105b85780633e4f49e6146105d857600080fd5b8063143489d0116102c05780632656227d1161029a5780632656227d146105255780632d63f693146105385780632fe3e2611461056f57600080fd5b8063143489d014610436578063150b7a0214610490578063160cbed71461050557600080fd5b806303420181116102f157806303420181146103d457806306f3f9e6146103f457806306fdde031461041457600080fd5b806301ffc9a71461037c57806302a251a3146103b157600080fd5b36610377573061031a610af3565b6001600160a01b0316146103755760405162461bcd60e51b815260206004820152601f60248201527f476f7665726e6f723a206d7573742073656e6420746f206578656375746f720060448201526064015b60405180910390fd5b005b600080fd5b34801561038857600080fd5b5061039c610397366004614bf6565b610b0d565b60405190151581526020015b60405180910390f35b3480156103bd57600080fd5b506103c6610b1e565b6040519081526020016103a8565b3480156103e057600080fd5b506103c66103ef366004614d78565b610b2a565b34801561040057600080fd5b5061037561040f366004614e1f565b610c22565b34801561042057600080fd5b50610429610cdc565b6040516103a89190614e88565b34801561044257600080fd5b50610478610451366004614e1f565b600090815260fe60205260409020546801000000000000000090046001600160a01b031690565b6040516001600160a01b0390911681526020016103a8565b34801561049c57600080fd5b506104d46104ab366004614eb0565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016103a8565b34801561051157600080fd5b506103c661052036600461508a565b610d6e565b6103c661053336600461508a565b611014565b34801561054457600080fd5b506103c6610553366004614e1f565b600090815260fe602052604090205467ffffffffffffffff1690565b34801561057b57600080fd5b506103c67fb3b3f3b703cd84ce352197dcff232b1b5d3cfb2025ce47cf04742d0651f1af8881565b3480156105af57600080fd5b506103c661117a565b3480156105c457600080fd5b506103c66105d336600461511a565b611186565b3480156105e457600080fd5b506105f86105f3366004614e1f565b6111fc565b6040516103a89190615197565b34801561061157600080fd5b5061039c6106203660046151d8565b6000828152610161602090815260408083206001600160a01b038516845260030190915290205460ff1692915050565b34801561065c57600080fd5b506103c661066b36600461508a565b611207565b34801561067c57600080fd5b50610429611338565b34801561069157600080fd5b506106c06106a0366004614e1f565b600090815261016160205260409020805460018201546002909201549092565b604080519384526020840192909252908201526060016103a8565b3480156106e757600080fd5b506104296113fe565b3480156106fc57600080fd5b506103c661070b366004615208565b611408565b34801561071c57600080fd5b506103c661072b366004615234565b611431565b34801561073c57600080fd5b506103c661074b366004614e1f565b61147b565b34801561075c57600080fd5b5061037561076b366004614e1f565b611570565b34801561077c57600080fd5b506103c661078b3660046152b8565b611627565b34801561079c57600080fd5b506103c66107ab366004615312565b61166f565b3480156107bc57600080fd5b506107c5611686565b6040516103a89796959493929190615402565b3480156107e457600080fd5b506103756107f336600461547e565b611748565b34801561080457600080fd5b5061080d61192a565b60405165ffffffffffff90911681526020016103a8565b34801561083057600080fd5b5060646103c6565b34801561084457600080fd5b506103c66108533660046154d7565b6119b7565b34801561086457600080fd5b506103c66119ce565b34801561087957600080fd5b50610375610888366004615530565b611a10565b34801561089957600080fd5b506103c66108a8366004614e1f565b611ac7565b3480156108b957600080fd5b506103c6611b7c565b3480156108ce57600080fd5b506104d46108dd36600461554d565b7fbc197c810000000000000000000000000000000000000000000000000000000095945050505050565b34801561091357600080fd5b506103c6610922366004614e1f565b600090815260fe602052604090206001015467ffffffffffffffff1690565b61037561094f3660046155e1565b611b88565b34801561096057600080fd5b506103c661096f36600461508a565b611cbe565b34801561098057600080fd5b506101f8546001600160a01b0316610478565b34801561099f57600080fd5b506040805180820190915260208082527f737570706f72743d627261766f2671756f72756d3d666f722c6162737461696e90820152610429565b3480156109e557600080fd5b506103c67f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f81565b348015610a1957600080fd5b50610375610a28366004614e1f565b611cf8565b348015610a3957600080fd5b506103c6610a48366004615625565b611daf565b348015610a5957600080fd5b50610375610a68366004614e1f565b611dd0565b348015610a7957600080fd5b506104d4610a88366004615651565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b348015610abe57600080fd5b506103c6610acd366004614e1f565b611e87565b348015610ade57600080fd5b5061019354610478906001600160a01b031681565b6000610b086101f8546001600160a01b031690565b905090565b6000610b1882611e92565b92915050565b6000610b086101305490565b600080610bce610bc67fb3b3f3b703cd84ce352197dcff232b1b5d3cfb2025ce47cf04742d0651f1af888c8c8c8c604051610b669291906156ba565b60405180910390208b80519060200120604051602001610bab959493929190948552602085019390935260ff9190911660408401526060830152608082015260a00190565b60405160208183030381529060405280519060200120611ee8565b868686611f30565b9050610c148a828b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d9250611f4e915050565b9a9950505050505050505050565b610c2a610af3565b6001600160a01b0316336001600160a01b031614610c8a5760405162461bcd60e51b815260206004820152601860248201527f476f7665726e6f723a206f6e6c79476f7665726e616e63650000000000000000604482015260640161036c565b30610c93610af3565b6001600160a01b031614610cd05760008036604051610cb39291906156ba565b604051809103902090505b80610cc960ff6120be565b03610cbe57505b610cd98161217b565b50565b606060fd8054610ceb906156ca565b80601f0160208091040260200160405190810160405280929190818152602001828054610d17906156ca565b8015610d645780601f10610d3957610100808354040283529160200191610d64565b820191906000526020600020905b815481529060010190602001808311610d4757829003601f168201915b5050505050905090565b600080610d7d86868686611cbe565b90506004610d8a826111fc565b6007811115610d9b57610d9b615168565b14610e0e5760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a2070726f706f73616c206e6f742073756363657373667560448201527f6c00000000000000000000000000000000000000000000000000000000000000606482015260840161036c565b6101f854604080517ff27a0c9200000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163f27a0c929160048083019260209291908290030181865afa158015610e72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e96919061571d565b6101f8546040517fb1c5f4270000000000000000000000000000000000000000000000000000000081529192506001600160a01b03169063b1c5f42790610eea908a908a908a906000908b906004016157c7565b602060405180830381865afa158015610f07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2b919061571d565b60008381526101f96020526040808220929092556101f85491517f8f2a0bb00000000000000000000000000000000000000000000000000000000081526001600160a01b0390921691638f2a0bb091610f91918b918b918b91908b908990600401615815565b600060405180830381600087803b158015610fab57600080fd5b505af1158015610fbf573d6000803e3d6000fd5b505050507f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda2892828242610ff1919061589c565b604080519283526020830191909152015b60405180910390a15095945050505050565b60008061102386868686611cbe565b90506000611030826111fc565b9050600481600781111561104657611046615168565b14806110635750600581600781111561106157611061615168565b145b6110d55760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a2070726f706f73616c206e6f742073756363657373667560448201527f6c00000000000000000000000000000000000000000000000000000000000000606482015260840161036c565b600082815260fe60205260409081902060020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f906111419084815260200190565b60405180910390a1611156828888888861231c565b61116382888888886123be565b61117082888888886123cb565b5095945050505050565b6000610b0861012f5490565b604080517f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f602082015290810186905260ff8516606082015260009081906111d490610bc690608001610bab565b90506111f187828860405180602001604052806000815250612411565b979650505050505050565b6000610b1882612434565b60008061121686868686611cbe565b90506000611223826111fc565b600781111561123457611234615168565b146112815760405162461bcd60e51b815260206004820152601c60248201527f476f7665726e6f723a20746f6f206c61746520746f2063616e63656c00000000604482015260640161036c565b600081815260fe60205260409020546801000000000000000090046001600160a01b0316336001600160a01b0316146113225760405162461bcd60e51b815260206004820152602260248201527f476f7665726e6f723a206f6e6c792070726f706f7365722063616e2063616e6360448201527f656c000000000000000000000000000000000000000000000000000000000000606482015260840161036c565b61132e868686866125b3565b9695505050505050565b61019354604080517f4bf5d7e900000000000000000000000000000000000000000000000000000000815290516060926001600160a01b031691634bf5d7e99160048083019260009291908290030181865afa9250505080156113bd57506040513d6000823e601f3d908101601f191682016040526113ba91908101906158af565b60015b6113f9575060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b919050565b6060610b086125c1565b60008033905061142984828560405180602001604052806000815250612411565b949350505050565b6000803390506111f187828888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250611f4e915050565b6101c7546000908082036114945750506101c654919050565b60006101c76114a460018461591d565b815481106114b4576114b4615930565b60009182526020918290206040805180820190915291015463ffffffff81168083526401000000009091047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16928201929092529150841061153557602001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169392505050565b61154a61154185612664565b6101c7906126e4565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16949350505050565b611578610af3565b6001600160a01b0316336001600160a01b0316146115d85760405162461bcd60e51b815260206004820152601860248201527f476f7665726e6f723a206f6e6c79476f7665726e616e63650000000000000000604482015260640161036c565b306115e1610af3565b6001600160a01b03161461161e57600080366040516116019291906156ba565b604051809103902090505b8061161760ff6120be565b0361160c57505b610cd9816127ad565b60008033905061132e86828787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061241192505050565b600061167d858585856127f0565b95945050505050565b6000606080600080600060606065546000801b1480156116a65750606654155b6116f25760405162461bcd60e51b815260206004820152601560248201527f4549503731323a20556e696e697469616c697a65640000000000000000000000604482015260640161036c565b6116fa612d25565b611702612d34565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b600054610100900460ff16158080156117685750600054600160ff909116105b806117825750303b158015611782575060005460ff166001145b6117f45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161036c565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561185257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6118906040518060400160405280600f81526020017f55706772616465476f7665726e6f720000000000000000000000000000000000815250612d43565b61189b858585612dda565b6118a3612e67565b6118ac87612ee6565b6118b582612f6c565b6118be86612ff2565b801561192157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b61019354604080517f91ddadf400000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916391ddadf49160048083019260209291908290030181865afa9250505080156119aa575060408051601f3d908101601f191682019092526119a79181019061595f565b60015b6113f957610b0843613078565b60006119c48484846130f6565b90505b9392505050565b6101c75460009015611a08576119e56101c7613186565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16905090565b506101c65490565b611a18610af3565b6001600160a01b0316336001600160a01b031614611a785760405162461bcd60e51b815260206004820152601860248201527f476f7665726e6f723a206f6e6c79476f7665726e616e63650000000000000000604482015260640161036c565b30611a81610af3565b6001600160a01b031614611abe5760008036604051611aa19291906156ba565b604051809103902090505b80611ab760ff6120be565b03611aac57505b610cd9816131cc565b6101f85460008281526101f960205260408082205490517fd45c44350000000000000000000000000000000000000000000000000000000081526004810191909152909182916001600160a01b039091169063d45c443590602401602060405180830381865afa158015611b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b63919061571d565b905080600114611b7357806119c7565b60009392505050565b6000610b086101315490565b611b90610af3565b6001600160a01b0316336001600160a01b031614611bf05760405162461bcd60e51b815260206004820152601860248201527f476f7665726e6f723a206f6e6c79476f7665726e616e63650000000000000000604482015260640161036c565b30611bf9610af3565b6001600160a01b031614611c365760008036604051611c199291906156ba565b604051809103902090505b80611c2f60ff6120be565b03611c2457505b600080856001600160a01b0316858585604051611c549291906156ba565b60006040518083038185875af1925050503d8060008114611c91576040519150601f19603f3d011682016040523d82523d6000602084013e611c96565b606091505b50915091506119218282604051806060016040528060288152602001615dac6028913961324f565b600084848484604051602001611cd79493929190615987565b60408051601f19818403018152919052805160209091012095945050505050565b611d00610af3565b6001600160a01b0316336001600160a01b031614611d605760405162461bcd60e51b815260206004820152601860248201527f476f7665726e6f723a206f6e6c79476f7665726e616e63650000000000000000604482015260640161036c565b30611d69610af3565b6001600160a01b031614611da65760008036604051611d899291906156ba565b604051809103902090505b80611d9f60ff6120be565b03611d9457505b610cd981613268565b60006119c78383611dcb60408051602081019091526000815290565b6130f6565b611dd8610af3565b6001600160a01b0316336001600160a01b031614611e385760405162461bcd60e51b815260206004820152601860248201527f476f7665726e6f723a206f6e6c79476f7665726e616e63650000000000000000604482015260640161036c565b30611e41610af3565b6001600160a01b031614611e7e5760008036604051611e619291906156ba565b604051809103902090505b80611e7760ff6120be565b03611e6c57505b610cd981613321565b6000610b1882613364565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f6e665ced000000000000000000000000000000000000000000000000000000001480610b185750610b188261340c565b6000610b18611ef56135b6565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000611f41878787876135c0565b9150915061117081613684565b600085815260fe602052604081206001611f67886111fc565b6007811115611f7857611f78615168565b14611feb5760405162461bcd60e51b815260206004820152602360248201527f476f7665726e6f723a20766f7465206e6f742063757272656e746c792061637460448201527f6976650000000000000000000000000000000000000000000000000000000000606482015260840161036c565b805460009061200690889067ffffffffffffffff16866130f6565b905061201588888884886137e9565b835160000361206a57866001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda48988848960405161205d94939291906159d2565b60405180910390a26111f1565b866001600160a01b03167fe2babfbac5889a709b63bb7f598b324e08bc5a4fb9ec647fb3cbc9ec07eb871289888489896040516120ab9594939291906159fa565b60405180910390a2979650505050505050565b60006120e68254600f81810b700100000000000000000000000000000000909204900b131590565b1561211d576040517f3db2a12a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b508054600f0b6000818152600180840160205260408220805492905583547fffffffffffffffffffffffffffffffff000000000000000000000000000000001692016fffffffffffffffffffffffffffffffff169190911790915590565b60648111156122185760405162461bcd60e51b815260206004820152604360248201527f476f7665726e6f72566f74657351756f72756d4672616374696f6e3a2071756f60448201527f72756d4e756d657261746f72206f7665722071756f72756d44656e6f6d696e6160648201527f746f720000000000000000000000000000000000000000000000000000000000608482015260a40161036c565b60006122226119ce565b9050801580159061223457506101c754155b156122af5760408051808201909152600081526101c79060208101612258846139dc565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b6122dd6122ca6122bd61192a565b65ffffffffffff16612664565b6122d3846139dc565b6101c79190613a70565b505060408051828152602081018490527f0553476bf02ef2726e8ce5ced78d63e26e602e4a2257b1f559418e24b4633997910160405180910390a15050565b30612325610af3565b6001600160a01b0316146123b75760005b84518110156123b557306001600160a01b031685828151811061235b5761235b615930565b60200260200101516001600160a01b0316036123a5576123a583828151811061238657612386615930565b60200260200101518051906020012060ff613a8b90919063ffffffff16565b6123ae81615a40565b9050612336565b505b5050505050565b6123b78585858585613add565b306123d4610af3565b6001600160a01b0316146123b75760ff54600f81810b700100000000000000000000000000000000909204900b13156123b757600060ff556123b7565b600061167d8585858561242f60408051602081019091526000815290565b611f4e565b60008061244083613b6b565b9050600481600781111561245657612456615168565b146124615792915050565b60008381526101f960205260409020548061247d575092915050565b6101f8546040517f2ab0f529000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b0390911690632ab0f52990602401602060405180830381865afa1580156124e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125049190615a78565b15612513575060079392505050565b6101f8546040517f584b153e000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063584b153e90602401602060405180830381865afa158015612576573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259a9190615a78565b156125a9575060059392505050565b5060029392505050565b600061167d85858585613cae565b60606125ec7f0000000000000000000000000000000000000000000000000000000000000000613d7d565b6126157f0000000000000000000000000000000000000000000000000000000000000000613d7d565b61263e7f0000000000000000000000000000000000000000000000000000000000000000613d7d565b60405160200161265093929190615a9a565b604051602081830303815290604052905090565b600063ffffffff8211156126e05760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201527f3220626974730000000000000000000000000000000000000000000000000000606482015260840161036c565b5090565b8154600090818160058111156127415760006126ff84613e3b565b612709908561591d565b60008881526020902090915081015463ffffffff90811690871610156127315780915061273f565b61273c81600161589c565b92505b505b600061274f87878585613f23565b905080156127a0576127748761276660018461591d565b600091825260209091200190565b5464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166111f1565b6000979650505050505050565b61012f5460408051918252602082018390527fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a93910160405180910390a161012f55565b6000336127fd8184613f81565b6128495760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a2070726f706f7365722072657374726963746564000000604482015260640161036c565b600061285361192a565b65ffffffffffff169050612865611b7c565b61287483610a4860018561591d565b10156128e85760405162461bcd60e51b815260206004820152603160248201527f476f7665726e6f723a2070726f706f73657220766f7465732062656c6f77207060448201527f726f706f73616c207468726573686f6c64000000000000000000000000000000606482015260840161036c565b60006128fd8888888880519060200120611cbe565b905086518851146129765760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a20696e76616c69642070726f706f73616c206c656e677460448201527f6800000000000000000000000000000000000000000000000000000000000000606482015260840161036c565b85518851146129ed5760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a20696e76616c69642070726f706f73616c206c656e677460448201527f6800000000000000000000000000000000000000000000000000000000000000606482015260840161036c565b6000885111612a3e5760405162461bcd60e51b815260206004820152601860248201527f476f7665726e6f723a20656d7074792070726f706f73616c0000000000000000604482015260640161036c565b600081815260fe602052604090205467ffffffffffffffff1615612aca5760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a2070726f706f73616c20616c726561647920657869737460448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161036c565b6000612ad461117a565b612ade908461589c565b90506000612aea610b1e565b612af4908361589c565b90506040518060e00160405280612b0a846140d1565b67ffffffffffffffff1681526001600160a01b038716602082015260006040820152606001612b38836140d1565b67ffffffffffffffff9081168252600060208084018290526040808501839052606094850183905288835260fe8252918290208551815492870151878501519186167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317680100000000000000006001600160a01b039094168402177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000060e09290921c91909102178155938501516080860151908416921c0217600183015560a08301516002909201805460c0909401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009094169215157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1692909217610100931515939093029290921790558a517f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e091859188918e918e91811115612cc257612cc2614c92565b604051908082528060200260200182016040528015612cf557816020015b6060815260200190600190039081612ce05790505b508d88888f604051612d0f99989796959493929190615b10565b60405180910390a1509098975050505050505050565b606060678054610ceb906156ca565b606060688054610ceb906156ca565b600054610100900460ff16612dc05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b612dd181612dcc6113fe565b614151565b610cd9816141f6565b600054610100900460ff16612e575760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b612e62838383614283565b505050565b600054610100900460ff16612ee45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b565b600054610100900460ff16612f635760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b610cd98161431b565b600054610100900460ff16612fe95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b610cd9816143d3565b600054610100900460ff1661306f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b610cd981614450565b600065ffffffffffff8211156126e05760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201527f3820626974730000000000000000000000000000000000000000000000000000606482015260840161036c565b610193546040517f3a46b1a80000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482018590526000921690633a46b1a890604401602060405180830381865afa158015613162573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c4919061571d565b80546000908015611b73576131a08361276660018461591d565b5464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166119c7565b6101f854604080516001600160a01b03928316815291831660208301527f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401910160405180910390a16101f880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060831561325e5750816119c7565b6119c783836144cd565b600081116132de5760405162461bcd60e51b815260206004820152602760248201527f476f7665726e6f7253657474696e67733a20766f74696e6720706572696f642060448201527f746f6f206c6f7700000000000000000000000000000000000000000000000000606482015260840161036c565b6101305460408051918252602082018390527f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e8828910160405180910390a161013055565b6101315460408051918252602082018390527fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc05461910160405180910390a161013155565b600060646133718361147b565b610193546040517f8e539e8c000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b0390911690638e539e8c90602401602060405180830381865afa1580156133d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f8919061571d565b6134029190615be8565b610b189190615c2e565b60007f51159c06000000000000000000000000000000000000000000000000000000007fc6fba1f8000000000000000000000000000000000000000000000000000000007fbf26d897000000000000000000000000000000000000000000000000000000007f79dd796f000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000086168214806134e657507fffffffff00000000000000000000000000000000000000000000000000000000868116908216145b8061351557507fffffffff00000000000000000000000000000000000000000000000000000000868116908516145b8061356157507fffffffff0000000000000000000000000000000000000000000000000000000086167f4e2312e000000000000000000000000000000000000000000000000000000000145b8061132e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008716149695505050505050565b6000610b086144f7565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156135f7575060009050600361367b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561364b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166136745760006001925092505061367b565b9150600090505b94509492505050565b600081600481111561369857613698615168565b036136a05750565b60018160048111156136b4576136b4615168565b036137015760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161036c565b600281600481111561371557613715615168565b036137625760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161036c565b600381600481111561377657613776615168565b03610cd95760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161036c565b6000858152610161602090815260408083206001600160a01b0388168452600381019092529091205460ff16156138885760405162461bcd60e51b815260206004820152602760248201527f476f7665726e6f72566f74696e6753696d706c653a20766f746520616c72656160448201527f6479206361737400000000000000000000000000000000000000000000000000606482015260840161036c565b6001600160a01b0385166000908152600382016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560ff84166138f257828160000160008282546138e7919061589c565b909155506123b59050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff85160161393057828160010160008282546138e7919061589c565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff85160161396e57828160020160008282546138e7919061589c565b60405162461bcd60e51b815260206004820152603560248201527f476f7665726e6f72566f74696e6753696d706c653a20696e76616c696420766160448201527f6c756520666f7220656e756d20566f7465547970650000000000000000000000606482015260840161036c565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8211156126e05760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203260448201527f3234206269747300000000000000000000000000000000000000000000000000606482015260840161036c565b600080613a7e85858561456b565b915091505b935093915050565b815470010000000000000000000000000000000090819004600f0b6000818152600180860160205260409091209390935583546fffffffffffffffffffffffffffffffff908116939091011602179055565b6101f8546040517fe38335e50000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063e38335e5903490613b329088908890889060009089906004016157c7565b6000604051808303818588803b158015613b4b57600080fd5b505af1158015613b5f573d6000803e3d6000fd5b50505050505050505050565b600081815260fe60205260408120600281015460ff1615613b8f5750600792915050565b6002810154610100900460ff1615613baa5750600292915050565b600083815260fe602052604081205467ffffffffffffffff1690819003613c135760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a20756e6b6e6f776e2070726f706f73616c206964000000604482015260640161036c565b6000613c1d61192a565b65ffffffffffff169050808210613c3957506000949350505050565b600085815260fe602052604090206001015467ffffffffffffffff16818110613c685750600195945050505050565b613c7186614762565b8015613c9157506000868152610161602052604090208054600190910154115b15613ca25750600495945050505050565b50600395945050505050565b600080613cbd868686866147b0565b60008181526101f960205260409020549091501561167d576101f85460008281526101f96020526040908190205490517fc4d252f50000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163c4d252f591613d329160040190815260200190565b600060405180830381600087803b158015613d4c57600080fd5b505af1158015613d60573d6000803e3d6000fd5b50505060008281526101f960205260408120555095945050505050565b60606000613d8a836148d9565b600101905060008167ffffffffffffffff811115613daa57613daa614c92565b6040519080825280601f01601f191660200182016040528015613dd4576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084613dde57509392505050565b600081600003613e4d57506000919050565b60006001613e5a846149bb565b901c6001901b90506001818481613e7357613e73615bff565b048201901c90506001818481613e8b57613e8b615bff565b048201901c90506001818481613ea357613ea3615bff565b048201901c90506001818481613ebb57613ebb615bff565b048201901c90506001818481613ed357613ed3615bff565b048201901c90506001818481613eeb57613eeb615bff565b048201901c90506001818481613f0357613f03615bff565b048201901c90506119c781828581613f1d57613f1d615bff565b04614a4f565b60005b81831015613f79576000613f3a8484614a65565b60008781526020902090915063ffffffff86169082015463ffffffff161115613f6557809250613f73565b613f7081600161589c565b93505b50613f26565b509392505050565b80516000906034811015613f99576001915050610b18565b8281017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec01517fffffffffffffffffffffffff000000000000000000000000000000000000000081167f2370726f706f7365723d307800000000000000000000000000000000000000001461401357600192505050610b18565b60008061402160288561591d565b90505b838110156140b05760008061407088848151811061404457614044615930565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016614a80565b91509150816140885760019650505050505050610b18565b8060ff166004856001600160a01b0316901b1793505050806140a990615a40565b9050614024565b50856001600160a01b0316816001600160a01b031614935050505092915050565b600067ffffffffffffffff8211156126e05760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201527f3420626974730000000000000000000000000000000000000000000000000000606482015260840161036c565b600054610100900460ff166141ce5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b60676141da8382615caf565b5060686141e78282615caf565b50506000606581905560665550565b600054610100900460ff166142735760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b60fd61427f8282615caf565b5050565b600054610100900460ff166143005760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b614309836127ad565b61431282613268565b612e6281613321565b600054610100900460ff166143985760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b61019380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600054610100900460ff16610cd05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b600054610100900460ff16611abe5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b8151156144dd5781518083602001fd5b8060405162461bcd60e51b815260040161036c9190614e88565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f614522614b6c565b61452a614bc5565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8254600090819080156146f35760006145898761276660018561591d565b60408051808201909152905463ffffffff8082168084526401000000009092047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16602084015291925090871610156146205760405162461bcd60e51b815260206004820152601b60248201527f436865636b706f696e743a2064656372656173696e67206b6579730000000000604482015260640161036c565b805163ffffffff80881691160361467e57846146418861276660018661591d565b80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092166401000000000263ffffffff9092169190911790556146e3565b6040805180820190915263ffffffff80881682527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff80881660208085019182528b54600181018d5560008d81529190912094519151909216640100000000029216919091179101555b602001519250839150613a839050565b50506040805180820190915263ffffffff80851682527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff80851660208085019182528854600181018a5560008a815291822095519251909316640100000000029190931617920191909155905081613a83565b60008181526101616020526040812060028101546001820154614785919061589c565b600084815260fe60205260409020546147a79067ffffffffffffffff16611e87565b11159392505050565b6000806147bf86868686611cbe565b905060006147cc826111fc565b905060028160078111156147e2576147e2615168565b14158015614802575060068160078111156147ff576147ff615168565b14155b80156148205750600781600781111561481d5761481d615168565b14155b61486c5760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a2070726f706f73616c206e6f7420616374697665000000604482015260640161036c565b600082815260fe60205260409081902060020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055517f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c906110029084815260200190565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310614922577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061494e576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061496c57662386f26fc10000830492506010015b6305f5e1008310614984576305f5e100830492506008015b612710831061499857612710830492506004015b606483106149aa576064830492506002015b600a8310610b185760010192915050565b600080608083901c156149d057608092831c92015b604083901c156149e257604092831c92015b602083901c156149f457602092831c92015b601083901c15614a0657601092831c92015b600883901c15614a1857600892831c92015b600483901c15614a2a57600492831c92015b600283901c15614a3c57600292831c92015b600183901c15610b185760010192915050565b6000818310614a5e57816119c7565b5090919050565b6000614a746002848418615c2e565b6119c79084841661589c565b60008060f883901c602f81118015614a9b5750603a8160ff16105b15614ace576001947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd09091019350915050565b8060ff166040108015614ae4575060478160ff16105b15614b17576001947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc99091019350915050565b8060ff166060108015614b2d575060678160ff16105b15614b60576001947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa99091019350915050565b50600093849350915050565b600080614b77612d25565b805190915015614b8e578051602090910120919050565b6065548015614b9d5792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b600080614bd0612d34565b805190915015614be7578051602090910120919050565b6066548015614b9d5792915050565b600060208284031215614c0857600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146119c757600080fd5b803560ff811681146113f957600080fd5b60008083601f840112614c5b57600080fd5b50813567ffffffffffffffff811115614c7357600080fd5b602083019150836020828501011115614c8b57600080fd5b9250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614cea57614cea614c92565b604052919050565b600067ffffffffffffffff821115614d0c57614d0c614c92565b50601f01601f191660200190565b6000614d2d614d2884614cf2565b614cc1565b9050828152838383011115614d4157600080fd5b828260208301376000602084830101529392505050565b600082601f830112614d6957600080fd5b6119c783833560208501614d1a565b60008060008060008060008060e0898b031215614d9457600080fd5b88359750614da460208a01614c38565b9650604089013567ffffffffffffffff80821115614dc157600080fd5b614dcd8c838d01614c49565b909850965060608b0135915080821115614de657600080fd5b50614df38b828c01614d58565b945050614e0260808a01614c38565b925060a0890135915060c089013590509295985092959890939650565b600060208284031215614e3157600080fd5b5035919050565b60005b83811015614e53578181015183820152602001614e3b565b50506000910152565b60008151808452614e74816020860160208601614e38565b601f01601f19169290920160200192915050565b6020815260006119c76020830184614e5c565b6001600160a01b0381168114610cd957600080fd5b60008060008060808587031215614ec657600080fd5b8435614ed181614e9b565b93506020850135614ee181614e9b565b925060408501359150606085013567ffffffffffffffff811115614f0457600080fd5b614f1087828801614d58565b91505092959194509250565b600067ffffffffffffffff821115614f3657614f36614c92565b5060051b60200190565b600082601f830112614f5157600080fd5b81356020614f61614d2883614f1c565b82815260059290921b84018101918181019086841115614f8057600080fd5b8286015b84811015614fa4578035614f9781614e9b565b8352918301918301614f84565b509695505050505050565b600082601f830112614fc057600080fd5b81356020614fd0614d2883614f1c565b82815260059290921b84018101918181019086841115614fef57600080fd5b8286015b84811015614fa45780358352918301918301614ff3565b600082601f83011261501b57600080fd5b8135602061502b614d2883614f1c565b82815260059290921b8401810191818101908684111561504a57600080fd5b8286015b84811015614fa457803567ffffffffffffffff81111561506e5760008081fd5b61507c8986838b0101614d58565b84525091830191830161504e565b600080600080608085870312156150a057600080fd5b843567ffffffffffffffff808211156150b857600080fd5b6150c488838901614f40565b955060208701359150808211156150da57600080fd5b6150e688838901614faf565b945060408701359150808211156150fc57600080fd5b506151098782880161500a565b949793965093946060013593505050565b600080600080600060a0868803121561513257600080fd5b8535945061514260208701614c38565b935061515060408701614c38565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600883106151d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600080604083850312156151eb57600080fd5b8235915060208301356151fd81614e9b565b809150509250929050565b6000806040838503121561521b57600080fd5b8235915061522b60208401614c38565b90509250929050565b60008060008060006080868803121561524c57600080fd5b8535945061525c60208701614c38565b9350604086013567ffffffffffffffff8082111561527957600080fd5b61528589838a01614c49565b9095509350606088013591508082111561529e57600080fd5b506152ab88828901614d58565b9150509295509295909350565b600080600080606085870312156152ce57600080fd5b843593506152de60208601614c38565b9250604085013567ffffffffffffffff8111156152fa57600080fd5b61530687828801614c49565b95989497509550505050565b6000806000806080858703121561532857600080fd5b843567ffffffffffffffff8082111561534057600080fd5b61534c88838901614f40565b9550602087013591508082111561536257600080fd5b61536e88838901614faf565b9450604087013591508082111561538457600080fd5b6153908883890161500a565b935060608701359150808211156153a657600080fd5b508501601f810187136153b857600080fd5b614f1087823560208401614d1a565b600081518084526020808501945080840160005b838110156153f7578151875295820195908201906001016153db565b509495945050505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e06020820152600061543d60e0830189614e5c565b828103604084015261544f8189614e5c565b90508660608401526001600160a01b03861660808401528460a084015282810360c0840152610c1481856153c7565b60008060008060008060c0878903121561549757600080fd5b86356154a281614e9b565b955060208701356154b281614e9b565b95989597505050506040840135936060810135936080820135935060a0909101359150565b6000806000606084860312156154ec57600080fd5b83356154f781614e9b565b925060208401359150604084013567ffffffffffffffff81111561551a57600080fd5b61552686828701614d58565b9150509250925092565b60006020828403121561554257600080fd5b81356119c781614e9b565b600080600080600060a0868803121561556557600080fd5b853561557081614e9b565b9450602086013561558081614e9b565b9350604086013567ffffffffffffffff8082111561559d57600080fd5b6155a989838a01614faf565b945060608801359150808211156155bf57600080fd5b6155cb89838a01614faf565b9350608088013591508082111561529e57600080fd5b600080600080606085870312156155f757600080fd5b843561560281614e9b565b935060208501359250604085013567ffffffffffffffff8111156152fa57600080fd5b6000806040838503121561563857600080fd5b823561564381614e9b565b946020939093013593505050565b600080600080600060a0868803121561566957600080fd5b853561567481614e9b565b9450602086013561568481614e9b565b93506040860135925060608601359150608086013567ffffffffffffffff8111156156ae57600080fd5b6152ab88828901614d58565b8183823760009101908152919050565b600181811c908216806156de57607f821691505b602082108103615717577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60006020828403121561572f57600080fd5b5051919050565b600081518084526020808501945080840160005b838110156153f75781516001600160a01b03168752958201959082019060010161574a565b600082825180855260208086019550808260051b84010181860160005b848110156157ba57601f198684030189526157a8838351614e5c565b9884019892509083019060010161578c565b5090979650505050505050565b60a0815260006157da60a0830188615736565b82810360208401526157ec81886153c7565b90508281036040840152615800818761576f565b60608401959095525050608001529392505050565b60c08152600061582860c0830189615736565b828103602084015261583a81896153c7565b9050828103604084015261584e818861576f565b60608401969096525050608081019290925260a0909101529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610b1857610b1861586d565b6000602082840312156158c157600080fd5b815167ffffffffffffffff8111156158d857600080fd5b8201601f810184136158e957600080fd5b80516158f7614d2882614cf2565b81815285602083850101111561590c57600080fd5b61167d826020830160208601614e38565b81810381811115610b1857610b1861586d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561597157600080fd5b815165ffffffffffff811681146119c757600080fd5b60808152600061599a6080830187615736565b82810360208401526159ac81876153c7565b905082810360408401526159c0818661576f565b91505082606083015295945050505050565b84815260ff8416602082015282604082015260806060820152600061132e6080830184614e5c565b85815260ff8516602082015283604082015260a060608201526000615a2260a0830185614e5c565b8281036080840152615a348185614e5c565b98975050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a7157615a7161586d565b5060010190565b600060208284031215615a8a57600080fd5b815180151581146119c757600080fd5b60008451615aac818460208901614e38565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551615ae8816001850160208a01614e38565b60019201918201528351615b03816002840160208801614e38565b0160020195945050505050565b60006101208b835260206001600160a01b038c1681850152816040850152615b3a8285018c615736565b91508382036060850152615b4e828b6153c7565b915083820360808501528189518084528284019150828160051b850101838c0160005b83811015615b9f57601f19878403018552615b8d838351614e5c565b94860194925090850190600101615b71565b505086810360a0880152615bb3818c61576f565b9450505050508560c08401528460e0840152828103610100840152615bd88185614e5c565b9c9b505050505050505050505050565b8082028115828204841417610b1857610b1861586d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615c64577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b601f821115612e6257600081815260208120601f850160051c81016020861015615c905750805b601f850160051c820191505b818110156123b557828155600101615c9c565b815167ffffffffffffffff811115615cc957615cc9614c92565b615cdd81615cd784546156ca565b84615c69565b602080601f831160018114615d305760008415615cfa5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556123b5565b600085815260208120601f198616915b82811015615d5f57888601518255948401946001909101908401615d40565b5085821015615d9b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fe476f7665726e6f723a2072656c617920726576657274656420776974686f7574206d657373616765a164736f6c6343000813000a", + Bin: "0x60e06040523480156200001157600080fd5b506001608052600060a081905260c0526200002b62000031565b620000f2565b600054610100900460ff16156200009e5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000f0576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60805160a05160c051615d6462000122600039600061261a015260006125f1015260006125c80152615d646000f3fe60806040526004361061030c5760003560e01c80637b3c71d31161019a578063c01f9e37116100e1578063ea0217cf1161008a578063f23a6e6111610064578063f23a6e6114610a6d578063f8ce560a14610ab2578063fc0c546a14610ad257600080fd5b8063ea0217cf14610a0d578063eb9019d414610a2d578063ece40cc114610a4d57600080fd5b8063d33219b4116100bb578063d33219b414610974578063dd4e2ba514610993578063deaaa7cc146109d957600080fd5b8063c01f9e3714610907578063c28bc2fa14610941578063c59057e41461095457600080fd5b80639a802a6d11610143578063ab58fb8e1161011d578063ab58fb8e1461088d578063b58131b0146108ad578063bc197c81146108c257600080fd5b80639a802a6d14610838578063a7713a7014610858578063a890c9101461086d57600080fd5b806386489ba91161017457806386489ba9146107d857806391ddadf4146107f857806397c3d3341461082457600080fd5b80637b3c71d3146107705780637d5e81e21461079057806384b0196e146107b057600080fd5b80633932abb11161025e578063544ffc9c116102075780635f398a14116101e15780635f398a141461071057806360c4247f1461073057806370b0f6601461075057600080fd5b8063544ffc9c1461068557806354fd4d50146106db57806356781388146106f057600080fd5b806343859632116102385780634385963214610605578063452115d6146106505780634bf5d7e91461067057600080fd5b80633932abb1146105a35780633bccf4fd146105b85780633e4f49e6146105d857600080fd5b8063143489d0116102c05780632656227d1161029a5780632656227d146105255780632d63f693146105385780632fe3e2611461056f57600080fd5b8063143489d014610436578063150b7a0214610490578063160cbed71461050557600080fd5b806303420181116102f157806303420181146103d457806306f3f9e6146103f457806306fdde031461041457600080fd5b806301ffc9a71461037c57806302a251a3146103b157600080fd5b36610377573061031a610af3565b6001600160a01b0316146103755760405162461bcd60e51b815260206004820152601f60248201527f476f7665726e6f723a206d7573742073656e6420746f206578656375746f720060448201526064015b60405180910390fd5b005b600080fd5b34801561038857600080fd5b5061039c610397366004614bba565b610b0d565b60405190151581526020015b60405180910390f35b3480156103bd57600080fd5b506103c6610b1e565b6040519081526020016103a8565b3480156103e057600080fd5b506103c66103ef366004614d3c565b610b2a565b34801561040057600080fd5b5061037561040f366004614de3565b610c22565b34801561042057600080fd5b50610429610cdc565b6040516103a89190614e58565b34801561044257600080fd5b50610478610451366004614de3565b600090815260fe60205260409020546801000000000000000090046001600160a01b031690565b6040516001600160a01b0390911681526020016103a8565b34801561049c57600080fd5b506104d46104ab366004614e80565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016103a8565b34801561051157600080fd5b506103c661052036600461505a565b610d6e565b6103c661053336600461505a565b611014565b34801561054457600080fd5b506103c6610553366004614de3565b600090815260fe602052604090205467ffffffffffffffff1690565b34801561057b57600080fd5b506103c67fb3b3f3b703cd84ce352197dcff232b1b5d3cfb2025ce47cf04742d0651f1af8881565b3480156105af57600080fd5b506103c661117a565b3480156105c457600080fd5b506103c66105d33660046150ea565b611186565b3480156105e457600080fd5b506105f86105f3366004614de3565b6111fc565b6040516103a89190615167565b34801561061157600080fd5b5061039c6106203660046151a8565b6000828152610161602090815260408083206001600160a01b038516845260030190915290205460ff1692915050565b34801561065c57600080fd5b506103c661066b36600461505a565b611207565b34801561067c57600080fd5b50610429611338565b34801561069157600080fd5b506106c06106a0366004614de3565b600090815261016160205260409020805460018201546002909201549092565b604080519384526020840192909252908201526060016103a8565b3480156106e757600080fd5b506104296113fe565b3480156106fc57600080fd5b506103c661070b3660046151d8565b611408565b34801561071c57600080fd5b506103c661072b366004615204565b611431565b34801561073c57600080fd5b506103c661074b366004614de3565b61147b565b34801561075c57600080fd5b5061037561076b366004614de3565b611570565b34801561077c57600080fd5b506103c661078b366004615288565b611627565b34801561079c57600080fd5b506103c66107ab3660046152e2565b61166f565b3480156107bc57600080fd5b506107c5611686565b6040516103a897969594939291906153d2565b3480156107e457600080fd5b506103756107f336600461544e565b611748565b34801561080457600080fd5b5061080d61192a565b60405165ffffffffffff90911681526020016103a8565b34801561083057600080fd5b5060646103c6565b34801561084457600080fd5b506103c66108533660046154a7565b6119b7565b34801561086457600080fd5b506103c66119ce565b34801561087957600080fd5b50610375610888366004615500565b611a10565b34801561089957600080fd5b506103c66108a8366004614de3565b611ac7565b3480156108b957600080fd5b506103c6611b7c565b3480156108ce57600080fd5b506104d46108dd36600461551d565b7fbc197c810000000000000000000000000000000000000000000000000000000095945050505050565b34801561091357600080fd5b506103c6610922366004614de3565b600090815260fe602052604090206001015467ffffffffffffffff1690565b61037561094f3660046155b1565b611b88565b34801561096057600080fd5b506103c661096f36600461505a565b611cbe565b34801561098057600080fd5b506101f8546001600160a01b0316610478565b34801561099f57600080fd5b506040805180820190915260208082527f737570706f72743d627261766f2671756f72756d3d666f722c6162737461696e90820152610429565b3480156109e557600080fd5b506103c67f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f81565b348015610a1957600080fd5b50610375610a28366004614de3565b611cf8565b348015610a3957600080fd5b506103c6610a483660046155f5565b611daf565b348015610a5957600080fd5b50610375610a68366004614de3565b611dd0565b348015610a7957600080fd5b506104d4610a88366004615621565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b348015610abe57600080fd5b506103c6610acd366004614de3565b611e87565b348015610ade57600080fd5b5061019354610478906001600160a01b031681565b6000610b086101f8546001600160a01b031690565b905090565b6000610b1882611e92565b92915050565b6000610b086101305490565b600080610bce610bc67fb3b3f3b703cd84ce352197dcff232b1b5d3cfb2025ce47cf04742d0651f1af888c8c8c8c604051610b6692919061568a565b60405180910390208b80519060200120604051602001610bab959493929190948552602085019390935260ff9190911660408401526060830152608082015260a00190565b60405160208183030381529060405280519060200120611ee8565b868686611f30565b9050610c148a828b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d9250611f4e915050565b9a9950505050505050505050565b610c2a610af3565b6001600160a01b0316336001600160a01b031614610c8a5760405162461bcd60e51b815260206004820152601860248201527f476f7665726e6f723a206f6e6c79476f7665726e616e63650000000000000000604482015260640161036c565b30610c93610af3565b6001600160a01b031614610cd05760008036604051610cb392919061568a565b604051809103902090505b80610cc960ff6120be565b03610cbe57505b610cd98161217b565b50565b606060fd8054610ceb9061569a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d179061569a565b8015610d645780601f10610d3957610100808354040283529160200191610d64565b820191906000526020600020905b815481529060010190602001808311610d4757829003601f168201915b5050505050905090565b600080610d7d86868686611cbe565b90506004610d8a826111fc565b6007811115610d9b57610d9b615138565b14610e0e5760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a2070726f706f73616c206e6f742073756363657373667560448201527f6c00000000000000000000000000000000000000000000000000000000000000606482015260840161036c565b6101f854604080517ff27a0c9200000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163f27a0c929160048083019260209291908290030181865afa158015610e72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9691906156ed565b6101f8546040517fb1c5f4270000000000000000000000000000000000000000000000000000000081529192506001600160a01b03169063b1c5f42790610eea908a908a908a906000908b90600401615794565b602060405180830381865afa158015610f07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2b91906156ed565b60008381526101f96020526040808220929092556101f85491517f8f2a0bb00000000000000000000000000000000000000000000000000000000081526001600160a01b0390921691638f2a0bb091610f91918b918b918b91908b9089906004016157e2565b600060405180830381600087803b158015610fab57600080fd5b505af1158015610fbf573d6000803e3d6000fd5b505050507f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda2892828242610ff19190615869565b604080519283526020830191909152015b60405180910390a15095945050505050565b60008061102386868686611cbe565b90506000611030826111fc565b9050600481600781111561104657611046615138565b14806110635750600581600781111561106157611061615138565b145b6110d55760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a2070726f706f73616c206e6f742073756363657373667560448201527f6c00000000000000000000000000000000000000000000000000000000000000606482015260840161036c565b600082815260fe60205260409081902060020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f906111419084815260200190565b60405180910390a1611156828888888861231c565b61116382888888886123be565b61117082888888886123cb565b5095945050505050565b6000610b0861012f5490565b604080517f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f602082015290810186905260ff8516606082015260009081906111d490610bc690608001610bab565b90506111f187828860405180602001604052806000815250612411565b979650505050505050565b6000610b1882612434565b60008061121686868686611cbe565b90506000611223826111fc565b600781111561123457611234615138565b146112815760405162461bcd60e51b815260206004820152601c60248201527f476f7665726e6f723a20746f6f206c61746520746f2063616e63656c00000000604482015260640161036c565b600081815260fe60205260409020546801000000000000000090046001600160a01b0316336001600160a01b0316146113225760405162461bcd60e51b815260206004820152602260248201527f476f7665726e6f723a206f6e6c792070726f706f7365722063616e2063616e6360448201527f656c000000000000000000000000000000000000000000000000000000000000606482015260840161036c565b61132e868686866125b3565b9695505050505050565b61019354604080517f4bf5d7e900000000000000000000000000000000000000000000000000000000815290516060926001600160a01b031691634bf5d7e99160048083019260009291908290030181865afa9250505080156113bd57506040513d6000823e601f3d908101601f191682016040526113ba9190810190615881565b60015b6113f9575060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b919050565b6060610b086125c1565b60008033905061142984828560405180602001604052806000815250612411565b949350505050565b6000803390506111f187828888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250611f4e915050565b6101c7546000908082036114945750506101c654919050565b60006101c76114a46001846158ef565b815481106114b4576114b4615906565b60009182526020918290206040805180820190915291015463ffffffff81168083526401000000009091047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16928201929092529150841061153557602001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169392505050565b61154a61154185612664565b6101c7906126e4565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16949350505050565b611578610af3565b6001600160a01b0316336001600160a01b0316146115d85760405162461bcd60e51b815260206004820152601860248201527f476f7665726e6f723a206f6e6c79476f7665726e616e63650000000000000000604482015260640161036c565b306115e1610af3565b6001600160a01b03161461161e576000803660405161160192919061568a565b604051809103902090505b8061161760ff6120be565b0361160c57505b610cd9816127ad565b60008033905061132e86828787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061241192505050565b600061167d858585856127f0565b95945050505050565b6000606080600080600060606065546000801b1480156116a65750606654155b6116f25760405162461bcd60e51b815260206004820152601560248201527f4549503731323a20556e696e697469616c697a65640000000000000000000000604482015260640161036c565b6116fa612d25565b611702612d34565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b600054610100900460ff16158080156117685750600054600160ff909116105b806117825750303b158015611782575060005460ff166001145b6117f45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161036c565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561185257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6118906040518060400160405280600f81526020017f55706772616465476f7665726e6f720000000000000000000000000000000000815250612d43565b61189b858585612dda565b6118a3612e67565b6118ac87612ee6565b6118b582612f6c565b6118be86612ff2565b801561192157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b61019354604080517f91ddadf400000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916391ddadf49160048083019260209291908290030181865afa9250505080156119aa575060408051601f3d908101601f191682019092526119a791810190615935565b60015b6113f957610b0843613078565b60006119c48484846130f6565b90505b9392505050565b6101c75460009015611a08576119e56101c7613186565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16905090565b506101c65490565b611a18610af3565b6001600160a01b0316336001600160a01b031614611a785760405162461bcd60e51b815260206004820152601860248201527f476f7665726e6f723a206f6e6c79476f7665726e616e63650000000000000000604482015260640161036c565b30611a81610af3565b6001600160a01b031614611abe5760008036604051611aa192919061568a565b604051809103902090505b80611ab760ff6120be565b03611aac57505b610cd9816131cc565b6101f85460008281526101f960205260408082205490517fd45c44350000000000000000000000000000000000000000000000000000000081526004810191909152909182916001600160a01b039091169063d45c443590602401602060405180830381865afa158015611b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6391906156ed565b905080600114611b7357806119c7565b60009392505050565b6000610b086101315490565b611b90610af3565b6001600160a01b0316336001600160a01b031614611bf05760405162461bcd60e51b815260206004820152601860248201527f476f7665726e6f723a206f6e6c79476f7665726e616e63650000000000000000604482015260640161036c565b30611bf9610af3565b6001600160a01b031614611c365760008036604051611c1992919061568a565b604051809103902090505b80611c2f60ff6120be565b03611c2457505b600080856001600160a01b0316858585604051611c5492919061568a565b60006040518083038185875af1925050503d8060008114611c91576040519150601f19603f3d011682016040523d82523d6000602084013e611c96565b606091505b50915091506119218282604051806060016040528060288152602001615d306028913961324f565b600084848484604051602001611cd7949392919061595d565b60408051601f19818403018152919052805160209091012095945050505050565b611d00610af3565b6001600160a01b0316336001600160a01b031614611d605760405162461bcd60e51b815260206004820152601860248201527f476f7665726e6f723a206f6e6c79476f7665726e616e63650000000000000000604482015260640161036c565b30611d69610af3565b6001600160a01b031614611da65760008036604051611d8992919061568a565b604051809103902090505b80611d9f60ff6120be565b03611d9457505b610cd981613268565b60006119c78383611dcb60408051602081019091526000815290565b6130f6565b611dd8610af3565b6001600160a01b0316336001600160a01b031614611e385760405162461bcd60e51b815260206004820152601860248201527f476f7665726e6f723a206f6e6c79476f7665726e616e63650000000000000000604482015260640161036c565b30611e41610af3565b6001600160a01b031614611e7e5760008036604051611e6192919061568a565b604051809103902090505b80611e7760ff6120be565b03611e6c57505b610cd981613321565b6000610b1882613364565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f6e665ced000000000000000000000000000000000000000000000000000000001480610b185750610b188261340c565b6000610b18611ef56135b6565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000611f41878787876135c0565b9150915061117081613684565b600085815260fe602052604081206001611f67886111fc565b6007811115611f7857611f78615138565b14611feb5760405162461bcd60e51b815260206004820152602360248201527f476f7665726e6f723a20766f7465206e6f742063757272656e746c792061637460448201527f6976650000000000000000000000000000000000000000000000000000000000606482015260840161036c565b805460009061200690889067ffffffffffffffff16866130f6565b905061201588888884886137e9565b835160000361206a57866001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda48988848960405161205d94939291906159a8565b60405180910390a26111f1565b866001600160a01b03167fe2babfbac5889a709b63bb7f598b324e08bc5a4fb9ec647fb3cbc9ec07eb871289888489896040516120ab9594939291906159d0565b60405180910390a2979650505050505050565b60006120e68254600f81810b700100000000000000000000000000000000909204900b131590565b1561211d576040517f3db2a12a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b508054600f0b6000818152600180840160205260408220805492905583547fffffffffffffffffffffffffffffffff000000000000000000000000000000001692016fffffffffffffffffffffffffffffffff169190911790915590565b60648111156122185760405162461bcd60e51b815260206004820152604360248201527f476f7665726e6f72566f74657351756f72756d4672616374696f6e3a2071756f60448201527f72756d4e756d657261746f72206f7665722071756f72756d44656e6f6d696e6160648201527f746f720000000000000000000000000000000000000000000000000000000000608482015260a40161036c565b60006122226119ce565b9050801580159061223457506101c754155b156122af5760408051808201909152600081526101c79060208101612258846139be565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b6122dd6122ca6122bd61192a565b65ffffffffffff16612664565b6122d3846139be565b6101c79190613a52565b505060408051828152602081018490527f0553476bf02ef2726e8ce5ced78d63e26e602e4a2257b1f559418e24b4633997910160405180910390a15050565b30612325610af3565b6001600160a01b0316146123b75760005b84518110156123b557306001600160a01b031685828151811061235b5761235b615906565b60200260200101516001600160a01b0316036123a5576123a583828151811061238657612386615906565b60200260200101518051906020012060ff613a6d90919063ffffffff16565b6123ae81615a16565b9050612336565b505b5050505050565b6123b78585858585613abf565b306123d4610af3565b6001600160a01b0316146123b75760ff54600f81810b700100000000000000000000000000000000909204900b13156123b757600060ff556123b7565b600061167d8585858561242f60408051602081019091526000815290565b611f4e565b60008061244083613b4d565b9050600481600781111561245657612456615138565b146124615792915050565b60008381526101f960205260409020548061247d575092915050565b6101f8546040517f2ab0f529000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b0390911690632ab0f52990602401602060405180830381865afa1580156124e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125049190615a30565b15612513575060079392505050565b6101f8546040517f584b153e000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063584b153e90602401602060405180830381865afa158015612576573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259a9190615a30565b156125a9575060059392505050565b5060029392505050565b600061167d85858585613c90565b60606125ec7f0000000000000000000000000000000000000000000000000000000000000000613d5f565b6126157f0000000000000000000000000000000000000000000000000000000000000000613d5f565b61263e7f0000000000000000000000000000000000000000000000000000000000000000613d5f565b60405160200161265093929190615a52565b604051602081830303815290604052905090565b600063ffffffff8211156126e05760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201527f3220626974730000000000000000000000000000000000000000000000000000606482015260840161036c565b5090565b8154600090818160058111156127415760006126ff84613dff565b61270990856158ef565b60008881526020902090915081015463ffffffff90811690871610156127315780915061273f565b61273c816001615869565b92505b505b600061274f87878585613ee7565b905080156127a057612774876127666001846158ef565b600091825260209091200190565b5464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166111f1565b6000979650505050505050565b61012f5460408051918252602082018390527fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a93910160405180910390a161012f55565b6000336127fd8184613f45565b6128495760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a2070726f706f7365722072657374726963746564000000604482015260640161036c565b600061285361192a565b65ffffffffffff169050612865611b7c565b61287483610a486001856158ef565b10156128e85760405162461bcd60e51b815260206004820152603160248201527f476f7665726e6f723a2070726f706f73657220766f7465732062656c6f77207060448201527f726f706f73616c207468726573686f6c64000000000000000000000000000000606482015260840161036c565b60006128fd8888888880519060200120611cbe565b905086518851146129765760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a20696e76616c69642070726f706f73616c206c656e677460448201527f6800000000000000000000000000000000000000000000000000000000000000606482015260840161036c565b85518851146129ed5760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a20696e76616c69642070726f706f73616c206c656e677460448201527f6800000000000000000000000000000000000000000000000000000000000000606482015260840161036c565b6000885111612a3e5760405162461bcd60e51b815260206004820152601860248201527f476f7665726e6f723a20656d7074792070726f706f73616c0000000000000000604482015260640161036c565b600081815260fe602052604090205467ffffffffffffffff1615612aca5760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a2070726f706f73616c20616c726561647920657869737460448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161036c565b6000612ad461117a565b612ade9084615869565b90506000612aea610b1e565b612af49083615869565b90506040518060e00160405280612b0a84614095565b67ffffffffffffffff1681526001600160a01b038716602082015260006040820152606001612b3883614095565b67ffffffffffffffff9081168252600060208084018290526040808501839052606094850183905288835260fe8252918290208551815492870151878501519186167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317680100000000000000006001600160a01b039094168402177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000060e09290921c91909102178155938501516080860151908416921c0217600183015560a08301516002909201805460c0909401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009094169215157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1692909217610100931515939093029290921790558a517f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e091859188918e918e91811115612cc257612cc2614c56565b604051908082528060200260200182016040528015612cf557816020015b6060815260200190600190039081612ce05790505b508d88888f604051612d0f99989796959493929190615ac8565b60405180910390a1509098975050505050505050565b606060678054610ceb9061569a565b606060688054610ceb9061569a565b600054610100900460ff16612dc05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b612dd181612dcc6113fe565b614115565b610cd9816141ba565b600054610100900460ff16612e575760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b612e62838383614247565b505050565b600054610100900460ff16612ee45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b565b600054610100900460ff16612f635760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b610cd9816142df565b600054610100900460ff16612fe95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b610cd981614397565b600054610100900460ff1661306f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b610cd981614414565b600065ffffffffffff8211156126e05760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201527f3820626974730000000000000000000000000000000000000000000000000000606482015260840161036c565b610193546040517f3a46b1a80000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482018590526000921690633a46b1a890604401602060405180830381865afa158015613162573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c491906156ed565b80546000908015611b73576131a0836127666001846158ef565b5464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166119c7565b6101f854604080516001600160a01b03928316815291831660208301527f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401910160405180910390a16101f880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060831561325e5750816119c7565b6119c78383614491565b600081116132de5760405162461bcd60e51b815260206004820152602760248201527f476f7665726e6f7253657474696e67733a20766f74696e6720706572696f642060448201527f746f6f206c6f7700000000000000000000000000000000000000000000000000606482015260840161036c565b6101305460408051918252602082018390527f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e8828910160405180910390a161013055565b6101315460408051918252602082018390527fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc05461910160405180910390a161013155565b600060646133718361147b565b610193546040517f8e539e8c000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b0390911690638e539e8c90602401602060405180830381865afa1580156133d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f891906156ed565b6134029190615ba0565b610b189190615bee565b60007f51159c06000000000000000000000000000000000000000000000000000000007fc6fba1f8000000000000000000000000000000000000000000000000000000007fbf26d897000000000000000000000000000000000000000000000000000000007f79dd796f000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000086168214806134e657507fffffffff00000000000000000000000000000000000000000000000000000000868116908216145b8061351557507fffffffff00000000000000000000000000000000000000000000000000000000868116908516145b8061356157507fffffffff0000000000000000000000000000000000000000000000000000000086167f4e2312e000000000000000000000000000000000000000000000000000000000145b8061132e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008716149695505050505050565b6000610b086144bb565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156135f7575060009050600361367b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561364b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166136745760006001925092505061367b565b9150600090505b94509492505050565b600081600481111561369857613698615138565b036136a05750565b60018160048111156136b4576136b4615138565b036137015760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161036c565b600281600481111561371557613715615138565b036137625760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161036c565b600381600481111561377657613776615138565b03610cd95760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161036c565b6000858152610161602090815260408083206001600160a01b0388168452600381019092529091205460ff16156138885760405162461bcd60e51b815260206004820152602760248201527f476f7665726e6f72566f74696e6753696d706c653a20766f746520616c72656160448201527f6479206361737400000000000000000000000000000000000000000000000000606482015260840161036c565b6001600160a01b0385166000908152600382016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560ff84166138f257828160000160008282546138e79190615869565b909155506123b59050565b60001960ff85160161391257828160010160008282546138e79190615869565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff85160161395057828160020160008282546138e79190615869565b60405162461bcd60e51b815260206004820152603560248201527f476f7665726e6f72566f74696e6753696d706c653a20696e76616c696420766160448201527f6c756520666f7220656e756d20566f7465547970650000000000000000000000606482015260840161036c565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8211156126e05760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203260448201527f3234206269747300000000000000000000000000000000000000000000000000606482015260840161036c565b600080613a6085858561452f565b915091505b935093915050565b815470010000000000000000000000000000000090819004600f0b6000818152600180860160205260409091209390935583546fffffffffffffffffffffffffffffffff908116939091011602179055565b6101f8546040517fe38335e50000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063e38335e5903490613b14908890889088906000908990600401615794565b6000604051808303818588803b158015613b2d57600080fd5b505af1158015613b41573d6000803e3d6000fd5b50505050505050505050565b600081815260fe60205260408120600281015460ff1615613b715750600792915050565b6002810154610100900460ff1615613b8c5750600292915050565b600083815260fe602052604081205467ffffffffffffffff1690819003613bf55760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a20756e6b6e6f776e2070726f706f73616c206964000000604482015260640161036c565b6000613bff61192a565b65ffffffffffff169050808210613c1b57506000949350505050565b600085815260fe602052604090206001015467ffffffffffffffff16818110613c4a5750600195945050505050565b613c5386614726565b8015613c7357506000868152610161602052604090208054600190910154115b15613c845750600495945050505050565b50600395945050505050565b600080613c9f86868686614774565b60008181526101f960205260409020549091501561167d576101f85460008281526101f96020526040908190205490517fc4d252f50000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163c4d252f591613d149160040190815260200190565b600060405180830381600087803b158015613d2e57600080fd5b505af1158015613d42573d6000803e3d6000fd5b50505060008281526101f960205260408120555095945050505050565b60606000613d6c8361489d565b600101905060008167ffffffffffffffff811115613d8c57613d8c614c56565b6040519080825280601f01601f191660200182016040528015613db6576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084613dc057509392505050565b600081600003613e1157506000919050565b60006001613e1e8461497f565b901c6001901b90506001818481613e3757613e37615bbf565b048201901c90506001818481613e4f57613e4f615bbf565b048201901c90506001818481613e6757613e67615bbf565b048201901c90506001818481613e7f57613e7f615bbf565b048201901c90506001818481613e9757613e97615bbf565b048201901c90506001818481613eaf57613eaf615bbf565b048201901c90506001818481613ec757613ec7615bbf565b048201901c90506119c781828581613ee157613ee1615bbf565b04614a13565b60005b81831015613f3d576000613efe8484614a29565b60008781526020902090915063ffffffff86169082015463ffffffff161115613f2957809250613f37565b613f34816001615869565b93505b50613eea565b509392505050565b80516000906034811015613f5d576001915050610b18565b8281017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec01517fffffffffffffffffffffffff000000000000000000000000000000000000000081167f2370726f706f7365723d3078000000000000000000000000000000000000000014613fd757600192505050610b18565b600080613fe56028856158ef565b90505b838110156140745760008061403488848151811061400857614008615906565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016614a44565b915091508161404c5760019650505050505050610b18565b8060ff166004856001600160a01b0316901b17935050508061406d90615a16565b9050613fe8565b50856001600160a01b0316816001600160a01b031614935050505092915050565b600067ffffffffffffffff8211156126e05760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201527f3420626974730000000000000000000000000000000000000000000000000000606482015260840161036c565b600054610100900460ff166141925760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b606761419e8382615c6f565b5060686141ab8282615c6f565b50506000606581905560665550565b600054610100900460ff166142375760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b60fd6142438282615c6f565b5050565b600054610100900460ff166142c45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b6142cd836127ad565b6142d682613268565b612e6281613321565b600054610100900460ff1661435c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b61019380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600054610100900460ff16610cd05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b600054610100900460ff16611abe5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b8151156144a15781518083602001fd5b8060405162461bcd60e51b815260040161036c9190614e58565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6144e6614b30565b6144ee614b89565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8254600090819080156146b757600061454d876127666001856158ef565b60408051808201909152905463ffffffff8082168084526401000000009092047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16602084015291925090871610156145e45760405162461bcd60e51b815260206004820152601b60248201527f436865636b706f696e743a2064656372656173696e67206b6579730000000000604482015260640161036c565b805163ffffffff8088169116036146425784614605886127666001866158ef565b80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092166401000000000263ffffffff9092169190911790556146a7565b6040805180820190915263ffffffff80881682527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff80881660208085019182528b54600181018d5560008d81529190912094519151909216640100000000029216919091179101555b602001519250839150613a659050565b50506040805180820190915263ffffffff80851682527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff80851660208085019182528854600181018a5560008a815291822095519251909316640100000000029190931617920191909155905081613a65565b600081815261016160205260408120600281015460018201546147499190615869565b600084815260fe602052604090205461476b9067ffffffffffffffff16611e87565b11159392505050565b60008061478386868686611cbe565b90506000614790826111fc565b905060028160078111156147a6576147a6615138565b141580156147c6575060068160078111156147c3576147c3615138565b14155b80156147e4575060078160078111156147e1576147e1615138565b14155b6148305760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a2070726f706f73616c206e6f7420616374697665000000604482015260640161036c565b600082815260fe60205260409081902060020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055517f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c906110029084815260200190565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106148e6577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310614912576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061493057662386f26fc10000830492506010015b6305f5e1008310614948576305f5e100830492506008015b612710831061495c57612710830492506004015b6064831061496e576064830492506002015b600a8310610b185760010192915050565b600080608083901c1561499457608092831c92015b604083901c156149a657604092831c92015b602083901c156149b857602092831c92015b601083901c156149ca57601092831c92015b600883901c156149dc57600892831c92015b600483901c156149ee57600492831c92015b600283901c15614a0057600292831c92015b600183901c15610b185760010192915050565b6000818310614a2257816119c7565b5090919050565b6000614a386002848418615bee565b6119c790848416615869565b60008060f883901c602f81118015614a5f5750603a8160ff16105b15614a92576001947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd09091019350915050565b8060ff166040108015614aa8575060478160ff16105b15614adb576001947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc99091019350915050565b8060ff166060108015614af1575060678160ff16105b15614b24576001947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa99091019350915050565b50600093849350915050565b600080614b3b612d25565b805190915015614b52578051602090910120919050565b6065548015614b615792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b600080614b94612d34565b805190915015614bab578051602090910120919050565b6066548015614b615792915050565b600060208284031215614bcc57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146119c757600080fd5b803560ff811681146113f957600080fd5b60008083601f840112614c1f57600080fd5b50813567ffffffffffffffff811115614c3757600080fd5b602083019150836020828501011115614c4f57600080fd5b9250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614cae57614cae614c56565b604052919050565b600067ffffffffffffffff821115614cd057614cd0614c56565b50601f01601f191660200190565b6000614cf1614cec84614cb6565b614c85565b9050828152838383011115614d0557600080fd5b828260208301376000602084830101529392505050565b600082601f830112614d2d57600080fd5b6119c783833560208501614cde565b60008060008060008060008060e0898b031215614d5857600080fd5b88359750614d6860208a01614bfc565b9650604089013567ffffffffffffffff80821115614d8557600080fd5b614d918c838d01614c0d565b909850965060608b0135915080821115614daa57600080fd5b50614db78b828c01614d1c565b945050614dc660808a01614bfc565b925060a0890135915060c089013590509295985092959890939650565b600060208284031215614df557600080fd5b5035919050565b60005b83811015614e17578181015183820152602001614dff565b83811115614e26576000848401525b50505050565b60008151808452614e44816020860160208601614dfc565b601f01601f19169290920160200192915050565b6020815260006119c76020830184614e2c565b6001600160a01b0381168114610cd957600080fd5b60008060008060808587031215614e9657600080fd5b8435614ea181614e6b565b93506020850135614eb181614e6b565b925060408501359150606085013567ffffffffffffffff811115614ed457600080fd5b614ee087828801614d1c565b91505092959194509250565b600067ffffffffffffffff821115614f0657614f06614c56565b5060051b60200190565b600082601f830112614f2157600080fd5b81356020614f31614cec83614eec565b82815260059290921b84018101918181019086841115614f5057600080fd5b8286015b84811015614f74578035614f6781614e6b565b8352918301918301614f54565b509695505050505050565b600082601f830112614f9057600080fd5b81356020614fa0614cec83614eec565b82815260059290921b84018101918181019086841115614fbf57600080fd5b8286015b84811015614f745780358352918301918301614fc3565b600082601f830112614feb57600080fd5b81356020614ffb614cec83614eec565b82815260059290921b8401810191818101908684111561501a57600080fd5b8286015b84811015614f7457803567ffffffffffffffff81111561503e5760008081fd5b61504c8986838b0101614d1c565b84525091830191830161501e565b6000806000806080858703121561507057600080fd5b843567ffffffffffffffff8082111561508857600080fd5b61509488838901614f10565b955060208701359150808211156150aa57600080fd5b6150b688838901614f7f565b945060408701359150808211156150cc57600080fd5b506150d987828801614fda565b949793965093946060013593505050565b600080600080600060a0868803121561510257600080fd5b8535945061511260208701614bfc565b935061512060408701614bfc565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600883106151a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600080604083850312156151bb57600080fd5b8235915060208301356151cd81614e6b565b809150509250929050565b600080604083850312156151eb57600080fd5b823591506151fb60208401614bfc565b90509250929050565b60008060008060006080868803121561521c57600080fd5b8535945061522c60208701614bfc565b9350604086013567ffffffffffffffff8082111561524957600080fd5b61525589838a01614c0d565b9095509350606088013591508082111561526e57600080fd5b5061527b88828901614d1c565b9150509295509295909350565b6000806000806060858703121561529e57600080fd5b843593506152ae60208601614bfc565b9250604085013567ffffffffffffffff8111156152ca57600080fd5b6152d687828801614c0d565b95989497509550505050565b600080600080608085870312156152f857600080fd5b843567ffffffffffffffff8082111561531057600080fd5b61531c88838901614f10565b9550602087013591508082111561533257600080fd5b61533e88838901614f7f565b9450604087013591508082111561535457600080fd5b61536088838901614fda565b9350606087013591508082111561537657600080fd5b508501601f8101871361538857600080fd5b614ee087823560208401614cde565b600081518084526020808501945080840160005b838110156153c7578151875295820195908201906001016153ab565b509495945050505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e06020820152600061540d60e0830189614e2c565b828103604084015261541f8189614e2c565b90508660608401526001600160a01b03861660808401528460a084015282810360c0840152610c148185615397565b60008060008060008060c0878903121561546757600080fd5b863561547281614e6b565b9550602087013561548281614e6b565b95989597505050506040840135936060810135936080820135935060a0909101359150565b6000806000606084860312156154bc57600080fd5b83356154c781614e6b565b925060208401359150604084013567ffffffffffffffff8111156154ea57600080fd5b6154f686828701614d1c565b9150509250925092565b60006020828403121561551257600080fd5b81356119c781614e6b565b600080600080600060a0868803121561553557600080fd5b853561554081614e6b565b9450602086013561555081614e6b565b9350604086013567ffffffffffffffff8082111561556d57600080fd5b61557989838a01614f7f565b9450606088013591508082111561558f57600080fd5b61559b89838a01614f7f565b9350608088013591508082111561526e57600080fd5b600080600080606085870312156155c757600080fd5b84356155d281614e6b565b935060208501359250604085013567ffffffffffffffff8111156152ca57600080fd5b6000806040838503121561560857600080fd5b823561561381614e6b565b946020939093013593505050565b600080600080600060a0868803121561563957600080fd5b853561564481614e6b565b9450602086013561565481614e6b565b93506040860135925060608601359150608086013567ffffffffffffffff81111561567e57600080fd5b61527b88828901614d1c565b8183823760009101908152919050565b600181811c908216806156ae57607f821691505b6020821081036156e7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156156ff57600080fd5b5051919050565b600081518084526020808501945080840160005b838110156153c75781516001600160a01b03168752958201959082019060010161571a565b600081518084526020808501808196508360051b8101915082860160005b85811015615787578284038952615775848351614e2c565b9885019893509084019060010161575d565b5091979650505050505050565b60a0815260006157a760a0830188615706565b82810360208401526157b98188615397565b905082810360408401526157cd818761573f565b60608401959095525050608001529392505050565b60c0815260006157f560c0830189615706565b82810360208401526158078189615397565b9050828103604084015261581b818861573f565b60608401969096525050608081019290925260a0909101529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561587c5761587c61583a565b500190565b60006020828403121561589357600080fd5b815167ffffffffffffffff8111156158aa57600080fd5b8201601f810184136158bb57600080fd5b80516158c9614cec82614cb6565b8181528560208385010111156158de57600080fd5b61167d826020830160208601614dfc565b6000828210156159015761590161583a565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561594757600080fd5b815165ffffffffffff811681146119c757600080fd5b6080815260006159706080830187615706565b82810360208401526159828187615397565b90508281036040840152615996818661573f565b91505082606083015295945050505050565b84815260ff8416602082015282604082015260806060820152600061132e6080830184614e2c565b85815260ff8516602082015283604082015260a0606082015260006159f860a0830185614e2c565b8281036080840152615a0a8185614e2c565b98975050505050505050565b60006000198203615a2957615a2961583a565b5060010190565b600060208284031215615a4257600080fd5b815180151581146119c757600080fd5b60008451615a64818460208901614dfc565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551615aa0816001850160208a01614dfc565b60019201918201528351615abb816002840160208801614dfc565b0160020195945050505050565b60006101208b835260206001600160a01b038c1681850152816040850152615af28285018c615706565b91508382036060850152615b06828b615397565b915083820360808501528189518084528284019150828160051b850101838c0160005b83811015615b5757601f19878403018552615b45838351614e2c565b94860194925090850190600101615b29565b505086810360a0880152615b6b818c61573f565b9450505050508560c08401528460e0840152828103610100840152615b908185614e2c565b9c9b505050505050505050505050565b6000816000190483118215151615615bba57615bba61583a565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615c24577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b601f821115612e6257600081815260208120601f850160051c81016020861015615c505750805b601f850160051c820191505b818110156123b557828155600101615c5c565b815167ffffffffffffffff811115615c8957615c89614c56565b615c9d81615c97845461569a565b84615c29565b602080601f831160018114615cd25760008415615cba5750858301515b600019600386901b1c1916600185901b1785556123b5565b600085815260208120601f198616915b82811015615d0157888601518255948401946001909101908401615ce2565b5085821015615d1f5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe476f7665726e6f723a2072656c617920726576657274656420776974686f7574206d657373616765a164736f6c634300080f000a", } // UpgradeGovernorABI is the input ABI used to generate the binding from. diff --git a/op-bindings/bindings/upgradegovernor_more.go b/kroma-bindings/bindings/upgradegovernor_more.go similarity index 84% rename from op-bindings/bindings/upgradegovernor_more.go rename to kroma-bindings/bindings/upgradegovernor_more.go index 0b01d505f..eabc9d37d 100644 --- a/op-bindings/bindings/upgradegovernor_more.go +++ b/kroma-bindings/bindings/upgradegovernor_more.go @@ -9,7 +9,7 @@ import ( "github.com/ethereum-optimism/optimism/op-bindings/solc" ) -const UpgradeGovernorStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)1033_storage\"},{\"astId\":1003,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_array(t_uint256)1033_storage\"},{\"astId\":1004,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_hashedName\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_bytes32\"},{\"astId\":1005,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_hashedVersion\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_bytes32\"},{\"astId\":1006,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_name\",\"offset\":0,\"slot\":\"103\",\"type\":\"t_string_storage\"},{\"astId\":1007,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_version\",\"offset\":0,\"slot\":\"104\",\"type\":\"t_string_storage\"},{\"astId\":1008,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"105\",\"type\":\"t_array(t_uint256)1031_storage\"},{\"astId\":1009,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"153\",\"type\":\"t_array(t_uint256)1033_storage\"},{\"astId\":1010,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"203\",\"type\":\"t_array(t_uint256)1033_storage\"},{\"astId\":1011,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_name\",\"offset\":0,\"slot\":\"253\",\"type\":\"t_string_storage\"},{\"astId\":1012,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_proposals\",\"offset\":0,\"slot\":\"254\",\"type\":\"t_mapping(t_uint256,t_struct(ProposalCore)1038_storage)\"},{\"astId\":1013,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_governanceCall\",\"offset\":0,\"slot\":\"255\",\"type\":\"t_struct(Bytes32Deque)1036_storage\"},{\"astId\":1014,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"257\",\"type\":\"t_array(t_uint256)1029_storage\"},{\"astId\":1015,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_votingDelay\",\"offset\":0,\"slot\":\"303\",\"type\":\"t_uint256\"},{\"astId\":1016,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_votingPeriod\",\"offset\":0,\"slot\":\"304\",\"type\":\"t_uint256\"},{\"astId\":1017,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_proposalThreshold\",\"offset\":0,\"slot\":\"305\",\"type\":\"t_uint256\"},{\"astId\":1018,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"306\",\"type\":\"t_array(t_uint256)1030_storage\"},{\"astId\":1019,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_proposalVotes\",\"offset\":0,\"slot\":\"353\",\"type\":\"t_mapping(t_uint256,t_struct(ProposalVote)1039_storage)\"},{\"astId\":1020,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"354\",\"type\":\"t_array(t_uint256)1032_storage\"},{\"astId\":1021,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"token\",\"offset\":0,\"slot\":\"403\",\"type\":\"t_contract(IERC5805Upgradeable)1034\"},{\"astId\":1022,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"404\",\"type\":\"t_array(t_uint256)1033_storage\"},{\"astId\":1023,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_quorumNumerator\",\"offset\":0,\"slot\":\"454\",\"type\":\"t_uint256\"},{\"astId\":1024,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_quorumNumeratorHistory\",\"offset\":0,\"slot\":\"455\",\"type\":\"t_struct(Trace224)1040_storage\"},{\"astId\":1025,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"456\",\"type\":\"t_array(t_uint256)1031_storage\"},{\"astId\":1026,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_timelock\",\"offset\":0,\"slot\":\"504\",\"type\":\"t_contract(TimelockControllerUpgradeable)1035\"},{\"astId\":1027,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_timelockIds\",\"offset\":0,\"slot\":\"505\",\"type\":\"t_mapping(t_uint256,t_bytes32)\"},{\"astId\":1028,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"506\",\"type\":\"t_array(t_uint256)1031_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_struct(Checkpoint224)1037_storage)dyn_storage\":{\"encoding\":\"dynamic_array\",\"label\":\"struct CheckpointsUpgradeable.Checkpoint224[]\",\"numberOfBytes\":\"32\"},\"t_array(t_uint256)1029_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[46]\",\"numberOfBytes\":\"1472\"},\"t_array(t_uint256)1030_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[47]\",\"numberOfBytes\":\"1504\"},\"t_array(t_uint256)1031_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[48]\",\"numberOfBytes\":\"1536\"},\"t_array(t_uint256)1032_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\"},\"t_array(t_uint256)1033_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes24\":{\"encoding\":\"inplace\",\"label\":\"bytes24\",\"numberOfBytes\":\"24\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_bytes4\":{\"encoding\":\"inplace\",\"label\":\"bytes4\",\"numberOfBytes\":\"4\"},\"t_contract(IERC5805Upgradeable)1034\":{\"encoding\":\"inplace\",\"label\":\"contract IERC5805Upgradeable\",\"numberOfBytes\":\"20\"},\"t_contract(TimelockControllerUpgradeable)1035\":{\"encoding\":\"inplace\",\"label\":\"contract TimelockControllerUpgradeable\",\"numberOfBytes\":\"20\"},\"t_int128\":{\"encoding\":\"inplace\",\"label\":\"int128\",\"numberOfBytes\":\"16\"},\"t_mapping(t_address,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_bool\"},\"t_mapping(t_int128,t_bytes32)\":{\"encoding\":\"mapping\",\"label\":\"mapping(int128 =\u003e bytes32)\",\"numberOfBytes\":\"32\",\"key\":\"t_int128\",\"value\":\"t_bytes32\"},\"t_mapping(t_uint256,t_bytes32)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e bytes32)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_bytes32\"},\"t_mapping(t_uint256,t_struct(ProposalCore)1038_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e struct GovernorUpgradeable.ProposalCore)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_struct(ProposalCore)1038_storage\"},\"t_mapping(t_uint256,t_struct(ProposalVote)1039_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e struct GovernorCountingSimpleUpgradeable.ProposalVote)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_struct(ProposalVote)1039_storage\"},\"t_string_storage\":{\"encoding\":\"bytes\",\"label\":\"string\",\"numberOfBytes\":\"32\"},\"t_struct(Bytes32Deque)1036_storage\":{\"encoding\":\"inplace\",\"label\":\"struct DoubleEndedQueueUpgradeable.Bytes32Deque\",\"numberOfBytes\":\"64\"},\"t_struct(Checkpoint224)1037_storage\":{\"encoding\":\"inplace\",\"label\":\"struct CheckpointsUpgradeable.Checkpoint224\",\"numberOfBytes\":\"32\"},\"t_struct(ProposalCore)1038_storage\":{\"encoding\":\"inplace\",\"label\":\"struct GovernorUpgradeable.ProposalCore\",\"numberOfBytes\":\"96\"},\"t_struct(ProposalVote)1039_storage\":{\"encoding\":\"inplace\",\"label\":\"struct GovernorCountingSimpleUpgradeable.ProposalVote\",\"numberOfBytes\":\"128\"},\"t_struct(Trace224)1040_storage\":{\"encoding\":\"inplace\",\"label\":\"struct CheckpointsUpgradeable.Trace224\",\"numberOfBytes\":\"32\"},\"t_uint224\":{\"encoding\":\"inplace\",\"label\":\"uint224\",\"numberOfBytes\":\"28\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint32\":{\"encoding\":\"inplace\",\"label\":\"uint32\",\"numberOfBytes\":\"4\"},\"t_uint64\":{\"encoding\":\"inplace\",\"label\":\"uint64\",\"numberOfBytes\":\"8\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" +const UpgradeGovernorStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)50_storage\"},{\"astId\":1003,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_array(t_uint256)50_storage\"},{\"astId\":1004,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_hashedName\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_bytes32\"},{\"astId\":1005,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_hashedVersion\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_bytes32\"},{\"astId\":1006,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_name\",\"offset\":0,\"slot\":\"103\",\"type\":\"t_string_storage\"},{\"astId\":1007,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_version\",\"offset\":0,\"slot\":\"104\",\"type\":\"t_string_storage\"},{\"astId\":1008,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"105\",\"type\":\"t_array(t_uint256)48_storage\"},{\"astId\":1009,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"153\",\"type\":\"t_array(t_uint256)50_storage\"},{\"astId\":1010,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"203\",\"type\":\"t_array(t_uint256)50_storage\"},{\"astId\":1011,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_name\",\"offset\":0,\"slot\":\"253\",\"type\":\"t_string_storage\"},{\"astId\":1012,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_proposals\",\"offset\":0,\"slot\":\"254\",\"type\":\"t_mapping(t_uint256,t_struct(ProposalCore)1033_storage)\"},{\"astId\":1013,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_governanceCall\",\"offset\":0,\"slot\":\"255\",\"type\":\"t_struct(Bytes32Deque)1031_storage\"},{\"astId\":1014,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"257\",\"type\":\"t_array(t_uint256)46_storage\"},{\"astId\":1015,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_votingDelay\",\"offset\":0,\"slot\":\"303\",\"type\":\"t_uint256\"},{\"astId\":1016,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_votingPeriod\",\"offset\":0,\"slot\":\"304\",\"type\":\"t_uint256\"},{\"astId\":1017,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_proposalThreshold\",\"offset\":0,\"slot\":\"305\",\"type\":\"t_uint256\"},{\"astId\":1018,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"306\",\"type\":\"t_array(t_uint256)47_storage\"},{\"astId\":1019,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_proposalVotes\",\"offset\":0,\"slot\":\"353\",\"type\":\"t_mapping(t_uint256,t_struct(ProposalVote)1034_storage)\"},{\"astId\":1020,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"354\",\"type\":\"t_array(t_uint256)49_storage\"},{\"astId\":1021,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"token\",\"offset\":0,\"slot\":\"403\",\"type\":\"t_contract(IERC5805Upgradeable)1029\"},{\"astId\":1022,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"404\",\"type\":\"t_array(t_uint256)50_storage\"},{\"astId\":1023,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_quorumNumerator\",\"offset\":0,\"slot\":\"454\",\"type\":\"t_uint256\"},{\"astId\":1024,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_quorumNumeratorHistory\",\"offset\":0,\"slot\":\"455\",\"type\":\"t_struct(Trace224)1035_storage\"},{\"astId\":1025,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"456\",\"type\":\"t_array(t_uint256)48_storage\"},{\"astId\":1026,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_timelock\",\"offset\":0,\"slot\":\"504\",\"type\":\"t_contract(TimelockControllerUpgradeable)1030\"},{\"astId\":1027,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"_timelockIds\",\"offset\":0,\"slot\":\"505\",\"type\":\"t_mapping(t_uint256,t_bytes32)\"},{\"astId\":1028,\"contract\":\"contracts/governance/UpgradeGovernor.sol:UpgradeGovernor\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"506\",\"type\":\"t_array(t_uint256)48_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_struct(Checkpoint224)1032_storage)dyn_storage\":{\"encoding\":\"dynamic_array\",\"label\":\"struct CheckpointsUpgradeable.Checkpoint224[]\",\"numberOfBytes\":\"32\",\"base\":\"t_struct(Checkpoint224)1032_storage\"},\"t_array(t_uint256)46_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[46]\",\"numberOfBytes\":\"1472\",\"base\":\"t_uint256\"},\"t_array(t_uint256)47_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[47]\",\"numberOfBytes\":\"1504\",\"base\":\"t_uint256\"},\"t_array(t_uint256)48_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[48]\",\"numberOfBytes\":\"1536\",\"base\":\"t_uint256\"},\"t_array(t_uint256)49_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\",\"base\":\"t_uint256\"},\"t_array(t_uint256)50_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\",\"base\":\"t_uint256\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes24\":{\"encoding\":\"inplace\",\"label\":\"bytes24\",\"numberOfBytes\":\"24\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_bytes4\":{\"encoding\":\"inplace\",\"label\":\"bytes4\",\"numberOfBytes\":\"4\"},\"t_contract(IERC5805Upgradeable)1029\":{\"encoding\":\"inplace\",\"label\":\"contract IERC5805Upgradeable\",\"numberOfBytes\":\"20\"},\"t_contract(TimelockControllerUpgradeable)1030\":{\"encoding\":\"inplace\",\"label\":\"contract TimelockControllerUpgradeable\",\"numberOfBytes\":\"20\"},\"t_int128\":{\"encoding\":\"inplace\",\"label\":\"int128\",\"numberOfBytes\":\"16\"},\"t_mapping(t_address,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_bool\"},\"t_mapping(t_int128,t_bytes32)\":{\"encoding\":\"mapping\",\"label\":\"mapping(int128 =\u003e bytes32)\",\"numberOfBytes\":\"32\",\"key\":\"t_int128\",\"value\":\"t_bytes32\"},\"t_mapping(t_uint256,t_bytes32)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e bytes32)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_bytes32\"},\"t_mapping(t_uint256,t_struct(ProposalCore)1033_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e struct GovernorUpgradeable.ProposalCore)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_struct(ProposalCore)1033_storage\"},\"t_mapping(t_uint256,t_struct(ProposalVote)1034_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e struct GovernorCountingSimpleUpgradeable.ProposalVote)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_struct(ProposalVote)1034_storage\"},\"t_string_storage\":{\"encoding\":\"bytes\",\"label\":\"string\",\"numberOfBytes\":\"32\"},\"t_struct(Bytes32Deque)1031_storage\":{\"encoding\":\"inplace\",\"label\":\"struct DoubleEndedQueueUpgradeable.Bytes32Deque\",\"numberOfBytes\":\"64\"},\"t_struct(Checkpoint224)1032_storage\":{\"encoding\":\"inplace\",\"label\":\"struct CheckpointsUpgradeable.Checkpoint224\",\"numberOfBytes\":\"32\"},\"t_struct(ProposalCore)1033_storage\":{\"encoding\":\"inplace\",\"label\":\"struct GovernorUpgradeable.ProposalCore\",\"numberOfBytes\":\"96\"},\"t_struct(ProposalVote)1034_storage\":{\"encoding\":\"inplace\",\"label\":\"struct GovernorCountingSimpleUpgradeable.ProposalVote\",\"numberOfBytes\":\"128\"},\"t_struct(Trace224)1035_storage\":{\"encoding\":\"inplace\",\"label\":\"struct CheckpointsUpgradeable.Trace224\",\"numberOfBytes\":\"32\"},\"t_uint224\":{\"encoding\":\"inplace\",\"label\":\"uint224\",\"numberOfBytes\":\"28\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint32\":{\"encoding\":\"inplace\",\"label\":\"uint32\",\"numberOfBytes\":\"4\"},\"t_uint64\":{\"encoding\":\"inplace\",\"label\":\"uint64\",\"numberOfBytes\":\"8\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" var UpgradeGovernorStorageLayout = new(solc.StorageLayout) diff --git a/op-bindings/bindings/validatorpool.go b/kroma-bindings/bindings/validatorpool.go similarity index 100% rename from op-bindings/bindings/validatorpool.go rename to kroma-bindings/bindings/validatorpool.go diff --git a/op-bindings/bindings/validatorpool_more.go b/kroma-bindings/bindings/validatorpool_more.go similarity index 88% rename from op-bindings/bindings/validatorpool_more.go rename to kroma-bindings/bindings/validatorpool_more.go index ae310e01d..1ac654953 100644 --- a/op-bindings/bindings/validatorpool_more.go +++ b/kroma-bindings/bindings/validatorpool_more.go @@ -9,7 +9,7 @@ import ( "github.com/ethereum-optimism/optimism/op-bindings/solc" ) -const ValidatorPoolStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L1/ValidatorPool.sol:ValidatorPool\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/L1/ValidatorPool.sol:ValidatorPool\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/L1/ValidatorPool.sol:ValidatorPool\",\"label\":\"_status\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_uint256\"},{\"astId\":1003,\"contract\":\"contracts/L1/ValidatorPool.sol:ValidatorPool\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_array(t_uint256)1011_storage\"},{\"astId\":1004,\"contract\":\"contracts/L1/ValidatorPool.sol:ValidatorPool\",\"label\":\"balances\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_mapping(t_address,t_uint256)\"},{\"astId\":1005,\"contract\":\"contracts/L1/ValidatorPool.sol:ValidatorPool\",\"label\":\"bonds\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_mapping(t_uint256,t_struct(Bond)1012_storage)\"},{\"astId\":1006,\"contract\":\"contracts/L1/ValidatorPool.sol:ValidatorPool\",\"label\":\"nextUnbondOutputIndex\",\"offset\":0,\"slot\":\"53\",\"type\":\"t_uint256\"},{\"astId\":1007,\"contract\":\"contracts/L1/ValidatorPool.sol:ValidatorPool\",\"label\":\"validators\",\"offset\":0,\"slot\":\"54\",\"type\":\"t_array(t_address)dyn_storage\"},{\"astId\":1008,\"contract\":\"contracts/L1/ValidatorPool.sol:ValidatorPool\",\"label\":\"validatorIndexes\",\"offset\":0,\"slot\":\"55\",\"type\":\"t_mapping(t_address,t_uint256)\"},{\"astId\":1009,\"contract\":\"contracts/L1/ValidatorPool.sol:ValidatorPool\",\"label\":\"nextPriorityValidator\",\"offset\":0,\"slot\":\"56\",\"type\":\"t_address\"},{\"astId\":1010,\"contract\":\"contracts/L1/ValidatorPool.sol:ValidatorPool\",\"label\":\"pendingBonds\",\"offset\":0,\"slot\":\"57\",\"type\":\"t_mapping(t_uint256,t_mapping(t_address,t_uint128))\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_address)dyn_storage\":{\"encoding\":\"dynamic_array\",\"label\":\"address[]\",\"numberOfBytes\":\"32\"},\"t_array(t_uint256)1011_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_mapping(t_address,t_uint128)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint128)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint128\"},\"t_mapping(t_address,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint256\"},\"t_mapping(t_uint256,t_mapping(t_address,t_uint128))\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e mapping(address =\u003e uint128))\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_mapping(t_address,t_uint128)\"},\"t_mapping(t_uint256,t_struct(Bond)1012_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e struct Types.Bond)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_struct(Bond)1012_storage\"},\"t_struct(Bond)1012_storage\":{\"encoding\":\"inplace\",\"label\":\"struct Types.Bond\",\"numberOfBytes\":\"32\"},\"t_uint128\":{\"encoding\":\"inplace\",\"label\":\"uint128\",\"numberOfBytes\":\"16\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" +const ValidatorPoolStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L1/ValidatorPool.sol:ValidatorPool\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/L1/ValidatorPool.sol:ValidatorPool\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/L1/ValidatorPool.sol:ValidatorPool\",\"label\":\"_status\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_uint256\"},{\"astId\":1003,\"contract\":\"contracts/L1/ValidatorPool.sol:ValidatorPool\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_array(t_uint256)49_storage\"},{\"astId\":1004,\"contract\":\"contracts/L1/ValidatorPool.sol:ValidatorPool\",\"label\":\"balances\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_mapping(t_address,t_uint256)\"},{\"astId\":1005,\"contract\":\"contracts/L1/ValidatorPool.sol:ValidatorPool\",\"label\":\"bonds\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_mapping(t_uint256,t_struct(Bond)1011_storage)\"},{\"astId\":1006,\"contract\":\"contracts/L1/ValidatorPool.sol:ValidatorPool\",\"label\":\"nextUnbondOutputIndex\",\"offset\":0,\"slot\":\"53\",\"type\":\"t_uint256\"},{\"astId\":1007,\"contract\":\"contracts/L1/ValidatorPool.sol:ValidatorPool\",\"label\":\"validators\",\"offset\":0,\"slot\":\"54\",\"type\":\"t_array(t_address)dyn_storage\"},{\"astId\":1008,\"contract\":\"contracts/L1/ValidatorPool.sol:ValidatorPool\",\"label\":\"validatorIndexes\",\"offset\":0,\"slot\":\"55\",\"type\":\"t_mapping(t_address,t_uint256)\"},{\"astId\":1009,\"contract\":\"contracts/L1/ValidatorPool.sol:ValidatorPool\",\"label\":\"nextPriorityValidator\",\"offset\":0,\"slot\":\"56\",\"type\":\"t_address\"},{\"astId\":1010,\"contract\":\"contracts/L1/ValidatorPool.sol:ValidatorPool\",\"label\":\"pendingBonds\",\"offset\":0,\"slot\":\"57\",\"type\":\"t_mapping(t_uint256,t_mapping(t_address,t_uint128))\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_address)dyn_storage\":{\"encoding\":\"dynamic_array\",\"label\":\"address[]\",\"numberOfBytes\":\"32\",\"base\":\"t_address\"},\"t_array(t_uint256)49_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\",\"base\":\"t_uint256\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_mapping(t_address,t_uint128)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint128)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint128\"},\"t_mapping(t_address,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint256\"},\"t_mapping(t_uint256,t_mapping(t_address,t_uint128))\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e mapping(address =\u003e uint128))\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_mapping(t_address,t_uint128)\"},\"t_mapping(t_uint256,t_struct(Bond)1011_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e struct Types.Bond)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_struct(Bond)1011_storage\"},\"t_struct(Bond)1011_storage\":{\"encoding\":\"inplace\",\"label\":\"struct Types.Bond\",\"numberOfBytes\":\"32\"},\"t_uint128\":{\"encoding\":\"inplace\",\"label\":\"uint128\",\"numberOfBytes\":\"16\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" var ValidatorPoolStorageLayout = new(solc.StorageLayout) diff --git a/op-bindings/bindings/validatorrewardvault.go b/kroma-bindings/bindings/validatorrewardvault.go similarity index 100% rename from op-bindings/bindings/validatorrewardvault.go rename to kroma-bindings/bindings/validatorrewardvault.go diff --git a/op-bindings/bindings/validatorrewardvault_more.go b/kroma-bindings/bindings/validatorrewardvault_more.go similarity index 100% rename from op-bindings/bindings/validatorrewardvault_more.go rename to kroma-bindings/bindings/validatorrewardvault_more.go diff --git a/kroma-bindings/bindings/weth9.go b/kroma-bindings/bindings/weth9.go new file mode 100644 index 000000000..026f2e1ae --- /dev/null +++ b/kroma-bindings/bindings/weth9.go @@ -0,0 +1,1113 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// WETH9MetaData contains all meta data concerning the WETH9 contract. +var WETH9MetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"guy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"guy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b50610115565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100bb57805160ff19168380011785556100e8565b828001600101855582156100e8579182015b828111156100e85782518255916020019190600101906100cd565b506100f49291506100f8565b5090565b61011291905b808211156100f457600081556001016100fe565b90565b6107f9806101246000396000f3fe6080604052600436106100bc5760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146102cb578063d0e30db0146100bc578063dd62ed3e14610311576100bc565b8063313ce5671461024b57806370a082311461027657806395d89b41146102b6576100bc565b806318160ddd116100a557806318160ddd146101aa57806323b872dd146101d15780632e1a7d4d14610221576100bc565b806306fdde03146100c6578063095ea7b314610150575b6100c4610359565b005b3480156100d257600080fd5b506100db6103a8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101155781810151838201526020016100fd565b50505050905090810190601f1680156101425780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015c57600080fd5b506101966004803603604081101561017357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610454565b604080519115158252519081900360200190f35b3480156101b657600080fd5b506101bf6104c7565b60408051918252519081900360200190f35b3480156101dd57600080fd5b50610196600480360360608110156101f457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356104cb565b34801561022d57600080fd5b506100c46004803603602081101561024457600080fd5b503561066b565b34801561025757600080fd5b50610260610700565b6040805160ff9092168252519081900360200190f35b34801561028257600080fd5b506101bf6004803603602081101561029957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610709565b3480156102c257600080fd5b506100db61071b565b3480156102d757600080fd5b50610196600480360360408110156102ee57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610793565b34801561031d57600080fd5b506101bf6004803603604081101561033457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166107a7565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b820191906000526020600020905b81548152906001019060200180831161042f57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120548211156104fd57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84163314801590610573575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105ed5773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156105b557600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020805483900390555b73ffffffffffffffffffffffffffffffffffffffff808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b3360009081526003602052604090205481111561068757600080fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f193505050501580156106c6573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b60006107a03384846104cb565b9392505050565b60046020908152600092835260408084209091529082529020548156fea265627a7a723158204eab82d55ccccb4cf646ee07646b140ab70b2b0f5227beb92f7394b56ccdc42364736f6c63430005110032", +} + +// WETH9ABI is the input ABI used to generate the binding from. +// Deprecated: Use WETH9MetaData.ABI instead. +var WETH9ABI = WETH9MetaData.ABI + +// WETH9Bin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use WETH9MetaData.Bin instead. +var WETH9Bin = WETH9MetaData.Bin + +// DeployWETH9 deploys a new Ethereum contract, binding an instance of WETH9 to it. +func DeployWETH9(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *WETH9, error) { + parsed, err := WETH9MetaData.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(WETH9Bin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &WETH9{WETH9Caller: WETH9Caller{contract: contract}, WETH9Transactor: WETH9Transactor{contract: contract}, WETH9Filterer: WETH9Filterer{contract: contract}}, nil +} + +// WETH9 is an auto generated Go binding around an Ethereum contract. +type WETH9 struct { + WETH9Caller // Read-only binding to the contract + WETH9Transactor // Write-only binding to the contract + WETH9Filterer // Log filterer for contract events +} + +// WETH9Caller is an auto generated read-only Go binding around an Ethereum contract. +type WETH9Caller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// WETH9Transactor is an auto generated write-only Go binding around an Ethereum contract. +type WETH9Transactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// WETH9Filterer is an auto generated log filtering Go binding around an Ethereum contract events. +type WETH9Filterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// WETH9Session is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type WETH9Session struct { + Contract *WETH9 // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// WETH9CallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type WETH9CallerSession struct { + Contract *WETH9Caller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// WETH9TransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type WETH9TransactorSession struct { + Contract *WETH9Transactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// WETH9Raw is an auto generated low-level Go binding around an Ethereum contract. +type WETH9Raw struct { + Contract *WETH9 // Generic contract binding to access the raw methods on +} + +// WETH9CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type WETH9CallerRaw struct { + Contract *WETH9Caller // Generic read-only contract binding to access the raw methods on +} + +// WETH9TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type WETH9TransactorRaw struct { + Contract *WETH9Transactor // Generic write-only contract binding to access the raw methods on +} + +// NewWETH9 creates a new instance of WETH9, bound to a specific deployed contract. +func NewWETH9(address common.Address, backend bind.ContractBackend) (*WETH9, error) { + contract, err := bindWETH9(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &WETH9{WETH9Caller: WETH9Caller{contract: contract}, WETH9Transactor: WETH9Transactor{contract: contract}, WETH9Filterer: WETH9Filterer{contract: contract}}, nil +} + +// NewWETH9Caller creates a new read-only instance of WETH9, bound to a specific deployed contract. +func NewWETH9Caller(address common.Address, caller bind.ContractCaller) (*WETH9Caller, error) { + contract, err := bindWETH9(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &WETH9Caller{contract: contract}, nil +} + +// NewWETH9Transactor creates a new write-only instance of WETH9, bound to a specific deployed contract. +func NewWETH9Transactor(address common.Address, transactor bind.ContractTransactor) (*WETH9Transactor, error) { + contract, err := bindWETH9(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &WETH9Transactor{contract: contract}, nil +} + +// NewWETH9Filterer creates a new log filterer instance of WETH9, bound to a specific deployed contract. +func NewWETH9Filterer(address common.Address, filterer bind.ContractFilterer) (*WETH9Filterer, error) { + contract, err := bindWETH9(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &WETH9Filterer{contract: contract}, nil +} + +// bindWETH9 binds a generic wrapper to an already deployed contract. +func bindWETH9(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := WETH9MetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_WETH9 *WETH9Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _WETH9.Contract.WETH9Caller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_WETH9 *WETH9Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WETH9.Contract.WETH9Transactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_WETH9 *WETH9Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _WETH9.Contract.WETH9Transactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_WETH9 *WETH9CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _WETH9.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_WETH9 *WETH9TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WETH9.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_WETH9 *WETH9TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _WETH9.Contract.contract.Transact(opts, method, params...) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address , address ) view returns(uint256) +func (_WETH9 *WETH9Caller) Allowance(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) { + var out []interface{} + err := _WETH9.contract.Call(opts, &out, "allowance", arg0, arg1) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address , address ) view returns(uint256) +func (_WETH9 *WETH9Session) Allowance(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _WETH9.Contract.Allowance(&_WETH9.CallOpts, arg0, arg1) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address , address ) view returns(uint256) +func (_WETH9 *WETH9CallerSession) Allowance(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _WETH9.Contract.Allowance(&_WETH9.CallOpts, arg0, arg1) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address ) view returns(uint256) +func (_WETH9 *WETH9Caller) BalanceOf(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { + var out []interface{} + err := _WETH9.contract.Call(opts, &out, "balanceOf", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address ) view returns(uint256) +func (_WETH9 *WETH9Session) BalanceOf(arg0 common.Address) (*big.Int, error) { + return _WETH9.Contract.BalanceOf(&_WETH9.CallOpts, arg0) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address ) view returns(uint256) +func (_WETH9 *WETH9CallerSession) BalanceOf(arg0 common.Address) (*big.Int, error) { + return _WETH9.Contract.BalanceOf(&_WETH9.CallOpts, arg0) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_WETH9 *WETH9Caller) Decimals(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _WETH9.contract.Call(opts, &out, "decimals") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_WETH9 *WETH9Session) Decimals() (uint8, error) { + return _WETH9.Contract.Decimals(&_WETH9.CallOpts) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_WETH9 *WETH9CallerSession) Decimals() (uint8, error) { + return _WETH9.Contract.Decimals(&_WETH9.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_WETH9 *WETH9Caller) Name(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _WETH9.contract.Call(opts, &out, "name") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_WETH9 *WETH9Session) Name() (string, error) { + return _WETH9.Contract.Name(&_WETH9.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_WETH9 *WETH9CallerSession) Name() (string, error) { + return _WETH9.Contract.Name(&_WETH9.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_WETH9 *WETH9Caller) Symbol(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _WETH9.contract.Call(opts, &out, "symbol") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_WETH9 *WETH9Session) Symbol() (string, error) { + return _WETH9.Contract.Symbol(&_WETH9.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_WETH9 *WETH9CallerSession) Symbol() (string, error) { + return _WETH9.Contract.Symbol(&_WETH9.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_WETH9 *WETH9Caller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _WETH9.contract.Call(opts, &out, "totalSupply") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_WETH9 *WETH9Session) TotalSupply() (*big.Int, error) { + return _WETH9.Contract.TotalSupply(&_WETH9.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_WETH9 *WETH9CallerSession) TotalSupply() (*big.Int, error) { + return _WETH9.Contract.TotalSupply(&_WETH9.CallOpts) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address guy, uint256 wad) returns(bool) +func (_WETH9 *WETH9Transactor) Approve(opts *bind.TransactOpts, guy common.Address, wad *big.Int) (*types.Transaction, error) { + return _WETH9.contract.Transact(opts, "approve", guy, wad) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address guy, uint256 wad) returns(bool) +func (_WETH9 *WETH9Session) Approve(guy common.Address, wad *big.Int) (*types.Transaction, error) { + return _WETH9.Contract.Approve(&_WETH9.TransactOpts, guy, wad) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address guy, uint256 wad) returns(bool) +func (_WETH9 *WETH9TransactorSession) Approve(guy common.Address, wad *big.Int) (*types.Transaction, error) { + return _WETH9.Contract.Approve(&_WETH9.TransactOpts, guy, wad) +} + +// Deposit is a paid mutator transaction binding the contract method 0xd0e30db0. +// +// Solidity: function deposit() payable returns() +func (_WETH9 *WETH9Transactor) Deposit(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WETH9.contract.Transact(opts, "deposit") +} + +// Deposit is a paid mutator transaction binding the contract method 0xd0e30db0. +// +// Solidity: function deposit() payable returns() +func (_WETH9 *WETH9Session) Deposit() (*types.Transaction, error) { + return _WETH9.Contract.Deposit(&_WETH9.TransactOpts) +} + +// Deposit is a paid mutator transaction binding the contract method 0xd0e30db0. +// +// Solidity: function deposit() payable returns() +func (_WETH9 *WETH9TransactorSession) Deposit() (*types.Transaction, error) { + return _WETH9.Contract.Deposit(&_WETH9.TransactOpts) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address dst, uint256 wad) returns(bool) +func (_WETH9 *WETH9Transactor) Transfer(opts *bind.TransactOpts, dst common.Address, wad *big.Int) (*types.Transaction, error) { + return _WETH9.contract.Transact(opts, "transfer", dst, wad) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address dst, uint256 wad) returns(bool) +func (_WETH9 *WETH9Session) Transfer(dst common.Address, wad *big.Int) (*types.Transaction, error) { + return _WETH9.Contract.Transfer(&_WETH9.TransactOpts, dst, wad) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address dst, uint256 wad) returns(bool) +func (_WETH9 *WETH9TransactorSession) Transfer(dst common.Address, wad *big.Int) (*types.Transaction, error) { + return _WETH9.Contract.Transfer(&_WETH9.TransactOpts, dst, wad) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address src, address dst, uint256 wad) returns(bool) +func (_WETH9 *WETH9Transactor) TransferFrom(opts *bind.TransactOpts, src common.Address, dst common.Address, wad *big.Int) (*types.Transaction, error) { + return _WETH9.contract.Transact(opts, "transferFrom", src, dst, wad) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address src, address dst, uint256 wad) returns(bool) +func (_WETH9 *WETH9Session) TransferFrom(src common.Address, dst common.Address, wad *big.Int) (*types.Transaction, error) { + return _WETH9.Contract.TransferFrom(&_WETH9.TransactOpts, src, dst, wad) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address src, address dst, uint256 wad) returns(bool) +func (_WETH9 *WETH9TransactorSession) TransferFrom(src common.Address, dst common.Address, wad *big.Int) (*types.Transaction, error) { + return _WETH9.Contract.TransferFrom(&_WETH9.TransactOpts, src, dst, wad) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d. +// +// Solidity: function withdraw(uint256 wad) returns() +func (_WETH9 *WETH9Transactor) Withdraw(opts *bind.TransactOpts, wad *big.Int) (*types.Transaction, error) { + return _WETH9.contract.Transact(opts, "withdraw", wad) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d. +// +// Solidity: function withdraw(uint256 wad) returns() +func (_WETH9 *WETH9Session) Withdraw(wad *big.Int) (*types.Transaction, error) { + return _WETH9.Contract.Withdraw(&_WETH9.TransactOpts, wad) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d. +// +// Solidity: function withdraw(uint256 wad) returns() +func (_WETH9 *WETH9TransactorSession) Withdraw(wad *big.Int) (*types.Transaction, error) { + return _WETH9.Contract.Withdraw(&_WETH9.TransactOpts, wad) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_WETH9 *WETH9Transactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { + return _WETH9.contract.RawTransact(opts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_WETH9 *WETH9Session) Fallback(calldata []byte) (*types.Transaction, error) { + return _WETH9.Contract.Fallback(&_WETH9.TransactOpts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_WETH9 *WETH9TransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _WETH9.Contract.Fallback(&_WETH9.TransactOpts, calldata) +} + +// WETH9ApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the WETH9 contract. +type WETH9ApprovalIterator struct { + Event *WETH9Approval // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WETH9ApprovalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WETH9Approval) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WETH9Approval) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WETH9ApprovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WETH9ApprovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WETH9Approval represents a Approval event raised by the WETH9 contract. +type WETH9Approval struct { + Src common.Address + Guy common.Address + Wad *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed src, address indexed guy, uint256 wad) +func (_WETH9 *WETH9Filterer) FilterApproval(opts *bind.FilterOpts, src []common.Address, guy []common.Address) (*WETH9ApprovalIterator, error) { + + var srcRule []interface{} + for _, srcItem := range src { + srcRule = append(srcRule, srcItem) + } + var guyRule []interface{} + for _, guyItem := range guy { + guyRule = append(guyRule, guyItem) + } + + logs, sub, err := _WETH9.contract.FilterLogs(opts, "Approval", srcRule, guyRule) + if err != nil { + return nil, err + } + return &WETH9ApprovalIterator{contract: _WETH9.contract, event: "Approval", logs: logs, sub: sub}, nil +} + +// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed src, address indexed guy, uint256 wad) +func (_WETH9 *WETH9Filterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *WETH9Approval, src []common.Address, guy []common.Address) (event.Subscription, error) { + + var srcRule []interface{} + for _, srcItem := range src { + srcRule = append(srcRule, srcItem) + } + var guyRule []interface{} + for _, guyItem := range guy { + guyRule = append(guyRule, guyItem) + } + + logs, sub, err := _WETH9.contract.WatchLogs(opts, "Approval", srcRule, guyRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WETH9Approval) + if err := _WETH9.contract.UnpackLog(event, "Approval", 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 +} + +// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed src, address indexed guy, uint256 wad) +func (_WETH9 *WETH9Filterer) ParseApproval(log types.Log) (*WETH9Approval, error) { + event := new(WETH9Approval) + if err := _WETH9.contract.UnpackLog(event, "Approval", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WETH9DepositIterator is returned from FilterDeposit and is used to iterate over the raw logs and unpacked data for Deposit events raised by the WETH9 contract. +type WETH9DepositIterator struct { + Event *WETH9Deposit // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WETH9DepositIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WETH9Deposit) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WETH9Deposit) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WETH9DepositIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WETH9DepositIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WETH9Deposit represents a Deposit event raised by the WETH9 contract. +type WETH9Deposit struct { + Dst common.Address + Wad *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDeposit is a free log retrieval operation binding the contract event 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c. +// +// Solidity: event Deposit(address indexed dst, uint256 wad) +func (_WETH9 *WETH9Filterer) FilterDeposit(opts *bind.FilterOpts, dst []common.Address) (*WETH9DepositIterator, error) { + + var dstRule []interface{} + for _, dstItem := range dst { + dstRule = append(dstRule, dstItem) + } + + logs, sub, err := _WETH9.contract.FilterLogs(opts, "Deposit", dstRule) + if err != nil { + return nil, err + } + return &WETH9DepositIterator{contract: _WETH9.contract, event: "Deposit", logs: logs, sub: sub}, nil +} + +// WatchDeposit is a free log subscription operation binding the contract event 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c. +// +// Solidity: event Deposit(address indexed dst, uint256 wad) +func (_WETH9 *WETH9Filterer) WatchDeposit(opts *bind.WatchOpts, sink chan<- *WETH9Deposit, dst []common.Address) (event.Subscription, error) { + + var dstRule []interface{} + for _, dstItem := range dst { + dstRule = append(dstRule, dstItem) + } + + logs, sub, err := _WETH9.contract.WatchLogs(opts, "Deposit", dstRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WETH9Deposit) + if err := _WETH9.contract.UnpackLog(event, "Deposit", 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 +} + +// ParseDeposit is a log parse operation binding the contract event 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c. +// +// Solidity: event Deposit(address indexed dst, uint256 wad) +func (_WETH9 *WETH9Filterer) ParseDeposit(log types.Log) (*WETH9Deposit, error) { + event := new(WETH9Deposit) + if err := _WETH9.contract.UnpackLog(event, "Deposit", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WETH9TransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the WETH9 contract. +type WETH9TransferIterator struct { + Event *WETH9Transfer // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WETH9TransferIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WETH9Transfer) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WETH9Transfer) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WETH9TransferIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WETH9TransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WETH9Transfer represents a Transfer event raised by the WETH9 contract. +type WETH9Transfer struct { + Src common.Address + Dst common.Address + Wad *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed src, address indexed dst, uint256 wad) +func (_WETH9 *WETH9Filterer) FilterTransfer(opts *bind.FilterOpts, src []common.Address, dst []common.Address) (*WETH9TransferIterator, error) { + + var srcRule []interface{} + for _, srcItem := range src { + srcRule = append(srcRule, srcItem) + } + var dstRule []interface{} + for _, dstItem := range dst { + dstRule = append(dstRule, dstItem) + } + + logs, sub, err := _WETH9.contract.FilterLogs(opts, "Transfer", srcRule, dstRule) + if err != nil { + return nil, err + } + return &WETH9TransferIterator{contract: _WETH9.contract, event: "Transfer", logs: logs, sub: sub}, nil +} + +// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed src, address indexed dst, uint256 wad) +func (_WETH9 *WETH9Filterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *WETH9Transfer, src []common.Address, dst []common.Address) (event.Subscription, error) { + + var srcRule []interface{} + for _, srcItem := range src { + srcRule = append(srcRule, srcItem) + } + var dstRule []interface{} + for _, dstItem := range dst { + dstRule = append(dstRule, dstItem) + } + + logs, sub, err := _WETH9.contract.WatchLogs(opts, "Transfer", srcRule, dstRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WETH9Transfer) + if err := _WETH9.contract.UnpackLog(event, "Transfer", 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 +} + +// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed src, address indexed dst, uint256 wad) +func (_WETH9 *WETH9Filterer) ParseTransfer(log types.Log) (*WETH9Transfer, error) { + event := new(WETH9Transfer) + if err := _WETH9.contract.UnpackLog(event, "Transfer", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WETH9WithdrawalIterator is returned from FilterWithdrawal and is used to iterate over the raw logs and unpacked data for Withdrawal events raised by the WETH9 contract. +type WETH9WithdrawalIterator struct { + Event *WETH9Withdrawal // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WETH9WithdrawalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WETH9Withdrawal) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WETH9Withdrawal) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WETH9WithdrawalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WETH9WithdrawalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WETH9Withdrawal represents a Withdrawal event raised by the WETH9 contract. +type WETH9Withdrawal struct { + Src common.Address + Wad *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawal is a free log retrieval operation binding the contract event 0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65. +// +// Solidity: event Withdrawal(address indexed src, uint256 wad) +func (_WETH9 *WETH9Filterer) FilterWithdrawal(opts *bind.FilterOpts, src []common.Address) (*WETH9WithdrawalIterator, error) { + + var srcRule []interface{} + for _, srcItem := range src { + srcRule = append(srcRule, srcItem) + } + + logs, sub, err := _WETH9.contract.FilterLogs(opts, "Withdrawal", srcRule) + if err != nil { + return nil, err + } + return &WETH9WithdrawalIterator{contract: _WETH9.contract, event: "Withdrawal", logs: logs, sub: sub}, nil +} + +// WatchWithdrawal is a free log subscription operation binding the contract event 0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65. +// +// Solidity: event Withdrawal(address indexed src, uint256 wad) +func (_WETH9 *WETH9Filterer) WatchWithdrawal(opts *bind.WatchOpts, sink chan<- *WETH9Withdrawal, src []common.Address) (event.Subscription, error) { + + var srcRule []interface{} + for _, srcItem := range src { + srcRule = append(srcRule, srcItem) + } + + logs, sub, err := _WETH9.contract.WatchLogs(opts, "Withdrawal", srcRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WETH9Withdrawal) + if err := _WETH9.contract.UnpackLog(event, "Withdrawal", 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 +} + +// ParseWithdrawal is a log parse operation binding the contract event 0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65. +// +// Solidity: event Withdrawal(address indexed src, uint256 wad) +func (_WETH9 *WETH9Filterer) ParseWithdrawal(log types.Log) (*WETH9Withdrawal, error) { + event := new(WETH9Withdrawal) + if err := _WETH9.contract.UnpackLog(event, "Withdrawal", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/kroma-bindings/bindings/weth9_more.go b/kroma-bindings/bindings/weth9_more.go new file mode 100644 index 000000000..a8d984013 --- /dev/null +++ b/kroma-bindings/bindings/weth9_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const WETH9StorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/vendor/WETH9.sol:WETH9\",\"label\":\"name\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_string_storage\"},{\"astId\":1001,\"contract\":\"contracts/vendor/WETH9.sol:WETH9\",\"label\":\"symbol\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_string_storage\"},{\"astId\":1002,\"contract\":\"contracts/vendor/WETH9.sol:WETH9\",\"label\":\"decimals\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_uint8\"},{\"astId\":1003,\"contract\":\"contracts/vendor/WETH9.sol:WETH9\",\"label\":\"balanceOf\",\"offset\":0,\"slot\":\"3\",\"type\":\"t_mapping(t_address,t_uint256)\"},{\"astId\":1004,\"contract\":\"contracts/vendor/WETH9.sol:WETH9\",\"label\":\"allowance\",\"offset\":0,\"slot\":\"4\",\"type\":\"t_mapping(t_address,t_mapping(t_address,t_uint256))\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_mapping(t_address,t_mapping(t_address,t_uint256))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(address =\u003e uint256))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_address,t_uint256)\"},\"t_mapping(t_address,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint256\"},\"t_string_storage\":{\"encoding\":\"bytes\",\"label\":\"string\",\"numberOfBytes\":\"32\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" + +var WETH9StorageLayout = new(solc.StorageLayout) + +var WETH9DeployedBin = "0x6080604052600436106100bc5760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146102cb578063d0e30db0146100bc578063dd62ed3e14610311576100bc565b8063313ce5671461024b57806370a082311461027657806395d89b41146102b6576100bc565b806318160ddd116100a557806318160ddd146101aa57806323b872dd146101d15780632e1a7d4d14610221576100bc565b806306fdde03146100c6578063095ea7b314610150575b6100c4610359565b005b3480156100d257600080fd5b506100db6103a8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101155781810151838201526020016100fd565b50505050905090810190601f1680156101425780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015c57600080fd5b506101966004803603604081101561017357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610454565b604080519115158252519081900360200190f35b3480156101b657600080fd5b506101bf6104c7565b60408051918252519081900360200190f35b3480156101dd57600080fd5b50610196600480360360608110156101f457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356104cb565b34801561022d57600080fd5b506100c46004803603602081101561024457600080fd5b503561066b565b34801561025757600080fd5b50610260610700565b6040805160ff9092168252519081900360200190f35b34801561028257600080fd5b506101bf6004803603602081101561029957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610709565b3480156102c257600080fd5b506100db61071b565b3480156102d757600080fd5b50610196600480360360408110156102ee57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610793565b34801561031d57600080fd5b506101bf6004803603604081101561033457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166107a7565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b820191906000526020600020905b81548152906001019060200180831161042f57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120548211156104fd57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84163314801590610573575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105ed5773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156105b557600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020805483900390555b73ffffffffffffffffffffffffffffffffffffffff808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b3360009081526003602052604090205481111561068757600080fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f193505050501580156106c6573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b60006107a03384846104cb565b9392505050565b60046020908152600092835260408084209091529082529020548156fea265627a7a723158204eab82d55ccccb4cf646ee07646b140ab70b2b0f5227beb92f7394b56ccdc42364736f6c63430005110032" + +func init() { + if err := json.Unmarshal([]byte(WETH9StorageLayoutJSON), WETH9StorageLayout); err != nil { + panic(err) + } + + layouts["WETH9"] = WETH9StorageLayout + deployedBytecodes["WETH9"] = WETH9DeployedBin +} diff --git a/op-bindings/bindings/zkmerkletrie.go b/kroma-bindings/bindings/zkmerkletrie.go similarity index 100% rename from op-bindings/bindings/zkmerkletrie.go rename to kroma-bindings/bindings/zkmerkletrie.go diff --git a/kroma-bindings/bindings/zkmerkletrie_more.go b/kroma-bindings/bindings/zkmerkletrie_more.go new file mode 100644 index 000000000..6ccb1d439 --- /dev/null +++ b/kroma-bindings/bindings/zkmerkletrie_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const ZKMerkleTrieStorageLayoutJSON = "{\"storage\":null,\"types\":{}}" + +var ZKMerkleTrieStorageLayout = new(solc.StorageLayout) + +var ZKMerkleTrieDeployedBin = "0x608060405234801561001057600080fd5b50600436106100415760003560e01c806312e64a7214610046578063c423b1e81461006e578063dc8b50381461008f575b600080fd5b6100596100543660046117b2565b6100db565b60405190151581526020015b60405180910390f35b61008161007c366004611827565b6101a6565b6040516100659291906118f1565b6100b67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610065565b6040517fc423b1e800000000000000000000000000000000000000000000000000000000815260009081908190309063c423b1e890610122908a908990899060040161190c565b600060405180830381865afa15801561013f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610185919081019061199c565b9150915081801561019b575061019b868261074b565b979650505050505050565b600060606002845110156102275760405162461bcd60e51b815260206004820152602960248201527f5a4b4d65726b6c65547269653a2070726f76696465642070726f6f662069732060448201527f746f6f2073686f7274000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61027e84600186516102399190611a5d565b8151811061024957610249611a74565b602002602001015180516020909101207f950654da67865a81bc70e45f3230f5179f08e29c66184bf746f71050f117b3b81490565b6102f05760405162461bcd60e51b815260206004820152602d60248201527f5a4b4d65726b6c65547269653a20746865206c617374206974656d206973206e60448201527f6f74206d61676963206861736800000000000000000000000000000000000000606482015260840161021e565b60006102fb86610767565b9050600061030886610846565b90506103526040805161010081019091528060008152600060208201819052604082018190526060808301829052608083015260a0820181905260c0820181905260e09091015290565b60408051602081019091526000808252835190918291829190829061037990600290611a5d565b90505b86818151811061038e5761038e611a74565b6020026020010151602001519550600060038111156103af576103af611aa3565b865160038111156103c2576103c2611aa3565b036104a05760006103d38983610939565b90508015610433578660200151861461042e5760405162461bcd60e51b815260206004820152601b60248201527f5a4b4d65726b6c65547269653a20696e76616c6964206b6579204c0000000000604482015260640161021e565b610486565b866040015186146104865760405162461bcd60e51b815260206004820152601b60248201527f5a4b4d65726b6c65547269653a20696e76616c6964206b657920520000000000604482015260640161021e565b61049887602001518860400151610996565b9550506106b5565b6001865160038111156104b5576104b5611aa3565b0361061857831580156104c6575082155b6105385760405162461bcd60e51b815260206004820152602660248201527f5a4b4d65726b6c65547269653a206475706c696361746564207465726d696e6160448201527f6c206e6f64650000000000000000000000000000000000000000000000000000606482015260840161021e565b87866060015114935083156107385761056b600160001b87606001516105668960a001518a60800151610a63565b610bff565b6080870151805160208102825260e0890151929750909350839115610611578e8860e00151148061059f5750898860e00151145b6106115760405162461bcd60e51b815260206004820152602260248201527f5a4b4d65726b6c65547269653a20696e76616c6964206b657920707265696d6160448201527f6765000000000000000000000000000000000000000000000000000000000000606482015260840161021e565b50506106b5565b60028651600381111561062d5761062d611aa3565b036106b5578315801561063e575082155b6106b05760405162461bcd60e51b815260206004820152602660248201527f5a4b4d65726b6c65547269653a206475706c696361746564207465726d696e6160448201527f6c206e6f64650000000000000000000000000000000000000000000000000000606482015260840161021e565b600192505b80600003610711578a851461070c5760405162461bcd60e51b815260206004820152601960248201527f5a4b4d65726b65547269653a20696e76616c696420726f6f7400000000000000604482015260640161021e565b610738565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0161037c565b50919b919a509098505050505050505050565b6000818051906020012083805190602001201490505b92915050565b600080600061077584610d77565b6040805180820182528381526020810183905290517f299e566000000000000000000000000000000000000000000000000000000000815292945090925073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163299e5660916107fd91600401611ad2565b602060405180830381865afa15801561081a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083e9190611b03565b949350505050565b805160609060008167ffffffffffffffff811115610866576108666115f9565b60405190808252806020026020018201604052801561089f57816020015b61088c61159a565b8152602001906001900390816108845790505b50905060005b6108b0600184611a5d565b8110156109315760006108db8683815181106108ce576108ce611a74565b6020026020010151610d9f565b905060405180604001604052808784815181106108fa576108fa611a74565b602002602001015181526020018281525083838151811061091d5761091d611a74565b6020908102919091010152506001016108a5565b509392505050565b6000610100821061098c5760405162461bcd60e51b815260206004820152601c60248201527f5a4b4d65726b6c65547269653a20746f6f206c6f6e6720646570746800000000604482015260640161021e565b506001901b161590565b6040805180820182528381526020810183905290517f299e566000000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169163299e566091610a1b91600401611ad2565b602060405180830381865afa158015610a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5c9190611b03565b9392505050565b6000600182511015610add5760405162461bcd60e51b815260206004820152602b60248201527f5a4b547269654861736865723a20746f6f206665772076616c75657320666f7260448201527f205f76616c756548617368000000000000000000000000000000000000000000606482015260840161021e565b6000825167ffffffffffffffff811115610af957610af96115f9565b604051908082528060200260200182016040528015610b22578160200160208202803683370190505b50905060005b8351811015610bc8576001811b851663ffffffff1615610b8757610b64848281518110610b5757610b57611a74565b6020026020010151610767565b828281518110610b7657610b76611a74565b602002602001018181525050610bc0565b838181518110610b9957610b99611a74565b6020026020010151828281518110610bb357610bb3611a74565b6020026020010181815250505b600101610b28565b50600283511015610bf65780600081518110610be657610be6611a74565b6020026020010151915050610761565b61083e81611122565b6040805180820182528481526020810184905290517f299e56600000000000000000000000000000000000000000000000000000000081526000917f00000000000000000000000000000000000000000000000000000000000000009173ffffffffffffffffffffffffffffffffffffffff83169163299e566091610c879190600401611ad2565b602060405180830381865afa158015610ca4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc89190611b03565b6040805180820182528281526020810186905290517f299e566000000000000000000000000000000000000000000000000000000000815291965073ffffffffffffffffffffffffffffffffffffffff83169163299e566091610d2d91600401611ad2565b602060405180830381865afa158015610d4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6e9190611b03565b95945050505050565b60008082608081901b610d8a8260801c90565b610d948260801c90565b935093505050915091565b60408051610100810182526000808252602082018190529181018290526060808201839052608082015260a0810182905260c0810182905260e081019190915260408051610100810182526000808252602082018190529181018290526060808201839052608082015260a0810182905260c0810182905260e08101919091526000610e53846040805180820182526060815260006020918201528151808301909252828101825291519181019190915290565b90506000610e608261130c565b60ff16905080610e8b57610e7382611393565b6020840152610e8182611393565b60408401526110de565b6001810361101857610e9c82611393565b6060840152600080610ead84611431565b60ff16915091508163ffffffff166001148015610eca5750806001145b80610ee657508163ffffffff166004148015610ee65750806004145b610f585760405162461bcd60e51b815260206004820152602360248201527f4e6f64655265616465723a20696e76616c696420636f6d70726573736564466c60448201527f6167730000000000000000000000000000000000000000000000000000000000606482015260840161021e565b63ffffffff821660a08601528067ffffffffffffffff811115610f7d57610f7d6115f9565b604051908082528060200260200182016040528015610fa6578160200160208202803683370190505b50608086015260005b81811015610fe957610fc085611393565b86608001518281518110610fd657610fd6611a74565b6020908102919091010152600101610faf565b506000610ff58561130c565b60ff16905080156110105761100a85826114cb565b60e08701525b5050506110de565b600281146110de57600381036110965760405162461bcd60e51b815260206004820152602560248201527f4e6f64655265616465723a20756e657870656374656420726f6f74206e6f646560448201527f2074797065000000000000000000000000000000000000000000000000000000606482015260840161021e565b60405162461bcd60e51b815260206004820152601d60248201527f4e6f64655265616465723a20696e76616c6964206e6f64652074797065000000604482015260640161021e565b8060038111156110f0576110f0611aa3565b8390600381111561110357611103611aa3565b9081600381111561111657611116611aa3565b90525091949350505050565b600060048251101561119c5760405162461bcd60e51b815260206004820152602b60248201527f5a4b547269654861736865723a20746f6f206665772076616c75657320666f7260448201527f205f68617368456c656d73000000000000000000000000000000000000000000606482015260840161021e565b81517f00000000000000000000000000000000000000000000000000000000000000009060009081906001906002905b808310156112e457600094505b808510156112d6578285019350808410156112cd578573ffffffffffffffffffffffffffffffffffffffff1663299e566060405180604001604052808b898151811061122757611227611a74565b602002602001015181526020018b888151811061124657611246611a74565b60200260200101518152506040518263ffffffff1660e01b815260040161126d9190611ad2565b602060405180830381865afa15801561128a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ae9190611b03565b8886815181106112c0576112c0611a74565b6020026020010181815250505b938101936111d9565b909150600182901b906111cc565b876000815181106112f7576112f7611a74565b60200260200101519650505050505050919050565b60006001826020015110156113635760405162461bcd60e51b815260206004820152601f60248201527f4e6f64655265616465723a20746f6f2073686f727420666f722075696e743800604482015260640161021e565b81518051600180830180865260208601805191949360f81c9291611388908390611a5d565b905250949350505050565b60006020826020015110156114105760405162461bcd60e51b815260206004820152602160248201527f4e6f64655265616465723a20746f6f2073686f727420666f722062797465733360448201527f3200000000000000000000000000000000000000000000000000000000000000606482015260840161021e565b81518051602080830180865281860180519194939291611388908390611a5d565b6000806004836020015110156114895760405162461bcd60e51b815260206004820181905260248201527f4e6f64655265616465723a20746f6f2073686f727420666f722075696e743332604482015260640161021e565b8251805160048083018087526020870180519194939260f084901c9260f885901c92906114b7908390611a5d565b90525060ff90911697909650945050505050565b600081836020015110156115475760405162461bcd60e51b815260206004820152602160248201527f4e6f64655265616465723a20746f6f2073686f727420666f72206e206279746560448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161021e565b825160609060008061155a866008611b1c565b61156690610100611a5d565b8351848801808a5260208a01805191975091831c9450919250879161158c908390611a5d565b905250909695505050505050565b6040518060400160405280606081526020016115f46040805161010081019091528060008152600060208201819052604082018190526060808301829052608083015260a0820181905260c0820181905260e09091015290565b905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561166f5761166f6115f9565b604052919050565b600067ffffffffffffffff821115611691576116916115f9565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126116ce57600080fd5b81356116e16116dc82611677565b611628565b8181528460208386010111156116f657600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261172457600080fd5b8135602067ffffffffffffffff80831115611741576117416115f9565b8260051b611750838201611628565b938452858101830193838101908886111561176a57600080fd5b84880192505b858310156117a6578235848111156117885760008081fd5b6117968a87838c01016116bd565b8352509184019190840190611770565b98975050505050505050565b600080600080608085870312156117c857600080fd5b84359350602085013567ffffffffffffffff808211156117e757600080fd5b6117f3888389016116bd565b9450604087013591508082111561180957600080fd5b5061181687828801611713565b949793965093946060013593505050565b60008060006060848603121561183c57600080fd5b83359250602084013567ffffffffffffffff81111561185a57600080fd5b61186686828701611713565b925050604084013590509250925092565b60005b8381101561189257818101518382015260200161187a565b838111156118a1576000848401525b50505050565b600081518084526118bf816020860160208601611877565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b821515815260406020820152600061083e60408301846118a7565b600060608201858352602060608185015281865180845260808601915060808160051b870101935082880160005b82811015611986577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808887030184526119748683516118a7565b9550928401929084019060010161193a565b5050505050604092909201929092529392505050565b600080604083850312156119af57600080fd5b825180151581146119bf57600080fd5b602084015190925067ffffffffffffffff8111156119dc57600080fd5b8301601f810185136119ed57600080fd5b80516119fb6116dc82611677565b818152866020838501011115611a1057600080fd5b611a21826020830160208601611877565b8093505050509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611a6f57611a6f611a2e565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60408101818360005b6002811015611afa578151835260209283019290910190600101611adb565b50505092915050565b600060208284031215611b1557600080fd5b5051919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611b5457611b54611a2e565b50029056fea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(ZKMerkleTrieStorageLayoutJSON), ZKMerkleTrieStorageLayout); err != nil { + panic(err) + } + + layouts["ZKMerkleTrie"] = ZKMerkleTrieStorageLayout + deployedBytecodes["ZKMerkleTrie"] = ZKMerkleTrieDeployedBin +} diff --git a/kroma-bindings/bindings/zktriehasher.go b/kroma-bindings/bindings/zktriehasher.go new file mode 100644 index 000000000..72c3ec0d4 --- /dev/null +++ b/kroma-bindings/bindings/zktriehasher.go @@ -0,0 +1,234 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// ZKTrieHasherMetaData contains all meta data concerning the ZKTrieHasher contract. +var ZKTrieHasherMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_poseidon2\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"POSEIDON2\",\"outputs\":[{\"internalType\":\"contractIPoseidon2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60a060405234801561001057600080fd5b5060405161011138038061011183398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051608961008860003960006031015260896000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063dc8b503814602d575b600080fd5b60537f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f3fea164736f6c634300080f000a", +} + +// ZKTrieHasherABI is the input ABI used to generate the binding from. +// Deprecated: Use ZKTrieHasherMetaData.ABI instead. +var ZKTrieHasherABI = ZKTrieHasherMetaData.ABI + +// ZKTrieHasherBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ZKTrieHasherMetaData.Bin instead. +var ZKTrieHasherBin = ZKTrieHasherMetaData.Bin + +// DeployZKTrieHasher deploys a new Ethereum contract, binding an instance of ZKTrieHasher to it. +func DeployZKTrieHasher(auth *bind.TransactOpts, backend bind.ContractBackend, _poseidon2 common.Address) (common.Address, *types.Transaction, *ZKTrieHasher, error) { + parsed, err := ZKTrieHasherMetaData.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(ZKTrieHasherBin), backend, _poseidon2) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ZKTrieHasher{ZKTrieHasherCaller: ZKTrieHasherCaller{contract: contract}, ZKTrieHasherTransactor: ZKTrieHasherTransactor{contract: contract}, ZKTrieHasherFilterer: ZKTrieHasherFilterer{contract: contract}}, nil +} + +// ZKTrieHasher is an auto generated Go binding around an Ethereum contract. +type ZKTrieHasher struct { + ZKTrieHasherCaller // Read-only binding to the contract + ZKTrieHasherTransactor // Write-only binding to the contract + ZKTrieHasherFilterer // Log filterer for contract events +} + +// ZKTrieHasherCaller is an auto generated read-only Go binding around an Ethereum contract. +type ZKTrieHasherCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ZKTrieHasherTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ZKTrieHasherTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ZKTrieHasherFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ZKTrieHasherFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ZKTrieHasherSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ZKTrieHasherSession struct { + Contract *ZKTrieHasher // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ZKTrieHasherCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ZKTrieHasherCallerSession struct { + Contract *ZKTrieHasherCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ZKTrieHasherTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ZKTrieHasherTransactorSession struct { + Contract *ZKTrieHasherTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ZKTrieHasherRaw is an auto generated low-level Go binding around an Ethereum contract. +type ZKTrieHasherRaw struct { + Contract *ZKTrieHasher // Generic contract binding to access the raw methods on +} + +// ZKTrieHasherCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ZKTrieHasherCallerRaw struct { + Contract *ZKTrieHasherCaller // Generic read-only contract binding to access the raw methods on +} + +// ZKTrieHasherTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ZKTrieHasherTransactorRaw struct { + Contract *ZKTrieHasherTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewZKTrieHasher creates a new instance of ZKTrieHasher, bound to a specific deployed contract. +func NewZKTrieHasher(address common.Address, backend bind.ContractBackend) (*ZKTrieHasher, error) { + contract, err := bindZKTrieHasher(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ZKTrieHasher{ZKTrieHasherCaller: ZKTrieHasherCaller{contract: contract}, ZKTrieHasherTransactor: ZKTrieHasherTransactor{contract: contract}, ZKTrieHasherFilterer: ZKTrieHasherFilterer{contract: contract}}, nil +} + +// NewZKTrieHasherCaller creates a new read-only instance of ZKTrieHasher, bound to a specific deployed contract. +func NewZKTrieHasherCaller(address common.Address, caller bind.ContractCaller) (*ZKTrieHasherCaller, error) { + contract, err := bindZKTrieHasher(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ZKTrieHasherCaller{contract: contract}, nil +} + +// NewZKTrieHasherTransactor creates a new write-only instance of ZKTrieHasher, bound to a specific deployed contract. +func NewZKTrieHasherTransactor(address common.Address, transactor bind.ContractTransactor) (*ZKTrieHasherTransactor, error) { + contract, err := bindZKTrieHasher(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ZKTrieHasherTransactor{contract: contract}, nil +} + +// NewZKTrieHasherFilterer creates a new log filterer instance of ZKTrieHasher, bound to a specific deployed contract. +func NewZKTrieHasherFilterer(address common.Address, filterer bind.ContractFilterer) (*ZKTrieHasherFilterer, error) { + contract, err := bindZKTrieHasher(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ZKTrieHasherFilterer{contract: contract}, nil +} + +// bindZKTrieHasher binds a generic wrapper to an already deployed contract. +func bindZKTrieHasher(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ZKTrieHasherMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ZKTrieHasher *ZKTrieHasherRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ZKTrieHasher.Contract.ZKTrieHasherCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ZKTrieHasher *ZKTrieHasherRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZKTrieHasher.Contract.ZKTrieHasherTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ZKTrieHasher *ZKTrieHasherRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ZKTrieHasher.Contract.ZKTrieHasherTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ZKTrieHasher *ZKTrieHasherCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ZKTrieHasher.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ZKTrieHasher *ZKTrieHasherTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZKTrieHasher.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ZKTrieHasher *ZKTrieHasherTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ZKTrieHasher.Contract.contract.Transact(opts, method, params...) +} + +// POSEIDON2 is a free data retrieval call binding the contract method 0xdc8b5038. +// +// Solidity: function POSEIDON2() view returns(address) +func (_ZKTrieHasher *ZKTrieHasherCaller) POSEIDON2(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ZKTrieHasher.contract.Call(opts, &out, "POSEIDON2") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// POSEIDON2 is a free data retrieval call binding the contract method 0xdc8b5038. +// +// Solidity: function POSEIDON2() view returns(address) +func (_ZKTrieHasher *ZKTrieHasherSession) POSEIDON2() (common.Address, error) { + return _ZKTrieHasher.Contract.POSEIDON2(&_ZKTrieHasher.CallOpts) +} + +// POSEIDON2 is a free data retrieval call binding the contract method 0xdc8b5038. +// +// Solidity: function POSEIDON2() view returns(address) +func (_ZKTrieHasher *ZKTrieHasherCallerSession) POSEIDON2() (common.Address, error) { + return _ZKTrieHasher.Contract.POSEIDON2(&_ZKTrieHasher.CallOpts) +} diff --git a/kroma-bindings/bindings/zktriehasher_more.go b/kroma-bindings/bindings/zktriehasher_more.go new file mode 100644 index 000000000..01e3d4e3f --- /dev/null +++ b/kroma-bindings/bindings/zktriehasher_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const ZKTrieHasherStorageLayoutJSON = "{\"storage\":null,\"types\":{}}" + +var ZKTrieHasherStorageLayout = new(solc.StorageLayout) + +var ZKTrieHasherDeployedBin = "0x6080604052348015600f57600080fd5b506004361060285760003560e01c8063dc8b503814602d575b600080fd5b60537f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f3fea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(ZKTrieHasherStorageLayoutJSON), ZKTrieHasherStorageLayout); err != nil { + panic(err) + } + + layouts["ZKTrieHasher"] = ZKTrieHasherStorageLayout + deployedBytecodes["ZKTrieHasher"] = ZKTrieHasherDeployedBin +} diff --git a/op-bindings/bindings/zkverifier.go b/kroma-bindings/bindings/zkverifier.go similarity index 100% rename from op-bindings/bindings/zkverifier.go rename to kroma-bindings/bindings/zkverifier.go diff --git a/kroma-bindings/bindings/zkverifier_more.go b/kroma-bindings/bindings/zkverifier_more.go new file mode 100644 index 000000000..268704e1a --- /dev/null +++ b/kroma-bindings/bindings/zkverifier_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const ZKVerifierStorageLayoutJSON = "{\"storage\":null,\"types\":{}}" + +var ZKVerifierStorageLayout = new(solc.StorageLayout) + +var ZKVerifierDeployedBin = "0x608060405234801561001057600080fd5b50600436106100365760003560e01c80634292dc3e1461003b57806354fd4d5014610063575b600080fd5b61004e610049366004615979565b610078565b60405190151581526020015b60405180910390f35b61006b6104c7565b60405161005a9190615a1d565b6000610082615816565b8484600081811061009557610095615a6e565b9050602002013570ffffffffffffffffffffffffffffffffff16816000600681106100c2576100c2615a6e565b60200201526088858560018181106100dc576100dc615a6e565b90506020020135600116901b6088868660008181106100fd576100fd615a6e565b90506020020135901c6101109190615acc565b60208201528484600281811061012857610128615a6e565b9050602002013570ffffffffffffffffffffffffffffffffff168160026006811061015557610155615a6e565b602002015260888585600381811061016f5761016f615a6e565b90506020020135600116901b60888686600281811061019057610190615a6e565b90506020020135901c6101a39190615acc565b606080830191909152608084811c908301526fffffffffffffffffffffffffffffffff841660a08301526040805160028082529281019091526000918291829182918291816020015b60408051808201909152600080825260208201528152602001906001900390816101ec5750506040805160028082526060820190925291925060009190602082015b610236615834565b81526020019060019003908161022e5790505090506102568d8d8961056a565b855193995090975090955093508690839060009061027657610276615a6e565b60200260200101516000018181525050838260008151811061029a5761029a615a6e565b6020026020010151602001818152505084826001815181106102be576102be615a6e565b6020026020010151600001818152505082826001815181106102e2576102e2615a6e565b602002602001015160200181815250506102fa614ad2565b8160008151811061030d5761030d615a6e565b6020026020010181905250610320614b7d565b8160018151811061033357610333615a6e565b60200260200101819052506103488282614c24565b61035c5760009750505050505050506104be565b8a8a600081811061036f5761036f615a6e565b905060200201358260008151811061038957610389615a6e565b6020908102919091010151528a8a60018181106103a8576103a8615a6e565b90506020020135826000815181106103c2576103c2615a6e565b602002602001015160200181815250508a8a60028181106103e5576103e5615a6e565b90506020020135826001815181106103ff576103ff615a6e565b6020908102919091010151528a8a600381811061041e5761041e615a6e565b905060200201358260018151811061043857610438615a6e565b60200260200101516020018181525050610450614ad2565b8160008151811061046357610463615a6e565b6020026020010181905250610476614b7d565b8160018151811061048957610489615a6e565b602002602001018190525061049e8282614c24565b6104b25760009750505050505050506104be565b60019750505050505050505b95945050505050565b60606104f27f0000000000000000000000000000000000000000000000000000000000000000614ef8565b61051b7f0000000000000000000000000000000000000000000000000000000000000000614ef8565b6105447f0000000000000000000000000000000000000000000000000000000000000000614ef8565b60405160200161055693929190615b13565b604051602081830303815290604052905090565b600080600080610578615859565b610580615878565b6000806105d57f2754b04f3f510d0e86a0d0e811f0fc16f92b722514e1729066d2abf90811d6f27f1816b0f9909a5a979bd34c559e57b4096bee5cce7eb668bc0a9805677f40dc858b845b6020020151614fb6565b909250905061062f7f174fa57071f8f6e53fcb31a5ecc33274ec76e4e186eeb0b64255d2f314cd50b27f1c399365e85e4de2761ebcf350da85ff4518cc82f7cef64a477a7a5fd11d4a448b60015b6020020151858561501c565b90925090506106817f259a4d5cd83279b6dc9ca2008b669f82e91f23804e2524c5087a2452d52c33bd7f303abddb7ae0f35e3a6bd39314b347c3c3a433f72833dda1998ad2176258baa38b6002610623565b90925090506106d37f252b158900f31a7c0c00b924e7d3c8d61a60c5e9fd2b83251ba73d1dc0b680f57f29c8c2b3f0d74267bc2b0f9f3568838cdb0eee4719391790d93d0015c00ce5af8b6003610623565b90925090506107257f0c25f9f3c38b6a128d7d38c5625a3976d389b5f9f33098bb419968e4d18e150e7f21fb777462c7f4af71940423babc7f882f0c97be9620ef84f6f11974ee0edb8e8b6004610623565b90925090506107777f2280a0fd7dbf95c450830906ffc607a373d5b9b56b9101138e925ad557eb355a7f0697ab7e9a5377e2759ab6d1283301ccae9c72bad14946a9513ee19be1ec825e8b6005610623565b602086015284526107aa7f0000000000000000000000000000000000000000000000000000000000000000846000615068565b835160208501516107be91908560026150b4565b600091505b6004821161085c5761084a8b8b6107db856002615b89565b6107e6906000615acc565b8181106107f5576107f5615a6e565b905060200201358c8c85600261080b9190615b89565b610816906001615acc565b81811061082557610825615a6e565b905060200201358585600361083a9190615b89565b610845906005615acc565b6150b4565b8161085481615bc6565b9250506107c3565b610867836014615124565b6040850152600091505b600d8211610905576108f38b8b610889856002615b89565b61089490600a615acc565b8181106108a3576108a3615a6e565b905060200201358c8c8560026108b99190615b89565b6108c490600b615acc565b8181106108d3576108d3615a6e565b90506020020135858560036108e89190615b89565b610845906001615acc565b816108fd81615bc6565b925050610871565b61091083602b615124565b6060850152610920836001615124565b6080850152600091505b6009821161098f5761097d8b8b610942856002615b89565b61094d906026615acc565b81811061095c5761095c615a6e565b905060200201358c8c8560026109729190615b89565b6108c4906027615acc565b8161098781615bc6565b92505061092a565b61099a83601f615124565b60a0850152600091505b60038211610a09576109f78b8b6109bc856002615b89565b6109c790603a615acc565b8181106109d6576109d6615a6e565b905060200201358c8c8560026109ec9190615b89565b6108c490603b615acc565b81610a0181615bc6565b9250506109a4565b610a1483600d615124565b60c0850152600091505b60468211610a8757610a758b8b610a36856001615b89565b610a41906042615acc565b818110610a5057610a50615a6e565b9050602002013584846002610a659190615b89565b610a70906001615acc565b615068565b81610a7f81615bc6565b925050610a1e565b610a9283608f615124565b60e0850152600091505b60038211610b0157610aef8b8b610ab4856002615b89565b610abf906089615acc565b818110610ace57610ace615a6e565b905060200201358c8c856002610ae49190615b89565b6108c490608a615acc565b81610af981615bc6565b925050610a9c565b610b0c83600d615124565b61010085015260c0840151600080516020615cd4833981519152907f1dba8b5bdd64ef6ce29a9039aca3c0e524395c43b9227b96c75090cc6cc7ec97900961012085015260c0840151600080516020615cd4833981519152907f24a1fcd63e9f03b27281db85fe631ec8e5c466f8178a4ee94d4942b7ccd90e1c900961014085015260c0840151600080516020615cd4833981519152907f20bab6e5f766b4edf82399e9c5ff0e40d4b6875321a3d8020e18521d8f5c7241900961016085015260c0840151610bdf906304000000615186565b610180850152600080516020615cd4833981519152610bff600182615bfe565b610180860151086101a08501819052600080516020615cd4833981519152907f30644e66c81e03716be83b486d6feabcc7ddd0fe6cbf5e72d585d142f7829b05096101c0850152600080516020615cd4833981519152610c60600182615bfe565b60c0860151089150610c7a84600e5b6020020151836151ed565b6101c08501526101a0840151600080516020615cd4833981519152907f07baaa5b7af9cf52cd226bc56865f0f99ef8fcd4219060f09f43e9a148b5ab68096101e0850152600080516020615cd4833981519152610cf77f20bab6e5f766b4edf82399e9c5ff0e40d4b6875321a3d8020e18521d8f5c724182615bfe565b60c0860151089150610d0a84600f610c6f565b6101e08501526101a0840151600080516020615cd4833981519152907f1c699f652457365bf2fc4fa2c5c63d6c4349b03cb46d633d7a2655c5da4b900a09610200850152600080516020615cd4833981519152610d877f19277f31ecb5bfe8604677099c09556812b0b5c50cceb2b584098183a5a6c5c882615bfe565b60c0860151089150610d9a846010610c6f565b6102008501526101a0840151600080516020615cd4833981519152907f205cdbaf03903a5c23e60eef0df90673bc65a25762694c501e3281153b4e588a09610220850152600080516020615cd4833981519152610e177f082a7bd4c0a7e4352229d332c27a160da18f0d7c651f3047df41b80345532f6e82615bfe565b60c0860151089150610e2a846011610c6f565b6102208501526101a0840151600080516020615cd4833981519152907f27db73b1a831278e143aab90091db38afdea3294c4ba05d1c697a392eb09cc7909610240850152600080516020615cd4833981519152610ea77f26501ebfe559ea5826f023d3e76e4b66f170cd940408eb5590a4075c80b498d682615bfe565b60c0860151089150610eba846012610c6f565b6102408501526101a0840151600080516020615cd4833981519152907f0204822d629ab653697f028f5fa17d23ac2ba08c60c7112d98ebd28f325f0af609610260850152600080516020615cd4833981519152610f377f0d5eb4c216db2c3262de3f6a2ef71a9be95ff21a7a1a50ed069d6131e7d54e5f82615bfe565b60c0860151089150610f4a846013610c6f565b6102608501526101a0840151600080516020615cd4833981519152907f2622622a60c0d9327ccf066a0f1fce13c48601b976affd1f41c2a72a9f77da6409610280850152600080516020615cd4833981519152610fc77f24a1fcd63e9f03b27281db85fe631ec8e5c466f8178a4ee94d4942b7ccd90e1c82615bfe565b60c0860151089150610fda846014610c6f565b6102808501526102008401516101e0850151600080516020615cd48339815191529190089150600080516020615cd4833981519152846011602002015183089150600080516020615cd4833981519152846012602002015183089150600080516020615cd4833981519152846013602002015183086101e08501526110ab8b8b604a81811061106b5761106b615a6e565b905060200201358c8c604881811061108557611085615a6e565b905060200201358d8d604981811061109f5761109f615a6e565b9050602002013561521d565b91506110ea8b8b604b8181106110c3576110c3615a6e565b905060200201358c8c60438181106110dd576110dd615a6e565b905060200201358461521d565b915061111c8b8b604c81811061110257611102615a6e565b905060200201358c8c60448181106110dd576110dd615a6e565b915061114e8b8b604d81811061113457611134615a6e565b905060200201358c8c60458181106110dd576110dd615a6e565b91506111808b8b604e81811061116657611166615a6e565b905060200201358c8c60468181106110dd576110dd615a6e565b91506111b28b8b604f81811061119857611198615a6e565b905060200201358c8c60478181106110dd576110dd615a6e565b610200850152600080516020615cd48339815191528b8b60448181106111da576111da615a6e565b905060200201358c8c60438181106111f4576111f4615a6e565b905060200201350991506112398b8b605081811061121457611214615a6e565b90506020020135838660106054811061122f5761122f615a6e565b602002015161521d565b610200850152600080516020615cd48339815191528b8b604681811061126157611261615a6e565b905060200201358c8c604581811061127b5761127b615a6e565b9050602002013509915061129b8b8b605181811061121457611214615a6e565b610200850152600080516020615cd48339815191528b8b60618181106112c3576112c3615a6e565b90506020020135600080516020615cd48339815191526112e39190615bfe565b6001089150600080516020615cd48339815191528285600e602002015109610220850152600080516020615cd48339815191528b8b606481811061132957611329615a6e565b905060200201358c8c606481811061134357611343615a6e565b90506020020135099150600080516020615cd48339815191528b8b606481811061136f5761136f615a6e565b90506020020135600080516020615cd483398151915261138f9190615bfe565b83089150600080516020615cd483398151915282856014602002015109610240850152600080516020615cd48339815191528b8b60638181106113d4576113d4615a6e565b90506020020135600080516020615cd48339815191526113f49190615bfe565b8c8c606481811061140757611407615a6e565b90506020020135089150600080516020615cd483398151915284600e6020020151830961026085015260c08401516060850151600080516020615cd48339815191529190096102a08501526101e0840151610280850151600080516020615cd48339815191529190089150600080516020615cd483398151915261149983600080516020615cd4833981519152615bfe565b6001086101e08501526080840151600080516020615cd4833981519152908c8c60438181106114ca576114ca615a6e565b90506020020135086102c08501526115158b8b605b8181106114ee576114ee615a6e565b905060200201358560036054811061150857611508615a6e565b602002015186601661122f565b9150600080516020615cd48339815191528b8b606281811061153957611539615a6e565b9050602002013583096102e08501526102a08401516102c0850151600080516020615cd48339815191529190089150600080516020615cd48339815191528b8b606181811061158a5761158a615a6e565b9050602002013583096102c08501526102a0840151600080516020615cd4833981519152907f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a2096103008501526080840151600080516020615cd4833981519152908c8c60448181106115ff576115ff615a6e565b905060200201350861032085015261164a8b8b605c81811061162357611623615a6e565b905060200201358560036054811061163d5761163d615a6e565b602002015186601961122f565b9150600080516020615cd4833981519152846017602002015183096102e0850152610300840151610320850151600080516020615cd48339815191529190089150600080516020615cd4833981519152846016602002015183096102c0850152610300840151600080516020615cd4833981519152907f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a2096103008501526080840151600080516020615cd4833981519152908c8c604581811061171057611710615a6e565b90506020020135086103208501526117348b8b605d81811061162357611623615a6e565b9150600080516020615cd4833981519152846017602002015183096102e0850152610300840151610320850151600080516020615cd48339815191529190089150600080516020615cd4833981519152846016602002015183096102c0850152610300840151600080516020615cd4833981519152907f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a2096103008501526102c0840151600080516020615cd4833981519152906117f29082615bfe565b6102e0860151089150600080516020615cd483398151915284600f602002015183096102c08501526102a0840151600080516020615cd4833981519152907f18afdf23e9bd9302673fc1e076a492d4d65bd18ebc4d854ed189139bab313e5290096102a08501526080840151600080516020615cd4833981519152908c8c604681811061188157611881615a6e565b90506020020135086102e08501526118cc8b8b605e8181106118a5576118a5615a6e565b90506020020135856003605481106118bf576118bf615a6e565b602002015186601761122f565b9150600080516020615cd48339815191528b8b60658181106118f0576118f0615a6e565b9050602002013583096103008501526102a08401516102e0850151600080516020615cd48339815191529190089150600080516020615cd48339815191528b8b606481811061194157611941615a6e565b9050602002013583096102e08501526102a0840151600080516020615cd4833981519152907f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a2096102a08501526080840151600080516020615cd4833981519152908c8c60478181106119b6576119b6615a6e565b90506020020135086103208501526119da8b8b605f81811061162357611623615a6e565b9150600080516020615cd4833981519152846018602002015183096103008501526102a0840151610320850151600080516020615cd48339815191529190089150600080516020615cd4833981519152846017602002015183096102e08501526102a0840151600080516020615cd4833981519152907f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a2096102a08501526080840151600080516020615cd4833981519152908c8c6042818110611aa057611aa0615a6e565b9050602002013508610320850152611ac48b8b606081811061162357611623615a6e565b9150600080516020615cd4833981519152846018602002015183096103008501526102a0840151610320850151600080516020615cd48339815191529190089150600080516020615cd4833981519152846017602002015183096102e08501526102a0840151600080516020615cd4833981519152907f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a2096102a08501526102e0840151600080516020615cd483398151915290611b829082615bfe565b610300860151089150600080516020615cd483398151915284600f602002015183096102a08501526060840151600080516020615cd4833981519152908c8c6068818110611bd257611bd2615a6e565b90506020020135089150600080516020615cd4833981519152828c8c6067818110611bff57611bff615a6e565b90506020020135096102e08501526080840151600080516020615cd4833981519152908c8c606a818110611c3557611c35615a6e565b90506020020135089150600080516020615cd4833981519152828560176020020151096102e0850152600080516020615cd48339815191528b8b6052818110611c8057611c80615a6e565b905060200201358c8c6043818110611c9a57611c9a615a6e565b90506020020135096103008501526040840151600080516020615cd48339815191529060000960408501819052610300850151600080516020615cd48339815191529108610300850152600080516020615cd48339815191528b8b6053818110611d0657611d06615a6e565b9050602002013585600260548110611d2057611d20615a6e565b602002015108610320850152600080516020615cd48339815191528b8b606a818110611d4e57611d4e615a6e565b90506020020135600080516020615cd4833981519152611d6e9190615bfe565b8c8c6068818110611d8157611d81615a6e565b9050602002013508610340850152600080516020615cd48339815191528b8b6066818110611db157611db1615a6e565b90506020020135600080516020615cd4833981519152611dd19190615bfe565b6001089150600080516020615cd48339815191528285600e602002015109610360850152600080516020615cd48339815191528b8b6066818110611e1757611e17615a6e565b905060200201358c8c6066818110611e3157611e31615a6e565b90506020020135099150600080516020615cd48339815191528b8b6066818110611e5d57611e5d615a6e565b90506020020135600080516020615cd4833981519152611e7d9190615bfe565b83089150600080516020615cd4833981519152828560146020020151096103808501526060840151610300850151600080516020615cd48339815191529190089150600080516020615cd4833981519152828c8c6066818110611ee257611ee2615a6e565b90506020020135096103008501526080840151610320850151600080516020615cd48339815191529190086103208501819052610300850151600080516020615cd48339815191529190099150600080516020615cd4833981519152611f5683600080516020615cd4833981519152615bfe565b6102e0860151089150600080516020615cd483398151915284600f602002015183096102e08501526103408401516101c0850151600080516020615cd4833981519152919009610300850152600080516020615cd48339815191528b8b6069818110611fc457611fc4615a6e565b90506020020135600080516020615cd4833981519152611fe49190615bfe565b8c8c6068818110611ff757611ff7615a6e565b90506020020135089150600080516020615cd48339815191528285601a6020020151099150600080516020615cd483398151915284600f602002015183096103408501526060840151600080516020615cd4833981519152908c8c606d81811061206357612063615a6e565b90506020020135089150600080516020615cd4833981519152828c8c606c81811061209057612090615a6e565b90506020020135096103a08501526080840151600080516020615cd4833981519152908c8c606f8181106120c6576120c6615a6e565b90506020020135089150600080516020615cd48339815191528285601d6020020151096103a08501526121398b8b605281811061210557612105615a6e565b905060200201358c8c604481811061211f5761211f615a6e565b905060200201358660026054811061122f5761122f615a6e565b6103c0850152600080516020615cd48339815191528b8b606f81811061216157612161615a6e565b90506020020135600080516020615cd48339815191526121819190615bfe565b8c8c606d81811061219457612194615a6e565b90506020020135086103e0850152600080516020615cd48339815191528b8b606b8181106121c4576121c4615a6e565b90506020020135600080516020615cd48339815191526121e49190615bfe565b6001089150600080516020615cd48339815191528285600e602002015109610400850152600080516020615cd48339815191528b8b606b81811061222a5761222a615a6e565b905060200201358c8c606b81811061224457612244615a6e565b90506020020135099150600080516020615cd48339815191528b8b606b81811061227057612270615a6e565b90506020020135600080516020615cd48339815191526122909190615bfe565b83089150600080516020615cd48339815191528285601460200201510961042085015260608401516103c0850151600080516020615cd48339815191529190089150600080516020615cd4833981519152828c8c606b8181106122f5576122f5615a6e565b90506020020135099150600080516020615cd4833981519152846019602002015183099150600080516020615cd483398151915261234183600080516020615cd4833981519152615bfe565b6103a0860151089150600080516020615cd483398151915284600f602002015183096103a08501526103e08401516101c0850151600080516020615cd48339815191529190096103c0850152600080516020615cd48339815191528b8b606e8181106123af576123af615a6e565b90506020020135600080516020615cd48339815191526123cf9190615bfe565b8c8c606d8181106123e2576123e2615a6e565b90506020020135089150600080516020615cd48339815191528285601f6020020151099150600080516020615cd483398151915284600f602002015183096103e08501526060840151600080516020615cd4833981519152908c8c607281811061244e5761244e615a6e565b90506020020135089150600080516020615cd4833981519152828c8c607181811061247b5761247b615a6e565b90506020020135096104408501526080840151600080516020615cd4833981519152908c8c60748181106124b1576124b1615a6e565b90506020020135089150600080516020615cd48339815191528285602260200201510961044085015261250a8b8b60528181106124f0576124f0615a6e565b905060200201358c8c604581811061211f5761211f615a6e565b610460850152600080516020615cd48339815191528b8b607481811061253257612532615a6e565b90506020020135600080516020615cd48339815191526125529190615bfe565b8c8c607281811061256557612565615a6e565b9050602002013508610480850152600080516020615cd48339815191528b8b607081811061259557612595615a6e565b90506020020135600080516020615cd48339815191526125b59190615bfe565b6001089150600080516020615cd48339815191528285600e6020020151096104a0850152600080516020615cd48339815191528b8b60708181106125fb576125fb615a6e565b905060200201358c8c607081811061261557612615615a6e565b90506020020135099150600080516020615cd48339815191528b8b607081811061264157612641615a6e565b90506020020135600080516020615cd48339815191526126619190615bfe565b83089150600080516020615cd4833981519152828560146020020151096104c08501526060840151610460850151600080516020615cd48339815191529190089150600080516020615cd4833981519152828c8c60708181106126c6576126c6615a6e565b90506020020135099150600080516020615cd4833981519152846019602002015183099150600080516020615cd483398151915261271283600080516020615cd4833981519152615bfe565b610440860151089150600080516020615cd483398151915284600f602002015183096104408501526104808401516101c0850151600080516020615cd4833981519152919009610460850152600080516020615cd48339815191528b8b607381811061278057612780615a6e565b90506020020135600080516020615cd48339815191526127a09190615bfe565b8c8c60728181106127b3576127b3615a6e565b90506020020135089150600080516020615cd4833981519152828560246020020151099150600080516020615cd483398151915284600f602002015183096104808501526060840151600080516020615cd4833981519152908c8c607781811061281f5761281f615a6e565b90506020020135089150600080516020615cd4833981519152828c8c607681811061284c5761284c615a6e565b90506020020135096104e08501526080840151600080516020615cd4833981519152908c8c607981811061288257612882615a6e565b90506020020135089150600080516020615cd4833981519152828560276020020151096104e08501526128db8b8b60528181106128c1576128c1615a6e565b905060200201358c8c604681811061211f5761211f615a6e565b610500850152600080516020615cd48339815191528b8b607981811061290357612903615a6e565b90506020020135600080516020615cd48339815191526129239190615bfe565b8c8c607781811061293657612936615a6e565b9050602002013508610520850152600080516020615cd48339815191528b8b607581811061296657612966615a6e565b90506020020135600080516020615cd48339815191526129869190615bfe565b6001089150600080516020615cd48339815191528285600e602002015109610540850152600080516020615cd48339815191528b8b60758181106129cc576129cc615a6e565b905060200201358c8c60758181106129e6576129e6615a6e565b90506020020135099150600080516020615cd48339815191528b8b6075818110612a1257612a12615a6e565b90506020020135600080516020615cd4833981519152612a329190615bfe565b83089150600080516020615cd4833981519152828560146020020151096105608501526060840151610500850151600080516020615cd48339815191529190089150600080516020615cd4833981519152828c8c6075818110612a9757612a97615a6e565b90506020020135099150600080516020615cd4833981519152846019602002015183099150600080516020615cd4833981519152612ae383600080516020615cd4833981519152615bfe565b6104e0860151089150600080516020615cd483398151915284600f602002015183096103208501526105208401516101c0850151600080516020615cd48339815191529190096104e0850152600080516020615cd48339815191528b8b6078818110612b5157612b51615a6e565b90506020020135600080516020615cd4833981519152612b719190615bfe565b8c8c6077818110612b8457612b84615a6e565b90506020020135089150600080516020615cd4833981519152828560296020020151099150600080516020615cd483398151915284600f602002015183096105008501526060840151600080516020615cd4833981519152908c8c607c818110612bf057612bf0615a6e565b90506020020135089150600080516020615cd4833981519152828c8c607b818110612c1d57612c1d615a6e565b90506020020135096105208501526080840151600080516020615cd4833981519152908c8c607e818110612c5357612c53615a6e565b90506020020135089150600080516020615cd483398151915282856029602002015109610520850152612cac8b8b6054818110612c9257612c92615a6e565b905060200201358c8c604381811061211f5761211f615a6e565b610580850152600080516020615cd48339815191528b8b6055818110612cd457612cd4615a6e565b9050602002013585600260548110612cee57612cee615a6e565b6020020151086105a0850152600080516020615cd48339815191528b8b607e818110612d1c57612d1c615a6e565b90506020020135600080516020615cd4833981519152612d3c9190615bfe565b8c8c607c818110612d4f57612d4f615a6e565b90506020020135086105c0850152600080516020615cd48339815191528b8b607a818110612d7f57612d7f615a6e565b90506020020135600080516020615cd4833981519152612d9f9190615bfe565b6001089150600080516020615cd48339815191528285600e6020020151096105e0850152600080516020615cd48339815191528b8b607a818110612de557612de5615a6e565b905060200201358c8c607a818110612dff57612dff615a6e565b90506020020135099150600080516020615cd48339815191528b8b607a818110612e2b57612e2b615a6e565b90506020020135600080516020615cd4833981519152612e4b9190615bfe565b83089150600080516020615cd4833981519152828560146020020151096106008501526060840151610580850151600080516020615cd48339815191529190089150600080516020615cd4833981519152828c8c607a818110612eb057612eb0615a6e565b905060200201350961058085015260808401516105a0850151600080516020615cd48339815191529190089150600080516020615cd48339815191528285602c6020020151099150600080516020615cd4833981519152612f1f83600080516020615cd4833981519152615bfe565b610520860151089150600080516020615cd483398151915284600f602002015183096105208501526105c08401516101c0850151600080516020615cd4833981519152919009610580850152600080516020615cd48339815191528b8b607d818110612f8d57612f8d615a6e565b90506020020135600080516020615cd4833981519152612fad9190615bfe565b8c8c607c818110612fc057612fc0615a6e565b90506020020135089150600080516020615cd48339815191528285602e6020020151099150600080516020615cd483398151915284600f602002015183096105a08501526060840151600080516020615cd4833981519152908c8c608181811061302c5761302c615a6e565b90506020020135089150600080516020615cd4833981519152828c8c608081811061305957613059615a6e565b90506020020135096105c08501526080840151600080516020615cd4833981519152908c8c608381811061308f5761308f615a6e565b90506020020135089150600080516020615cd48339815191528285602e6020020151096105c08501526130ce8b8b6056818110612c9257612c92615a6e565b610620850152600080516020615cd48339815191528b8b60578181106130f6576130f6615a6e565b905060200201358560026054811061311057613110615a6e565b602002015108610640850152600080516020615cd48339815191528b8b608381811061313e5761313e615a6e565b90506020020135600080516020615cd483398151915261315e9190615bfe565b8c8c608181811061317157613171615a6e565b9050602002013508610660850152600080516020615cd48339815191528b8b607f8181106131a1576131a1615a6e565b90506020020135600080516020615cd48339815191526131c19190615bfe565b6001089150600080516020615cd48339815191528285600e602002015109610680850152600080516020615cd48339815191528b8b607f81811061320757613207615a6e565b905060200201358c8c607f81811061322157613221615a6e565b90506020020135099150600080516020615cd48339815191528b8b607f81811061324d5761324d615a6e565b90506020020135600080516020615cd483398151915261326d9190615bfe565b83089150600080516020615cd4833981519152828560146020020151096106a08501526060840151610620850151600080516020615cd48339815191529190089150600080516020615cd4833981519152828c8c607f8181106132d2576132d2615a6e565b90506020020135096106208501526080840151610640850151600080516020615cd48339815191529190089150600080516020615cd4833981519152828560316020020151099150600080516020615cd483398151915261334183600080516020615cd4833981519152615bfe565b6105c0860151089150600080516020615cd483398151915284600f602002015183096105c08501526106608401516101c0850151600080516020615cd4833981519152919009610620850152600080516020615cd48339815191528b8b60828181106133af576133af615a6e565b90506020020135600080516020615cd48339815191526133cf9190615bfe565b8c8c60818181106133e2576133e2615a6e565b90506020020135089150600080516020615cd4833981519152828560336020020151099150600080516020615cd483398151915284600f602002015183096106408501526060840151600080516020615cd4833981519152908c8c608681811061344e5761344e615a6e565b90506020020135089150600080516020615cd4833981519152828c8c608581811061347b5761347b615a6e565b90506020020135096106608501526080840151600080516020615cd4833981519152908c8c60888181106134b1576134b1615a6e565b90506020020135089150600080516020615cd4833981519152828560336020020151096106608501526134f08b8b6058818110612c9257612c92615a6e565b6106c0850152600080516020615cd48339815191528b8b605981811061351857613518615a6e565b905060200201358560026054811061353257613532615a6e565b6020020151086040850152600080516020615cd48339815191528b8b608881811061355f5761355f615a6e565b90506020020135600080516020615cd483398151915261357f9190615bfe565b8c8c608681811061359257613592615a6e565b90506020020135086106e0850152600080516020615cd48339815191528b8b60848181106135c2576135c2615a6e565b90506020020135600080516020615cd48339815191526135e29190615bfe565b6001089150600080516020615cd48339815191528285600e602002015109610700850152600080516020615cd48339815191528b8b608481811061362857613628615a6e565b905060200201358c8c608481811061364257613642615a6e565b90506020020135099150600080516020615cd48339815191528b8b608481811061366e5761366e615a6e565b90506020020135600080516020615cd483398151915261368e9190615bfe565b83089150600080516020615cd48339815191528285601460200201510961028085015260608401516106c0850151600080516020615cd48339815191529190089150600080516020615cd4833981519152828c8c60848181106136f3576136f3615a6e565b9050602002013509606085015260808401516040850151600080516020615cd48339815191529190089150600080516020615cd4833981519152828560036020020151099150600080516020615cd483398151915261376083600080516020615cd4833981519152615bfe565b610660860151089150600080516020615cd483398151915284600f6020020151830960408501526106e08401516101c0850151600080516020615cd48339815191529190096060850152600080516020615cd48339815191528b8b60878181106137cc576137cc615a6e565b90506020020135600080516020615cd48339815191526137ec9190615bfe565b8c8c60868181106137ff576137ff615a6e565b90506020020135089150600080516020615cd4833981519152828560376020020151099150600080516020615cd483398151915284600f60200201518309608085015260a084015161385590600086601061122f565b915061388a8480600560200201517f35342d2c29302f2827192b2a24232226251f1e1d21201a18171c1b15161312118561524a565b91506138a884806005602002015168ff040302143832312e8561524a565b91506138bb8285600d60200201516151ed565b6040850152610100840151600080516020615cd483398151915290800960608501819052610100850151600080516020615cd4833981519152910960808501526139458b8b608f81811061391157613911615a6e565b905060200201358c8c609081811061392b5761392b615a6e565b90506020020135866004605481106105cb576105cb615a6e565b909250905061395e848c8c65ffff088b038d86866152cd565b90925090506139a182828d8d608981811061397b5761397b615a6e565b905060200201358e8e608a81811061399557613995615a6e565b905060200201356153d5565b6101e08601526101c08501526101608401516080850151600080516020615cd483398151915291900960a085015260e08401516080850151600080516020615cd4833981519152919009610160850181905260e0850151600080516020615cd483398151915291096101a0850181905260e0850151600080516020615cd48339815191529109610200850181905260e0850151600080516020615cd48339815191529109610220850181905260e0850151600080516020615cd48339815191529109610240850181905260e0850151600080516020615cd48339815191529109610260850152600080516020615cd48339815191528b8b6087818110613aa957613aa9615a6e565b9050602002013585601360548110613ac357613ac3615a6e565b6020020151099150613ae4848c8c6bffff0b6e0d731078117d128286615443565b9150613b218b8b6069818110613afc57613afc615a6e565b9050602002013585600460548110613b1657613b16615a6e565b60200201518461521d565b6102808501526101408401516060850151600080516020615cd4833981519152919009610140850152613b878b8b6063818110613b6057613b60615a6e565b9050602002013585600360548110613b7a57613b7a615a6e565b602002015186601461122f565b610280850152610120840151610100850151600080516020615cd483398151915291900961012085015260e0840151610100850151600080516020615cd48339815191529190096102a0850152600091505b6008821015613c8857600080516020615cd483398151915284613bfd846000615b89565b613c08906007615acc565b60548110613c1857613c18615a6e565b602002015185613c29856001615b89565b613c34906015615acc565b60548110613c4457613c44615a6e565b60200201510984613c56846001615b89565b613c61906016615acc565b60548110613c7157613c71615a6e565b602002015281613c8081615bc6565b925050613bd9565b600080516020615cd48339815191528b8b6085818110613caa57613caa615a6e565b9050602002013585601d60548110613cc457613cc4615a6e565b6020020151099150613ced848c8c73ffff0848156216651767186c19711a761b7b1c8086615443565b9150600080516020615cd4833981519152828560146020020151086102808501526102a08401516060850151600080516020615cd4833981519152919008606085015260e0840151600080516020615cd48339815191529080096102a0850181905260e0850151600080516020615cd483398151915291096103c0850152600091505b6032821015613e1f57600080516020615cd483398151915284613d94846000615b89565b613d9f906007615acc565b60548110613daf57613daf615a6e565b602002015185613dc0856001615b89565b613dcb90601e615acc565b60548110613ddb57613ddb615a6e565b60200201510984613ded846001615b89565b613df890601f615acc565b60548110613e0857613e08615a6e565b602002015281613e1781615bc6565b925050613d70565b600080516020615cd48339815191528b8b605a818110613e4157613e41615a6e565b9050602002013585605060548110613e5b57613e5b615a6e565b602002015109610a208501526101808401516109e0850151600080516020615cd4833981519152919009610a408501819052610180850151600080516020615cd48339815191529109610a608501819052610180850151600080516020615cd483398151915291096101808501526109e08401516040850151613ee1919086605161122f565b9150613f10848c8c7f3f50405141524253435444554556465747584859495b4a5c4b5d4c5e4d5f4e6086615443565b9150613f3f848c8c7f2f7a307c317e327f338134833584368637883849394a3a4b3b4c3c4d3d4e3e4f86615443565b9150613f6e848c8c7f1f4620472161226423662468256a266b276d286f29702a722b742c752d772e7986615443565b9150613f85848c8c67ffff074315441e4586615443565b9150600080516020615cd48339815191528b8b6042818110613fa957613fa9615a6e565b9050602002013583089150600080516020615cd48339815191528285601460200201510860408501526106c0840151610260850151600080516020615cd48339815191529190086102608501526106a08401516103a0850151600080516020615cd4833981519152919008610280850152610660840151610240850151600080516020615cd4833981519152919008610240850152610640840151610380850151600080516020615cd4833981519152919008610380850152610600840151610220850151600080516020615cd48339815191529190086102208501526105e0840151610360850151600080516020615cd48339815191529190086103608501526105a0840151610200850151600080516020615cd4833981519152919008610200850152610580840151610340850151600080516020615cd48339815191529190086103408501526105408401516101a0850151600080516020615cd48339815191529190086101a0850152610520840151610320850151600080516020615cd48339815191529190086103208501526104e0840151610160850151600080516020615cd48339815191529190086101608501526104c0840151610300850151600080516020615cd48339815191529190086103008501526104808401516080850151600080516020615cd483398151915291900860808501526104608401516102e0850151600080516020615cd48339815191529190086102e08501526104408401516102c0850151600080516020615cd48339815191529190086102c08501526104208401516060850151600080516020615cd48339815191529190086060850152610400840151610100850151600080516020615cd483398151915291900861010085015261427c8b8b608f81811061424857614248615a6e565b905060200201358c8c609081811061426257614262615a6e565b90506020020135866005605481106105cb576105cb615a6e565b90925090506142af848c8c7f182c192e1a301b321c341436098b03260a8d040a0b0e0d121016111a121e132286866152cd565b90925090506142d6848c8c73ffff4f3a523c533e0c405038068908081628172a86866152cd565b90925090506143287f0c7334a3b9a24f18780f368cf4e581f3ee206c995efcf2ad1d591075f34800d67f07c9c852e7cdf6ec7b0d7a9c71343fcc823836563a1eafe2964a7db347c644b486604e610623565b909250905061437a7f303399d69867569f44829166dbc811aec4050eb4351f07ce94137b2ea62615b77f21affd1d03a9a9e428842d8ef3da673c25888eba270e2de56fc7598de155776f86604d610623565b90925090506143cc7f0f8286c37689450e1171ff5f25b1fc58521cf3470ae9ea771918ecbee2094d847f1d371d5b9d97c37a0f1b8f3492dda158aa2dad81c52f7f2a512f63e59c705bed86604c610623565b909250905061441e7f139f3c97001d2d25928cab388bfe3f941f47bb46ef39095d1b0bc055185fa57f7f24d470b72fd0eecea0f5c65668c33110a005984460d7304582d1fcdd211df76886604b610623565b90925090506144707f1f9f5ab677532016ef9475fd5d43659678db3a699ad3d52e85c3f6ef2b3098c17f2cd62bc191e831701421d97bd158995f0f23e8645c14aa050602e958dd503b4786604a610623565b90925090506144c27f244e8af4f5d8644cfe7df55d0735c26e229afa7c7b92a39020bd02d8c8677b037f15a6dd332a6f0e9a9b643e86173dc6f99f4dc4bc18b215e0ac6a22e941fd9972866049610623565b90925090506145147f2bf75d9dd944249cd720ee71585980774cb83905b860feb5af3da42ca043b1157f07b4ff44a8e4250bf3ce16c06e8430b585a7a1e85243febe565a7929db37cc9f866048610623565b90925090506145667f20353da49405dca58c00c961510a2838b2bdeb06a053b8ed5931b8490967135b7f1ba4067d380f1db72eed4990fed1eb78d22addd5044bbea7d480f4e058d2fd08866047610623565b90925090506145b87f25d344a083be7e69cb907b8705b3bab3417d4a23f06d43ca7b287028a88ec5837f2c03f591ec6858cdff27cadaac1a67a1dc9ab7877f898686efe7033e7fd02a16866046610623565b909250905061460a7f19d9668da068ddb43d2e3d2c31214fefc028b0df0501ff8604575dafda6f1ae77f155edc361fbe4a694d9c6e3124a1c13d3180f39ab1af7521b35b6e2bb653b3da866045610623565b909250905061465c7f2bf75d9dd944249cd720ee71585980774cb83905b860feb5af3da42ca043b1157f07b4ff44a8e4250bf3ce16c06e8430b585a7a1e85243febe565a7929db37cc9f866044610623565b90925090506146ae7f1936a9539ed59e0f2c4665a13ee2bdf544ee1359b2a47f4f8d3666540d5be89e7f15efeffb7af6c45498a8d4779c0a2ca3a116a96348e8e51392ef924d6ab7dbfd866043610623565b90925090506147007f2fd08ae291ca0c95ada3f562b9f9be896737fd57493c4cefa087979abda4d2d67f04a6506069e2d39e944abcc54e70e881ccdd429ed4c1017fbe1099efeb70465f866042610623565b90925090506147527f0141bcf8e5540e9f5aa60645bf265946a71874beb52ddca1a0df8df6bbc0e0fa7f14e8506ee1911816df221897db48964bf861b4abecdb9da24afbcf9b0c4d18b8866041610623565b90925090506147a47f2ea5cb6082a4df4a36091fef8188e8e0f8d4b6e1e37707746707d99f548aef427f1766582f9e1ec20bed2f0d93154ae653f3089c934fca9f7b87192ed78b760c8d866040610623565b90925090506147f67f136635b335232ad0bb9ec1dd165740fb1f32464fd47c68a84fa6844059faf5217f090e5e51625ce01fec4c2647771bd32f228b8ea580c498822ee58d2a607b892186603f610623565b90925090506148487f143877d82d6f4d6a6e18301f05defdfa526f0d95977cec3c32e231b1aa0a81567f1906928f9c2d199d9062ece64e8dbff97e27ab2d8326b40e7ea77a950b21ddd986603e610623565b909250905061489a7f27ebdd749900c0af821c3d7bfee6f6216c2a101d247a8dd93db6590692d1689a7f2da8ee70127f67344aded9134ceff263c69790b3d020786c616f76349b19aef386603d610623565b90925090506148ec7f148ff3c1217e5849d79a5ad4e55e1f66e553e0c24a335730306b58c35f0be7647f29d393499e332436f2578d1e95f1aa58d1539c3bd0820157a6e9ed12a906301586603c610623565b909250905061493e7f1d0246b7158fd8adee20544a12a9c7037653efa8e5ca0da702f29744a3cc595d7f0d1c5bd48350de3282920c3453c6da531a1fd6fce81bacfd5e5289123458d67586603b610623565b90925090506149907f0a690884507cd616b1598e45913a0478135225c4a1ed39eb4d22552feff5f3b07f119e66501b5ff7f5a2d09bce4b7b1fe0e078c6764867222ed23ba35f317f200086603a610623565b90925090506149e27f18cfb2048fda3eb8a660efd7855014c0500be2531cbcd7e163455fe2b1972ce37f0e835d2d22b6c1e675e76f544bb7aea2e74b04659f91ecf97eccca4024c49326866039610623565b9092509050614a347f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000866038610623565b9092509050614a5f848c8c77ffff070015021e041f06250c28102b142e18311c3420372486866152cd565b85516020870151929450909250614a7991849184916153d5565b60208601528452614a8e6001600286816105cb565b85516020870151929450909250614aa69184846154e5565b602086018190528186526101c08601516101e090960151959d959c50909a509850929650505050505050565b614ada615834565b80517f186282957db913abd99f91db59fe69922e95040603ef44c0bd7aa3adeef8f5ac905280517f17944351223333f260ddc3b4af45191b856689eda9eab5cbcddbbe570ce860d2602091820152810180517f298adc7396bd3865cbf6d6df91bae406694e6d2215baa893bdeadb63052895f49052517f297772d34bc9aa8ae56162486363ffe417b02dc7e8c207fc2cc20203e67a02ad9060015b602002015290565b614b85615834565b80517f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2905280517f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed602091820152810180517f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec9052517f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d906001614b75565b60008083516006614c359190615b89565b905060008167ffffffffffffffff811115614c5257614c52615ae4565b604051908082528060200260200182016040528015614c7b578160200160208202803683370190505b509050614c86615897565b60008551875114614c9657600080fd5b60005b8751811015614ecf57878181518110614cb457614cb4615a6e565b60200260200101516000015184826006614cce9190615b89565b614cd9906000615acc565b81518110614ce957614ce9615a6e565b602002602001018181525050878181518110614d0757614d07615a6e565b60200260200101516020015184826006614d219190615b89565b614d2c906001615acc565b81518110614d3c57614d3c615a6e565b602002602001018181525050868181518110614d5a57614d5a615a6e565b6020908102919091010151515184614d73836006615b89565b614d7e906002615acc565b81518110614d8e57614d8e615a6e565b602002602001018181525050868181518110614dac57614dac615a6e565b60209081029190910181015151015184614dc7836006615b89565b614dd2906003615acc565b81518110614de257614de2615a6e565b602002602001018181525050868181518110614e0057614e00615a6e565b602002602001015160200151600060028110614e1e57614e1e615a6e565b602002015184614e2f836006615b89565b614e3a906004615acc565b81518110614e4a57614e4a615a6e565b602002602001018181525050868181518110614e6857614e68615a6e565b602002602001015160200151600160028110614e8657614e86615a6e565b602002015184614e97836006615b89565b614ea2906005615acc565b81518110614eb257614eb2615a6e565b602090810291909101015280614ec781615bc6565b915050614c99565b50602082602086026020860160085afa905080614eeb57600080fd5b5051151595945050505050565b60606000614f058361552a565b600101905060008167ffffffffffffffff811115614f2557614f25615ae4565b6040519080825280601f01601f191660200182016040528015614f4f576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084614f5957509392505050565b600080614fc16158b5565b6000614fe0604051806040016040528060008152602001600081525090565b8783526020830187905260408084018790528160608560075afa91508161500657600080fd5b8051602090910151909890975095505050505050565b6000806150276158d3565b8781526020810187905260408101869052606081018590526080810184905261504f8161560d565b6060810151608090910151909890975095505050505050565b6002828261507581615bc6565b93506090811061508757615087615a6e565b602002015282828261509881615bc6565b9350609081106150aa576150aa615a6e565b6020020152505050565b600182826150c181615bc6565b9350609081106150d3576150d3615a6e565b60200201528382826150e481615bc6565b9350609081106150f6576150f6615a6e565b602002015282828261510781615bc6565b93506090811061511957615119615a6e565b602002015250505050565b600080838363ffffffff166090811061513f5761513f615a6e565b60200201818152505060006151718484602061515b9190615c15565b615166906001615c41565b63ffffffff16615648565b51905061517d8161567e565b93525090919050565b6000615190615816565b615198615897565b6020808352828101819052604083018190526060830186905260808301859052600080516020615cd483398151915260a08401526000908260c08560055afa9050806151e357600080fd5b5051949350505050565b6000816000036151fc57600080fd5b600080516020615cd4833981519152615214836157f2565b84099392505050565b6000600080516020615cd483398151915282600080516020615cd483398151915285870908949350505050565b6000805b60208110156152c35760ff8085169081146152aa5760089490941c93600080516020615cd483398151915287826054811061528b5761528b615a6e565b6020020151600080516020615cd48339815191528689090893506152b0565b506152c3565b506152bc600182615acc565b905061524e565b5090949350505050565b6000806152d86158d3565b606081018590526080810184905260005b60208110156153ba5760ff8088169081146153a157601088901c9760081c60ff168a8a8381811061531c5761531c615a6e565b905060200201358460006005811061533657615336615a6e565b60200201528a8a615348846001615acc565b81811061535757615357615a6e565b905060200201358460016005811061537157615371615a6e565b60200201528b816054811061538857615388615a6e565b6020020151604085015261539b8461560d565b506153a7565b506153ba565b506153b3600282615acc565b90506152e9565b50606081015160809091015190999098509650505050505050565b60008060006153f7604051806040016040528060008152602001600081525090565b6153ff6158f1565b888152602081018890526040808201889052606082018790528260808360065afa92508261542c57600080fd5b508051602090910151909890975095505050505050565b6000805b60208110156154da5760ff8085169081146154c157601085901c9460081c60ff16600080516020615cd483398151915285600080516020615cd48339815191528b846054811061549957615499615a6e565b60200201518b8b878181106154b0576154b0615a6e565b9050602002013509089450506154c7565b506154da565b506154d3600282615acc565b9050615447565b509095945050505050565b60008061551d868686615518877f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47615bfe565b6153d5565b9150915094509492505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310615573577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061559f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106155bd57662386f26fc10000830492506010015b6305f5e10083106155d5576305f5e100830492506008015b61271083106155e957612710830492506004015b606483106155fb576064830492506002015b600a8310615607576001015b92915050565b600060406020830160608460075afa90508061562857600080fd5b60406060830160806020850160065afa90508061564457600080fd5b5050565b615650615897565b6000602082848660026107d05a03fa9050808061566957fe5b508061567757615677615c69565b5092915050565b6000816157d18160008190506008817eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff16901b6008827fff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff0016901c1790506010817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff16901b6010827fffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff000016901c1790506020817bffffffff00000000ffffffff00000000ffffffff00000000ffffffff16901b6020827fffffffff00000000ffffffff00000000ffffffff00000000ffffffff0000000016901c17905060408177ffffffffffffffff0000000000000000ffffffffffffffff16901b6040827fffffffffffffffff0000000000000000ffffffffffffffff000000000000000016901c179050608081901b608082901c179050919050565b90506157eb600080516020615cd483398151915282615c98565b9392505050565b6000615607826158116002600080516020615cd4833981519152615bfe565b615186565b6040518060c001604052806006906020820280368337509192915050565b604051806040016040528061584761590f565b815260200161585461590f565b905290565b60405180610a8001604052806054906020820280368337509192915050565b6040518061120001604052806090906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b6040518060a001604052806005906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b60008083601f84011261593f57600080fd5b50813567ffffffffffffffff81111561595757600080fd5b6020830191508360208260051b850101111561597257600080fd5b9250929050565b60008060008060006060868803121561599157600080fd5b853567ffffffffffffffff808211156159a957600080fd5b6159b589838a0161592d565b909750955060208801359150808211156159ce57600080fd5b506159db8882890161592d565b96999598509660400135949350505050565b60005b83811015615a085781810151838201526020016159f0565b83811115615a17576000848401525b50505050565b6020815260008251806020840152615a3c8160408501602087016159ed565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115615adf57615adf615a9d565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008451615b258184602089016159ed565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551615b61816001850160208a016159ed565b60019201918201528351615b7c8160028401602088016159ed565b0160020195945050505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615bc157615bc1615a9d565b500290565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615bf757615bf7615a9d565b5060010190565b600082821015615c1057615c10615a9d565b500390565b600063ffffffff80831681851681830481118215151615615c3857615c38615a9d565b02949350505050565b600063ffffffff808316818516808303821115615c6057615c60615a9d565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082615cce577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50069056fe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(ZKVerifierStorageLayoutJSON), ZKVerifierStorageLayout); err != nil { + panic(err) + } + + layouts["ZKVerifier"] = ZKVerifierStorageLayout + deployedBytecodes["ZKVerifier"] = ZKVerifierDeployedBin +} diff --git a/kroma-bindings/doc.go b/kroma-bindings/doc.go new file mode 100644 index 000000000..1e9f19816 --- /dev/null +++ b/kroma-bindings/doc.go @@ -0,0 +1,10 @@ +/* + +The contracts package provides Go bindings for our contracts. + + +To regenerate the bindings, run `make` +The following programs are required: `jq`, `abigen`, and `solc` (at version 0.8.10) +*/ + +package op_bindings diff --git a/op-bindings/extractor/main.go b/kroma-bindings/gen/extractor/types.go similarity index 74% rename from op-bindings/extractor/main.go rename to kroma-bindings/gen/extractor/types.go index 6d059c5c4..f37d7ebf7 100644 --- a/op-bindings/extractor/main.go +++ b/kroma-bindings/gen/extractor/types.go @@ -1,8 +1,7 @@ -package main +package extractor import ( "errors" - "flag" "fmt" "go/format" "go/parser" @@ -20,16 +19,8 @@ import ( const TypesBinding = "types.go" -func main() { - var bindingsDir string - var name string - var pkg string - flag.StringVar(&bindingsDir, "dir", "", "Directory of bindings") - flag.StringVar(&name, "name", "", "Name of binding file") - flag.StringVar(&pkg, "pkg", "bindings", "Go package name") - flag.Parse() - - if len(bindingsDir) == 0 { +func ExtractTypes(outDir string, name string, pkg string) { + if len(outDir) == 0 { log.Fatalf("must define a bindings directory (example: ../bindings)") } @@ -37,13 +28,14 @@ func main() { log.Fatalf("must define a binding filename (example: helloworld.go)") } + filename := strings.ToLower(name) + ".go" regex := regexp.MustCompile(`(?s)(?:\/\/[^\n]*\n|\/\*.*?\*\/)*\s*type\s+Types\w+\s+struct\s*\{.*?\}`) - source, err := os.ReadFile(path.Join(bindingsDir, name)) + source, err := os.ReadFile(path.Join(outDir, filename)) if err != nil { panic(err) } - output, err := os.ReadFile(path.Join(bindingsDir, TypesBinding)) + output, err := os.ReadFile(path.Join(outDir, TypesBinding)) if err != nil { if errors.Is(err, os.ErrNotExist) { output = []byte{} @@ -53,7 +45,7 @@ func main() { } if len(output) == 0 { - output = []byte(strings.Replace(tmpl, "{{.Package}}", pkg, 1)) + output = []byte(strings.Replace(typesTmpl, "{{.Package}}", pkg, 1)) } for _, block := range regex.FindAllString(string(source), -1) { @@ -84,19 +76,19 @@ func main() { log.Fatal(err) } format.Node(io.Discard, fset, node) - err = os.WriteFile(path.Join(bindingsDir, TypesBinding), output, os.ModePerm) + err = os.WriteFile(path.Join(outDir, TypesBinding), output, os.ModePerm) if err != nil { panic(err) } // replace original code - err = os.WriteFile(path.Join(bindingsDir, name), source, os.ModePerm) + err = os.WriteFile(path.Join(outDir, filename), source, os.ModePerm) if err != nil { panic(err) } } -var tmpl = `// Code generated - DO NOT EDIT. +var typesTmpl = `// Code generated - DO NOT EDIT. // This file is a generated binding and any manual changes will be lost. package {{.Package}} diff --git a/kroma-bindings/gen/main.go b/kroma-bindings/gen/main.go new file mode 100644 index 000000000..fdf7c62d6 --- /dev/null +++ b/kroma-bindings/gen/main.go @@ -0,0 +1,232 @@ +package main + +import ( + "encoding/json" + "errors" + "flag" + "log" + "os" + "os/exec" + "path" + "path/filepath" + "regexp" + "strings" + "text/template" + + "github.com/ethereum-optimism/optimism/op-bindings/ast" + "github.com/ethereum-optimism/optimism/op-bindings/foundry" + "github.com/kroma-network/kroma/kroma-bindings/gen/extractor" +) + +type flags struct { + ForgeArtifacts string + Contracts string + SourceMaps string + OutDir string + Package string + MonorepoBase string +} + +type data struct { + Name string + StorageLayout string + DeployedBin string + Package string + DeployedSourceMap string +} + +func main() { + var f flags + flag.StringVar(&f.ForgeArtifacts, "forge-artifacts", "", "Forge artifacts directory, to load sourcemaps from, if available") + flag.StringVar(&f.OutDir, "out", "", "Output directory to put code in") + flag.StringVar(&f.Contracts, "contracts", "artifacts.json", "Path to file containing list of contracts to generate bindings for") + flag.StringVar(&f.SourceMaps, "source-maps", "", "Comma-separated list of contracts to generate source-maps for") + flag.StringVar(&f.Package, "package", "artifacts", "Go package name") + flag.StringVar(&f.MonorepoBase, "monorepo-base", "", "Base of the monorepo") + flag.Parse() + + if f.MonorepoBase == "" { + log.Fatal("must provide -monorepo-base") + } + log.Printf("Using monorepo base %s\n", f.MonorepoBase) + + contractData, err := os.ReadFile(f.Contracts) + if err != nil { + log.Fatal("error reading contract list: %w\n", err) + } + contracts := []string{} + if err := json.Unmarshal(contractData, &contracts); err != nil { + log.Fatal("error parsing contract list: %w\n", err) + } + + sourceMaps := strings.Split(f.SourceMaps, ",") + sourceMapsSet := make(map[string]struct{}) + for _, k := range sourceMaps { + sourceMapsSet[k] = struct{}{} + } + + if len(contracts) == 0 { + log.Fatalf("must define a list of contracts") + } + + t := template.Must(template.New("artifact").Parse(tmpl)) + + // Make a temp dir to hold all the inputs for abigen + dir, err := os.MkdirTemp("", "op-bindings") + if err != nil { + log.Fatal(err) + } + log.Printf("Using package %s\n", f.Package) + + defer os.RemoveAll(dir) + log.Printf("created temp dir %s\n", dir) + + // If some contracts have the same name then the path to their + // artifact depends on their full import path. Scan over all artifacts + // and hold a mapping from the contract name to the contract path. + // Walk walks the directory deterministically, so the later instance + // of the contract with the same name will be used + re := regexp.MustCompile(`\.\d+\.\d+\.\d+`) + artifactPaths := make(map[string]string) + if err := filepath.Walk(f.ForgeArtifacts, + func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + + if strings.HasSuffix(path, ".json") { + base := filepath.Base(path) + name := strings.TrimSuffix(base, ".json") + + // remove the compiler version from the name + sanitized := re.ReplaceAllString(name, "") + if _, ok := artifactPaths[sanitized]; !ok { + artifactPaths[sanitized] = path + } + } + return nil + }); err != nil { + log.Fatal(err) + } + + for _, name := range contracts { + log.Printf("generating code for %s\n", name) + + artifactPath := path.Join(f.ForgeArtifacts, name+".sol", name+".json") + forgeArtifactData, err := os.ReadFile(artifactPath) + if errors.Is(err, os.ErrNotExist) { + log.Printf("cannot find forge-artifact for %s at standard path %s, trying %s\n", name, artifactPath, artifactPaths[name]) + artifactPath = artifactPaths[name] + forgeArtifactData, err = os.ReadFile(artifactPath) + if errors.Is(err, os.ErrNotExist) { + log.Fatalf("cannot find forge-artifact of %q\n", name) + } + } + + log.Printf("using forge-artifact %s\n", artifactPath) + var artifact foundry.Artifact + if err := json.Unmarshal(forgeArtifactData, &artifact); err != nil { + log.Fatalf("failed to parse forge artifact of %q: %v\n", name, err) + } + + rawAbi := artifact.Abi + if err != nil { + log.Fatalf("error marshaling abi: %v\n", err) + } + abiFile := path.Join(dir, name+".abi") + if err := os.WriteFile(abiFile, rawAbi, 0o600); err != nil { + log.Fatalf("error writing file: %v\n", err) + } + rawBytecode := artifact.Bytecode.Object.String() + if err != nil { + log.Fatalf("error marshaling bytecode: %v\n", err) + } + bytecodeFile := path.Join(dir, name+".bin") + if err := os.WriteFile(bytecodeFile, []byte(rawBytecode), 0o600); err != nil { + log.Fatalf("error writing file: %v\n", err) + } + + cwd, err := os.Getwd() + if err != nil { + log.Fatalf("error getting cwd: %v\n", err) + } + + lowerName := strings.ToLower(name) + outFile := path.Join(cwd, f.Package, lowerName+".go") + + cmd := exec.Command("abigen", "--abi", abiFile, "--bin", bytecodeFile, "--pkg", f.Package, "--type", name, "--out", outFile) + cmd.Stdout = os.Stdout + + if err := cmd.Run(); err != nil { + log.Fatalf("error running abigen: %v\n", err) + } + + storage := artifact.StorageLayout + canonicalStorage := ast.CanonicalizeASTIDs(&storage, f.MonorepoBase) + ser, err := json.Marshal(canonicalStorage) + if err != nil { + log.Fatalf("error marshaling storage: %v\n", err) + } + serStr := strings.Replace(string(ser), "\"", "\\\"", -1) + + deployedSourceMap := "" + if _, ok := sourceMapsSet[name]; ok { + deployedSourceMap = artifact.DeployedBytecode.SourceMap + } + + d := data{ + Name: name, + StorageLayout: serStr, + DeployedBin: artifact.DeployedBytecode.Object.String(), + Package: f.Package, + DeployedSourceMap: deployedSourceMap, + } + + fname := filepath.Join(f.OutDir, strings.ToLower(name)+"_more.go") + outfile, err := os.OpenFile( + fname, + os.O_RDWR|os.O_CREATE|os.O_TRUNC, + 0o600, + ) + if err != nil { + log.Fatalf("error opening %s: %v\n", fname, err) + } + + if err := t.Execute(outfile, d); err != nil { + log.Fatalf("error writing template %s: %v", outfile.Name(), err) + } + outfile.Close() + log.Printf("wrote file %s\n", outfile.Name()) + + extractor.ExtractTypes(f.OutDir, name, f.Package) + } +} + +var tmpl = `// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package {{.Package}} + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const {{.Name}}StorageLayoutJSON = "{{.StorageLayout}}" + +var {{.Name}}StorageLayout = new(solc.StorageLayout) + +var {{.Name}}DeployedBin = "{{.DeployedBin}}" +{{if .DeployedSourceMap}} +var {{.Name}}DeployedSourceMap = "{{.DeployedSourceMap}}" +{{end}} +func init() { + if err := json.Unmarshal([]byte({{.Name}}StorageLayoutJSON), {{.Name}}StorageLayout); err != nil { + panic(err) + } + + layouts["{{.Name}}"] = {{.Name}}StorageLayout + deployedBytecodes["{{.Name}}"] = {{.Name}}DeployedBin +} +` diff --git a/op-bindings/predeploys/addresses.go b/kroma-bindings/predeploys/addresses.go similarity index 93% rename from op-bindings/predeploys/addresses.go rename to kroma-bindings/predeploys/addresses.go index 5fe6448df..63381294a 100644 --- a/op-bindings/predeploys/addresses.go +++ b/kroma-bindings/predeploys/addresses.go @@ -13,6 +13,7 @@ const ( L1FeeVault = "0x4200000000000000000000000000000000000007" ValidatorRewardVault = "0x4200000000000000000000000000000000000008" L2StandardBridge = "0x4200000000000000000000000000000000000009" + GovernanceToken = "0x4200000000000000000000000000000000000010" L2ERC721Bridge = "0x420000000000000000000000000000000000000A" KromaMintableERC20Factory = "0x420000000000000000000000000000000000000B" KromaMintableERC721Factory = "0x420000000000000000000000000000000000000C" @@ -29,6 +30,7 @@ var ( L1FeeVaultAddr = common.HexToAddress(L1FeeVault) ValidatorRewardVaultAddr = common.HexToAddress(ValidatorRewardVault) L2StandardBridgeAddr = common.HexToAddress(L2StandardBridge) + GovernanceTokenAddr = common.HexToAddress(GovernanceToken) L2ERC721BridgeAddr = common.HexToAddress(L2ERC721Bridge) KromaMintableERC20FactoryAddr = common.HexToAddress(KromaMintableERC20Factory) KromaMintableERC721FactoryAddr = common.HexToAddress(KromaMintableERC721Factory) @@ -57,6 +59,7 @@ func init() { Predeploys["L1FeeVault"] = &L1FeeVaultAddr Predeploys["ValidatorRewardVault"] = &ValidatorRewardVaultAddr Predeploys["L2StandardBridge"] = &L2StandardBridgeAddr + Predeploys["GovernanceToken"] = &GovernanceTokenAddr Predeploys["L2ERC721Bridge"] = &L2ERC721BridgeAddr Predeploys["KromaMintableERC20Factory"] = &KromaMintableERC20FactoryAddr Predeploys["KromaMintableERC721Factory"] = &KromaMintableERC721FactoryAddr diff --git a/op-bindings/predeploys/addresses_test.go b/kroma-bindings/predeploys/addresses_test.go similarity index 95% rename from op-bindings/predeploys/addresses_test.go rename to kroma-bindings/predeploys/addresses_test.go index e883992fb..677da24d4 100644 --- a/op-bindings/predeploys/addresses_test.go +++ b/kroma-bindings/predeploys/addresses_test.go @@ -8,7 +8,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/stretchr/testify/require" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" + "github.com/kroma-network/kroma/kroma-bindings/bindings" ) func TestGethAddresses(t *testing.T) { diff --git a/kroma-bindings/predeploys/legacy_addresses.go b/kroma-bindings/predeploys/legacy_addresses.go new file mode 100644 index 000000000..a46f6c4b4 --- /dev/null +++ b/kroma-bindings/predeploys/legacy_addresses.go @@ -0,0 +1,11 @@ +package predeploys + +import "github.com/ethereum/go-ethereum/common" + +const ( + LegacyERC20ETH = "0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000" +) + +var ( + LegacyERC20ETHAddr = common.HexToAddress(LegacyERC20ETH) +) diff --git a/kroma-chain-ops/cmd/check-deploy-config/main.go b/kroma-chain-ops/cmd/check-deploy-config/main.go new file mode 100644 index 000000000..1e956db15 --- /dev/null +++ b/kroma-chain-ops/cmd/check-deploy-config/main.go @@ -0,0 +1,55 @@ +package main + +import ( + "os" + "path/filepath" + "strings" + + "github.com/mattn/go-isatty" + "github.com/urfave/cli/v2" + + "github.com/ethereum/go-ethereum/log" + + "github.com/kroma-network/kroma/kroma-chain-ops/genesis" +) + +func main() { + log.Root().SetHandler(log.StreamHandler(os.Stderr, log.TerminalFormat(isatty.IsTerminal(os.Stderr.Fd())))) + + app := &cli.App{ + Name: "check-deploy-config", + Usage: "Check that a deploy config is valid", + Flags: []cli.Flag{ + &cli.StringFlag{ + Name: "path", + Required: true, + Usage: "File system path to the deploy config", + }, + }, + Action: entrypoint, + } + + if err := app.Run(os.Args); err != nil { + log.Crit("error checking deploy config", "err", err) + } +} + +func entrypoint(ctx *cli.Context) error { + path := ctx.String("path") + + name := strings.TrimSuffix(filepath.Base(path), filepath.Ext(path)) + log.Info("Checking deploy config", "name", name, "path", path) + + config, err := genesis.NewDeployConfig(path) + if err != nil { + return err + } + + // Check the config, no need to call `CheckAddresses()` + if err := config.Check(); err != nil { + return err + } + + log.Info("Valid deploy config") + return nil +} diff --git a/kroma-chain-ops/cmd/check-l2/main.go b/kroma-chain-ops/cmd/check-l2/main.go new file mode 100644 index 000000000..db37511d5 --- /dev/null +++ b/kroma-chain-ops/cmd/check-l2/main.go @@ -0,0 +1,795 @@ +package main + +import ( + "bytes" + "context" + "errors" + "fmt" + "math/big" + "os" + + "golang.org/x/sync/errgroup" + + "github.com/mattn/go-isatty" + "github.com/urfave/cli/v2" + + "github.com/ethereum/go-ethereum/accounts/abi/bind" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/ethclient" + "github.com/ethereum/go-ethereum/log" + + "github.com/kroma-network/kroma/kroma-bindings/bindings" + "github.com/kroma-network/kroma/kroma-bindings/predeploys" + "github.com/kroma-network/kroma/kroma-chain-ops/genesis" + "github.com/kroma-network/kroma/op-chain-ops/clients" +) + +var defaultCrossDomainMessageSender = common.HexToAddress("0x000000000000000000000000000000000000dead") + +// Default script for checking that L2 has been configured correctly. This should be extended in the future +// to pull in L1 deploy artifacts and assert that the L2 state is consistent with the L1 state. +func main() { + log.Root().SetHandler(log.StreamHandler(os.Stderr, log.TerminalFormat(isatty.IsTerminal(os.Stderr.Fd())))) + + app := &cli.App{ + Name: "check-l2", + Usage: "Check that an OP Stack L2 has been configured correctly", + Flags: []cli.Flag{ + &cli.StringFlag{ + Name: "l1-rpc-url", + Value: "http://127.0.0.1:8545", + Usage: "L1 RPC URL", + EnvVars: []string{"L1_RPC_URL"}, + }, + &cli.StringFlag{ + Name: "l2-rpc-url", + Value: "http://127.0.0.1:9545", + Usage: "L2 RPC URL", + EnvVars: []string{"L2_RPC_URL"}, + }, + }, + Action: entrypoint, + } + + if err := app.Run(os.Args); err != nil { + log.Crit("error checking l2", "err", err) + } +} + +// entrypoint is the entrypoint for the check-l2 script +func entrypoint(ctx *cli.Context) error { + clients, err := clients.NewClientsFromContext(ctx) + if err != nil { + return err + } + + log.Info("Checking predeploy proxy config") + g := new(errgroup.Group) + + // Check that all proxies are configured correctly + // Do this in parallel but not too quickly to allow for + // querying against rate limiting RPC backends + count := uint64(2048) + for i := uint64(0); i < count; i++ { + i := i + if i%4 == 0 { + log.Info("Checking proxy", "index", i, "total", count) + if err := g.Wait(); err != nil { + return err + } + } + g.Go(func() error { + return checkPredeploy(clients.L2Client, i) + }) + } + + if err := g.Wait(); err != nil { + return err + } + log.Info("All predeploy proxies are set correctly") + + // Check that all of the defined predeploys are set up correctly + for name, addr := range predeploys.Predeploys { + log.Info("Checking predeploy", "name", name, "address", addr.Hex()) + if err := checkPredeployConfig(clients.L2Client, name); err != nil { + return err + } + } + return nil +} + +// checkPredeploy ensures that the predeploy at index i has the correct proxy admin set +func checkPredeploy(client *ethclient.Client, i uint64) error { + bigAddr := new(big.Int).Or(genesis.BigL2PredeployNamespace, new(big.Int).SetUint64(i)) + addr := common.BigToAddress(bigAddr) + if !predeploys.IsProxied(addr) { + return nil + } + admin, err := getEIP1967AdminAddress(client, addr) + if err != nil { + return err + } + if admin != predeploys.ProxyAdminAddr { + return fmt.Errorf("%s does not have correct proxy admin set", addr) + } + return nil +} + +// checkPredeployConfig checks that the defined predeploys are configured correctly +func checkPredeployConfig(client *ethclient.Client, name string) error { + predeploy := predeploys.Predeploys[name] + if predeploy == nil { + return fmt.Errorf("unknown predeploy %s", name) + } + p := *predeploy + + g := new(errgroup.Group) + if predeploys.IsProxied(p) { + // Check that an implementation is set. If the implementation has been upgraded, + // it will be considered non-standard. Ensure that there is code set at the implementation. + g.Go(func() error { + impl, err := getEIP1967ImplementationAddress(client, p) + if err != nil { + return err + } + log.Info(name, "implementation", impl.Hex()) + standardImpl, err := genesis.AddressToCodeNamespace(p) + if err != nil { + return err + } + if impl != standardImpl { + log.Warn("%s does not have the standard implementation", name) + } + implCode, err := client.CodeAt(context.Background(), impl, nil) + if err != nil { + return err + } + if len(implCode) == 0 { + return fmt.Errorf("%s implementation is not deployed", name) + } + return nil + }) + + // Ensure that the code is set to the proxy bytecode as expected + g.Go(func() error { + proxyCode, err := client.CodeAt(context.Background(), p, nil) + if err != nil { + return err + } + proxy, err := bindings.GetDeployedBytecode("Proxy") + if err != nil { + return err + } + if !bytes.Equal(proxyCode, proxy) { + return fmt.Errorf("%s does not have the standard proxy code", name) + } + return nil + }) + } + + // Check the predeploy specific config is correct + g.Go(func() error { + switch p { + case predeploys.L2CrossDomainMessengerAddr: + if err := checkL2CrossDomainMessenger(p, client); err != nil { + return err + } + + case predeploys.GasPriceOracleAddr: + if err := checkGasPriceOracle(p, client); err != nil { + return err + } + + case predeploys.L2StandardBridgeAddr: + if err := checkL2StandardBridge(p, client); err != nil { + return err + } + + case predeploys.ValidatorRewardVaultAddr: + if err := checkValidatorRewardVault(p, client); err != nil { + return err + } + + case predeploys.KromaMintableERC20FactoryAddr: + if err := checkKromaMintableERC20Factory(p, client); err != nil { + return err + } + + case predeploys.L1BlockAddr: + if err := checkL1Block(p, client); err != nil { + return err + } + + case predeploys.WETH9Addr: + if err := checkWETH9(p, client); err != nil { + return err + } + + case predeploys.GovernanceTokenAddr: + if err := checkGovernanceToken(p, client); err != nil { + return err + } + + case predeploys.L2ERC721BridgeAddr: + if err := checkL2ERC721Bridge(p, client); err != nil { + return err + } + + case predeploys.KromaMintableERC721FactoryAddr: + if err := checkKromaMintableERC721Factory(p, client); err != nil { + return err + } + + case predeploys.ProxyAdminAddr: + if err := checkProxyAdmin(p, client); err != nil { + return err + } + + case predeploys.ProtocolVaultAddr: + if err := checkProtocolVault(p, client); err != nil { + return err + } + + case predeploys.L1FeeVaultAddr: + if err := checkL1FeeVault(p, client); err != nil { + return err + } + + case predeploys.L2ToL1MessagePasserAddr: + if err := checkL2ToL1MessagePasser(p, client); err != nil { + return err + } + } + return nil + }) + + if err := g.Wait(); err != nil { + return err + } + + return nil +} + +func checkL2ToL1MessagePasser(addr common.Address, client *ethclient.Client) error { + contract, err := bindings.NewL2ToL1MessagePasser(addr, client) + if err != nil { + return err + } + messageVersion, err := contract.MESSAGEVERSION(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("L2ToL1MessagePasser", "MESSAGE_VERSION", messageVersion) + + messageNonce, err := contract.MessageNonce(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("L2ToL1MessagePasser", "MESSAGE_NONCE", messageNonce) + return nil +} + +func checkL1FeeVault(addr common.Address, client *ethclient.Client) error { + contract, err := bindings.NewL1FeeVault(addr, client) + if err != nil { + return err + } + recipient, err := contract.RECIPIENT(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("L1FeeVault", "RECIPIENT", recipient.Hex()) + if recipient == (common.Address{}) { + return errors.New("RECIPIENT should not be address(0)") + } + + minWithdrawalAmount, err := contract.MINWITHDRAWALAMOUNT(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("L1FeeVault", "MIN_WITHDRAWAL_AMOUNT", minWithdrawalAmount) + + version, err := contract.Version(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("L1FeeVault version", "version", version) + return nil +} + +func checkProtocolVault(addr common.Address, client *ethclient.Client) error { + contract, err := bindings.NewProtocolVault(addr, client) + if err != nil { + return err + } + recipient, err := contract.RECIPIENT(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("ProtocolVault", "RECIPIENT", recipient.Hex()) + if recipient == (common.Address{}) { + return errors.New("RECIPIENT should not be address(0)") + } + + minWithdrawalAmount, err := contract.MINWITHDRAWALAMOUNT(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("ProtocolVault", "MIN_WITHDRAWAL_AMOUNT", minWithdrawalAmount) + + version, err := contract.Version(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("ProtocolVault version", "version", version) + return nil +} + +func checkProxyAdmin(addr common.Address, client *ethclient.Client) error { + contract, err := bindings.NewProxyAdmin(addr, client) + if err != nil { + return err + } + + owner, err := contract.Owner(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("ProxyAdmin", "owner", owner.Hex()) + if owner == (common.Address{}) { + return errors.New("ProxyAdmin.owner is zero address") + } + return nil +} + +func checkKromaMintableERC721Factory(addr common.Address, client *ethclient.Client) error { + contract, err := bindings.NewKromaMintableERC721Factory(addr, client) + if err != nil { + return err + } + bridge, err := contract.BRIDGE(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("KromaMintableERC721Factory", "BRIDGE", bridge.Hex()) + if bridge == (common.Address{}) { + return errors.New("KromaMintableERC721Factory.BRIDGE is zero address") + } + + remoteChainID, err := contract.REMOTECHAINID(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("KromaMintableERC721Factory", "REMOTE_CHAIN_ID", remoteChainID) + + version, err := contract.Version(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("KromaMintableERC721Factory version", "version", version) + return nil +} + +func checkL2ERC721Bridge(addr common.Address, client *ethclient.Client) error { + contract, err := bindings.NewL2ERC721Bridge(addr, client) + if err != nil { + return err + } + messenger, err := contract.MESSENGER(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("L2ERC721Bridge", "MESSENGER", messenger.Hex()) + if messenger == (common.Address{}) { + return errors.New("L2ERC721Bridge.MESSENGER is zero address") + } + + otherBridge, err := contract.OTHERBRIDGE(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("L2ERC721Bridge", "OTHERBRIDGE", otherBridge.Hex()) + if otherBridge == (common.Address{}) { + return errors.New("L2ERC721Bridge.OTHERBRIDGE is zero address") + } + + initialized, err := getInitialized("L2ERC721Bridge", addr, client) + if err != nil { + return err + } + log.Info("L2ERC721Bridge", "_initialized", initialized) + + initializing, err := getInitializing("L2ERC721Bridge", addr, client) + if err != nil { + return err + } + log.Info("L2ERC721Bridge", "_initializing", initializing) + + version, err := contract.Version(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("L2ERC721Bridge version", "version", version) + return nil +} + +func checkGovernanceToken(addr common.Address, client *ethclient.Client) error { + code, err := client.CodeAt(context.Background(), addr, nil) + if err != nil { + return err + } + + if len(code) > 0 { + // This should also check the owner + contract, err := bindings.NewERC20(addr, client) + if err != nil { + return err + } + name, err := contract.Name(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("GovernanceToken", "name", name) + symbol, err := contract.Symbol(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("GovernanceToken", "symbol", symbol) + totalSupply, err := contract.TotalSupply(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("GovernanceToken", "totalSupply", totalSupply) + } else { + log.Info("No code at GovernanceToken") + } + return nil +} + +func checkWETH9(addr common.Address, client *ethclient.Client) error { + contract, err := bindings.NewWETH9(addr, client) + if err != nil { + return err + } + name, err := contract.Name(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("WETH9", "name", name) + if name != "Wrapped Ether" { + return fmt.Errorf("WETH9 name should be 'Wrapped Ether', got %s", name) + } + + symbol, err := contract.Symbol(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("WETH9", "symbol", symbol) + if symbol != "WETH" { + return fmt.Errorf("WETH9 symbol should be 'WETH', got %s", symbol) + } + + decimals, err := contract.Decimals(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("WETH9", "decimals", decimals) + if decimals != 18 { + return fmt.Errorf("WETH9 decimals should be 18, got %d", decimals) + } + return nil +} + +func checkL1Block(addr common.Address, client *ethclient.Client) error { + contract, err := bindings.NewL1Block(addr, client) + if err != nil { + return err + } + version, err := contract.Version(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("L1Block version", "version", version) + return nil +} + +func checkKromaMintableERC20Factory(addr common.Address, client *ethclient.Client) error { + contract, err := bindings.NewKromaMintableERC20Factory(addr, client) + if err != nil { + return err + } + + bridgeLegacy, err := contract.BRIDGE(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("KromaMintableERC20Factory", "BRIDGE", bridgeLegacy.Hex()) + if bridgeLegacy == (common.Address{}) { + return errors.New("KromaMintableERC20Factory.BRIDGE is zero address") + } + + bridge, err := contract.BRIDGE(&bind.CallOpts{}) + if err != nil { + return err + } + if bridge == (common.Address{}) { + return errors.New("KromaMintableERC20Factory.bridge is zero address") + } + log.Info("KromaMintableERC20Factory", "bridge", bridge.Hex()) + + initialized, err := getInitialized("KromaMintableERC20Factory", addr, client) + if err != nil { + return err + } + log.Info("KromaMintableERC20Factory", "_initialized", initialized) + + initializing, err := getInitializing("KromaMintableERC20Factory", addr, client) + if err != nil { + return err + } + log.Info("KromaMintableERC20Factory", "_initializing", initializing) + + version, err := contract.Version(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("KromaMintableERC20Factory version", "version", version) + return nil +} + +func checkValidatorRewardVault(addr common.Address, client *ethclient.Client) error { + contract, err := bindings.NewValidatorRewardVault(addr, client) + if err != nil { + return err + } + recipient, err := contract.RECIPIENT(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("ValidatorRewardVault", "RECIPIENT", recipient.Hex()) + if recipient == (common.Address{}) { + return errors.New("RECIPIENT should not be address(0)") + } + + minWithdrawalAmount, err := contract.MINWITHDRAWALAMOUNT(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("ValidatorRewardVault", "MIN_WITHDRAWAL_AMOUNT", minWithdrawalAmount) + + version, err := contract.Version(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("ValidatorRewardVault version", "version", version) + return nil +} + +func checkL2StandardBridge(addr common.Address, client *ethclient.Client) error { + contract, err := bindings.NewL2StandardBridge(addr, client) + if err != nil { + return err + } + otherBridge, err := contract.OTHERBRIDGE(&bind.CallOpts{}) + if err != nil { + return err + } + if otherBridge == (common.Address{}) { + return errors.New("OTHERBRIDGE should not be address(0)") + } + log.Info("L2StandardBridge", "OTHERBRIDGE", otherBridge.Hex()) + + messenger, err := contract.MESSENGER(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("L2StandardBridge", "MESSENGER", messenger.Hex()) + if messenger != predeploys.L2CrossDomainMessengerAddr { + return fmt.Errorf("L2StandardBridge MESSENGER should be %s, got %s", predeploys.L2CrossDomainMessengerAddr, messenger) + } + version, err := contract.Version(&bind.CallOpts{}) + if err != nil { + return err + } + + initialized, err := getInitialized("L2StandardBridge", addr, client) + if err != nil { + return err + } + log.Info("L2StandardBridge", "_initialized", initialized) + + initializing, err := getInitializing("L2StandardBridge", addr, client) + if err != nil { + return err + } + log.Info("L2StandardBridge", "_initializing", initializing) + + log.Info("L2StandardBridge version", "version", version) + return nil +} + +func checkGasPriceOracle(addr common.Address, client *ethclient.Client) error { + contract, err := bindings.NewGasPriceOracle(addr, client) + if err != nil { + return err + } + decimals, err := contract.DECIMALS(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("GasPriceOracle", "DECIMALS", decimals) + if decimals.Cmp(big.NewInt(6)) != 0 { + return fmt.Errorf("GasPriceOracle decimals should be 6, got %v", decimals) + } + + version, err := contract.Version(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("GasPriceOracle version", "version", version) + return nil +} + +func checkL2CrossDomainMessenger(addr common.Address, client *ethclient.Client) error { + slot, err := client.StorageAt(context.Background(), addr, common.Hash{31: 0xcc}, nil) + if err != nil { + return err + } + if common.BytesToAddress(slot) != defaultCrossDomainMessageSender { + return fmt.Errorf("Expected xDomainMsgSender to be %s, got %s", defaultCrossDomainMessageSender, addr) + } + + contract, err := bindings.NewL2CrossDomainMessenger(addr, client) + if err != nil { + return err + } + + otherMessenger, err := contract.OTHERMESSENGER(&bind.CallOpts{}) + if err != nil { + return err + } + if otherMessenger == (common.Address{}) { + return errors.New("OTHERMESSENGER should not be address(0)") + } + log.Info("L2CrossDomainMessenger", "OTHERMESSENGER", otherMessenger.Hex()) + + messageVersion, err := contract.MESSAGEVERSION(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("L2CrossDomainMessenger", "MESSAGE_VERSION", messageVersion) + minGasCallDataOverhead, err := contract.MINGASCALLDATAOVERHEAD(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("L2CrossDomainMessenger", "MIN_GAS_CALLDATA_OVERHEAD", minGasCallDataOverhead) + + relayConstantOverhead, err := contract.RELAYCONSTANTOVERHEAD(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("L2CrossDomainMessenger", "RELAY_CONSTANT_OVERHEAD", relayConstantOverhead) + + minGasDynamicsOverheadDenominator, err := contract.MINGASDYNAMICOVERHEADDENOMINATOR(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("L2CrossDomainMessenger", "MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR", minGasDynamicsOverheadDenominator) + + minGasDynamicsOverheadNumerator, err := contract.MINGASDYNAMICOVERHEADNUMERATOR(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("L2CrossDomainMessenger", "MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR", minGasDynamicsOverheadNumerator) + + relayCallOverhead, err := contract.RELAYCALLOVERHEAD(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("L2CrossDomainMessenger", "RELAY_CALL_OVERHEAD", relayCallOverhead) + + relayReservedGas, err := contract.RELAYRESERVEDGAS(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("L2CrossDomainMessenger", "RELAY_RESERVED_GAS", relayReservedGas) + + relayGasCheckBuffer, err := contract.RELAYGASCHECKBUFFER(&bind.CallOpts{}) + if err != nil { + return err + } + log.Info("L2CrossDomainMessenger", "RELAY_GAS_CHECK_BUFFER", relayGasCheckBuffer) + + version, err := contract.Version(&bind.CallOpts{}) + if err != nil { + return err + } + + initialized, err := getInitialized("L2CrossDomainMessenger", addr, client) + if err != nil { + return err + } + log.Info("L2CrossDomainMessenger", "_initialized", initialized) + + initializing, err := getInitializing("L2CrossDomainMessenger", addr, client) + if err != nil { + return err + } + log.Info("L2CrossDomainMessenger", "_initializing", initializing) + + log.Info("L2CrossDomainMessenger version", "version", version) + return nil +} + +func getEIP1967AdminAddress(client *ethclient.Client, addr common.Address) (common.Address, error) { + slot, err := client.StorageAt(context.Background(), addr, genesis.AdminSlot, nil) + if err != nil { + return common.Address{}, err + } + admin := common.BytesToAddress(slot) + return admin, nil +} + +func getEIP1967ImplementationAddress(client *ethclient.Client, addr common.Address) (common.Address, error) { + slot, err := client.StorageAt(context.Background(), addr, genesis.ImplementationSlot, nil) + if err != nil { + return common.Address{}, err + } + impl := common.BytesToAddress(slot) + return impl, nil +} + +// getInitialized will get the initialized value in storage of a contract. +// This is an incrementing number that starts at 1 and increments each time that +// the contract is upgraded. +func getInitialized(name string, addr common.Address, client *ethclient.Client) (*big.Int, error) { + value, err := getStorageValue(name, "_initialized", addr, client) + if err != nil { + return nil, err + } + return new(big.Int).SetBytes(value), nil +} + +// getInitializing will get the _initializing value in storage of a contract. +func getInitializing(name string, addr common.Address, client *ethclient.Client) (bool, error) { + value, err := getStorageValue(name, "_initializing", addr, client) + if err != nil { + return false, err + } + if len(value) != 1 { + return false, fmt.Errorf("Unexpected length for _initializing: %d", len(value)) + } + return value[0] == 1, nil +} + +// getStorageValue will get the value of a named storage slot in a contract. It isn't smart about +// automatically converting from a byte slice to a type, it is the caller's responsibility to do that. +func getStorageValue(name, entryName string, addr common.Address, client *ethclient.Client) ([]byte, error) { + layout, err := bindings.GetStorageLayout(name) + if err != nil { + return nil, err + } + entry, err := layout.GetStorageLayoutEntry(entryName) + if err != nil { + return nil, err + } + typ, err := layout.GetStorageLayoutType(entry.Type) + if err != nil { + return nil, err + } + slot := common.BigToHash(big.NewInt(int64(entry.Slot))) + value, err := client.StorageAt(context.Background(), addr, slot, nil) + if err != nil { + return nil, err + } + if entry.Offset+typ.NumberOfBytes > uint(len(value)) { + return nil, fmt.Errorf("value length is too short") + } + // Swap the endianness + slice := common.CopyBytes(value) + for i, j := 0, len(slice)-1; i < j; i, j = i+1, j-1 { + slice[i], slice[j] = slice[j], slice[i] + } + return slice[entry.Offset : entry.Offset+typ.NumberOfBytes], nil +} diff --git a/kroma-chain-ops/crossdomain/encoding.go b/kroma-chain-ops/crossdomain/encoding.go new file mode 100644 index 000000000..6d60a9db0 --- /dev/null +++ b/kroma-chain-ops/crossdomain/encoding.go @@ -0,0 +1,42 @@ +package crossdomain + +import ( + "math/big" + + "github.com/ethereum/go-ethereum/common" + + opxdm "github.com/ethereum-optimism/optimism/op-chain-ops/crossdomain" +) + +// EncodeCrossDomainMessageV0 is the same as V1 in Kroma. +func EncodeCrossDomainMessageV0( + nonce *big.Int, + sender common.Address, + target common.Address, + value *big.Int, + gasLimit *big.Int, + data []byte, +) ([]byte, error) { + return opxdm.EncodeCrossDomainMessageV1(nonce, sender, target, value, gasLimit, data) +} + +func EncodeCrossDomainMessageV1( + nonce *big.Int, + sender common.Address, + target common.Address, + value *big.Int, + gasLimit *big.Int, + data []byte, +) ([]byte, error) { + return opxdm.EncodeCrossDomainMessageV1(nonce, sender, target, value, gasLimit, data) +} + +// DecodeVersionedNonce will decode the version that is encoded in the nonce +func DecodeVersionedNonce(versioned *big.Int) (*big.Int, *big.Int) { + return opxdm.DecodeVersionedNonce(versioned) +} + +// EncodeVersionedNonce will encode the version into the nonce +func EncodeVersionedNonce(nonce, version *big.Int) *big.Int { + return opxdm.EncodeVersionedNonce(nonce, version) +} diff --git a/op-chain-ops/crossdomain/encoding_test.go b/kroma-chain-ops/crossdomain/encoding_test.go similarity index 69% rename from op-chain-ops/crossdomain/encoding_test.go rename to kroma-chain-ops/crossdomain/encoding_test.go index 5d94168e5..395f9929d 100644 --- a/op-chain-ops/crossdomain/encoding_test.go +++ b/kroma-chain-ops/crossdomain/encoding_test.go @@ -4,8 +4,10 @@ import ( "math/big" "testing" - "github.com/ethereum-optimism/optimism/op-chain-ops/crossdomain" "github.com/stretchr/testify/require" + + "github.com/kroma-network/kroma/kroma-chain-ops/crossdomain" + opxdm "github.com/kroma-network/kroma/op-chain-ops/crossdomain" ) func FuzzVersionedNonce(f *testing.F) { @@ -13,11 +15,11 @@ func FuzzVersionedNonce(f *testing.F) { inputNonce := new(big.Int).SetBytes(_nonce) // Clamp nonce to uint240 - if inputNonce.Cmp(crossdomain.NonceMask) > 0 { - inputNonce = new(big.Int).Set(crossdomain.NonceMask) + if inputNonce.Cmp(opxdm.NonceMask) > 0 { + inputNonce = new(big.Int).Set(opxdm.NonceMask) } - // Clamp version to 0 - _version = 0 + // Clamp version to 0 or 1 + _version = _version % 2 inputVersion := new(big.Int).SetUint64(uint64(_version)) encodedNonce := crossdomain.EncodeVersionedNonce(inputNonce, inputVersion) diff --git a/kroma-chain-ops/crossdomain/hashing.go b/kroma-chain-ops/crossdomain/hashing.go new file mode 100644 index 000000000..9ddab27af --- /dev/null +++ b/kroma-chain-ops/crossdomain/hashing.go @@ -0,0 +1,38 @@ +package crossdomain + +import ( + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" +) + +// HashCrossDomainMessageV0 is the same as V1 in Kroma. +func HashCrossDomainMessageV0( + nonce *big.Int, + sender common.Address, + target common.Address, + value *big.Int, + gasLimit *big.Int, + data []byte, +) (common.Hash, error) { + return HashCrossDomainMessageV1(nonce, sender, target, value, gasLimit, data) +} + +// HashCrossDomainMessageV1 computes the first post bedrock cross domain +// messaging hashing scheme. +func HashCrossDomainMessageV1( + nonce *big.Int, + sender common.Address, + target common.Address, + value *big.Int, + gasLimit *big.Int, + data []byte, +) (common.Hash, error) { + encoded, err := EncodeCrossDomainMessageV1(nonce, sender, target, value, gasLimit, data) + if err != nil { + return common.Hash{}, err + } + hash := crypto.Keccak256(encoded) + return common.BytesToHash(hash), nil +} diff --git a/kroma-chain-ops/crossdomain/message.go b/kroma-chain-ops/crossdomain/message.go new file mode 100644 index 000000000..dd76386d7 --- /dev/null +++ b/kroma-chain-ops/crossdomain/message.go @@ -0,0 +1,76 @@ +package crossdomain + +import ( + "fmt" + "math/big" + + "github.com/ethereum/go-ethereum/common" +) + +// CrossDomainMessage represents a cross domain message +// used by the CrossDomainMessenger. The version is encoded +// in the nonce. +type CrossDomainMessage struct { + Nonce *big.Int `json:"nonce"` + Sender common.Address `json:"sender"` + Target common.Address `json:"target"` + Value *big.Int `json:"value"` + GasLimit *big.Int `json:"gasLimit"` + Data []byte `json:"data"` +} + +// NewCrossDomainMessage creates a CrossDomainMessage. +func NewCrossDomainMessage( + nonce *big.Int, + sender, target common.Address, + value, gasLimit *big.Int, + data []byte, +) *CrossDomainMessage { + return &CrossDomainMessage{ + Nonce: nonce, + Sender: sender, + Target: target, + Value: value, + GasLimit: gasLimit, + Data: data, + } +} + +// Version will return the version of the CrossDomainMessage. +// It does this by looking at the first byte of the nonce. +func (c *CrossDomainMessage) Version() uint64 { + _, version := DecodeVersionedNonce(c.Nonce) + return version.Uint64() +} + +// Encode will encode a cross domain message based on the version. +func (c *CrossDomainMessage) Encode() ([]byte, error) { + version := c.Version() + switch version { + case 0: + return EncodeCrossDomainMessageV0(c.Nonce, c.Sender, c.Target, c.Value, c.GasLimit, c.Data) + case 1: + return EncodeCrossDomainMessageV1(c.Nonce, c.Sender, c.Target, c.Value, c.GasLimit, c.Data) + default: + return nil, fmt.Errorf("unknown version %d", version) + } +} + +// Hash will compute the hash of the CrossDomainMessage +func (c *CrossDomainMessage) Hash() (common.Hash, error) { + version := c.Version() + switch version { + case 0: + return HashCrossDomainMessageV0(c.Nonce, c.Sender, c.Target, c.Value, c.GasLimit, c.Data) + case 1: + return HashCrossDomainMessageV1(c.Nonce, c.Sender, c.Target, c.Value, c.GasLimit, c.Data) + default: + return common.Hash{}, fmt.Errorf("unknown version %d", version) + } +} + +// HashV1 forces using the V0 hash even if its a legacy hash. This is used +// for the migration process. +func (c *CrossDomainMessage) HashV1() (common.Hash, error) { + return HashCrossDomainMessageV1(c.Nonce, c.Sender, c.Target, c.Value, c.GasLimit, c.Data) +} diff --git a/kroma-chain-ops/crossdomain/message_test.go b/kroma-chain-ops/crossdomain/message_test.go new file mode 100644 index 000000000..c65e4ff8c --- /dev/null +++ b/kroma-chain-ops/crossdomain/message_test.go @@ -0,0 +1,69 @@ +package crossdomain_test + +import ( + "math/big" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/stretchr/testify/require" + + "github.com/kroma-network/kroma/kroma-chain-ops/crossdomain" +) + +// TestEncode tests the encoding of a CrossDomainMessage. The assertion was +// created using solidity. +func TestEncode(t *testing.T) { + t.Parallel() + + t.Run("V0", func(t *testing.T) { + expectNonce := common.Big1 + expectVersion := common.Big0 + + msg := crossdomain.NewCrossDomainMessage( + crossdomain.EncodeVersionedNonce(expectNonce, expectVersion), + common.Address{19: 0x01}, + common.Address{19: 0x02}, + big.NewInt(100), + big.NewInt(555), + []byte{}, + ) + + require.Equal(t, uint64(0), msg.Version()) + + encoded, err := msg.Encode() + require.Nil(t, err) + + expect := hexutil.MustDecode("0xd764ad0b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000022b00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000") + + require.Equal(t, expect, encoded) + }) +} + +// TestEncode tests the hash of a CrossDomainMessage. The assertion was +// created using solidity. +func TestHash(t *testing.T) { + t.Parallel() + + t.Run("V0", func(t *testing.T) { + expectNonce := common.Big0 + expectVersion := common.Big0 + + msg := crossdomain.NewCrossDomainMessage( + crossdomain.EncodeVersionedNonce(expectNonce, expectVersion), + common.Address{}, + common.Address{19: 0x01}, + big.NewInt(0), + big.NewInt(5), + []byte{}, + ) + + require.Equal(t, expectVersion.Uint64(), msg.Version()) + + hash, err := msg.Hash() + require.Nil(t, err) + + expect := common.HexToHash("0xabe2ab138bea877c082a26a761f9c999ef57748d2d0ab05a24c6e8bdd1c5fb41") + require.Equal(t, expect, hash) + }) +} diff --git a/kroma-chain-ops/crossdomain/withdrawal.go b/kroma-chain-ops/crossdomain/withdrawal.go new file mode 100644 index 000000000..8c1110edb --- /dev/null +++ b/kroma-chain-ops/crossdomain/withdrawal.go @@ -0,0 +1,159 @@ +package crossdomain + +import ( + "errors" + "fmt" + "math/big" + + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/crypto" + + opxdm "github.com/ethereum-optimism/optimism/op-chain-ops/crossdomain" + "github.com/kroma-network/kroma/kroma-bindings/bindings" +) + +var ( + SentMessageEventABI = "SentMessage(address,address,bytes,uint256)" + SentMessageEventABIHash = crypto.Keccak256Hash([]byte(SentMessageEventABI)) + SentMessageExtension1EventABI = "SentMessage(address,uint256)" + SentMessageExtension1EventABIHash = crypto.Keccak256Hash([]byte(SentMessageExtension1EventABI)) + MessagePassedEventABI = "MessagePassed(uint256,address,address,uint256,uint256,bytes,bytes32)" + MessagePassedEventABIHash = crypto.Keccak256Hash([]byte(MessagePassedEventABI)) +) + +var _ opxdm.WithdrawalMessage = (*Withdrawal)(nil) + +// Withdrawal represents a withdrawal transaction on L2 +type Withdrawal struct { + Nonce *big.Int `json:"nonce"` + Sender *common.Address `json:"sender"` + Target *common.Address `json:"target"` + Value *big.Int `json:"value"` + GasLimit *big.Int `json:"gasLimit"` + Data hexutil.Bytes `json:"data"` +} + +// NewWithdrawal will create a Withdrawal +func NewWithdrawal( + nonce *big.Int, + sender, target *common.Address, + value, gasLimit *big.Int, + data []byte, +) *Withdrawal { + return &Withdrawal{ + Nonce: nonce, + Sender: sender, + Target: target, + Value: value, + GasLimit: gasLimit, + Data: hexutil.Bytes(data), + } +} + +// Encode will serialize the Withdrawal so that it is suitable for hashing. +func (w *Withdrawal) Encode() ([]byte, error) { + args := abi.Arguments{ + {Name: "nonce", Type: opxdm.Uint256Type}, + {Name: "sender", Type: opxdm.AddressType}, + {Name: "target", Type: opxdm.AddressType}, + {Name: "value", Type: opxdm.Uint256Type}, + {Name: "gasLimit", Type: opxdm.Uint256Type}, + {Name: "data", Type: opxdm.BytesType}, + } + enc, err := args.Pack(w.Nonce, w.Sender, w.Target, w.Value, w.GasLimit, []byte(w.Data)) + if err != nil { + return nil, fmt.Errorf("cannot encode withdrawal: %w", err) + } + return enc, nil +} + +// Decode will deserialize a Withdrawal +func (w *Withdrawal) Decode(data []byte) error { + args := abi.Arguments{ + {Name: "nonce", Type: opxdm.Uint256Type}, + {Name: "sender", Type: opxdm.AddressType}, + {Name: "target", Type: opxdm.AddressType}, + {Name: "value", Type: opxdm.Uint256Type}, + {Name: "gasLimit", Type: opxdm.Uint256Type}, + {Name: "data", Type: opxdm.BytesType}, + } + decoded, err := args.Unpack(data) + if err != nil { + return err + } + + nonce, ok := decoded[0].(*big.Int) + if !ok { + return errors.New("cannot abi decode nonce") + } + sender, ok := decoded[1].(common.Address) + if !ok { + return errors.New("cannot abi decode sender") + } + target, ok := decoded[2].(common.Address) + if !ok { + return errors.New("cannot abi decode target") + } + value, ok := decoded[3].(*big.Int) + if !ok { + return errors.New("cannot abi decode value") + } + gasLimit, ok := decoded[4].(*big.Int) + if !ok { + return errors.New("cannot abi decode gasLimit") + } + msgData, ok := decoded[5].([]byte) + if !ok { + return errors.New("cannot abi decode data") + } + + w.Nonce = nonce + w.Sender = &sender + w.Target = &target + w.Value = value + w.GasLimit = gasLimit + w.Data = hexutil.Bytes(msgData) + return nil +} + +// Hash will hash the Withdrawal. This is the hash that is computed in +// the L2ToL1MessagePasser. The encoding is the same as the v1 cross domain +// message encoding without the 4byte selector prepended. +func (w *Withdrawal) Hash() (common.Hash, error) { + encoded, err := w.Encode() + if err != nil { + return common.Hash{}, err + } + hash := crypto.Keccak256(encoded) + return common.BytesToHash(hash), nil +} + +// StorageSlot will compute the storage slot that will be set to +// true in the L2ToL1MessagePasser. The withdrawal proof sent to +// L1 will prove that this storage slot is set to "true". +func (w *Withdrawal) StorageSlot() (common.Hash, error) { + hash, err := w.Hash() + if err != nil { + return common.Hash{}, err + } + preimage := make([]byte, 64) + copy(preimage, hash.Bytes()) + + slot := crypto.Keccak256(preimage) + return common.BytesToHash(slot), nil +} + +// WithdrawalTransaction will convert the Withdrawal to a type +// suitable for sending a transaction. +func (w *Withdrawal) WithdrawalTransaction() bindings.TypesWithdrawalTransaction { + return bindings.TypesWithdrawalTransaction{ + Nonce: w.Nonce, + Sender: *w.Sender, + Target: *w.Target, + Value: w.Value, + GasLimit: w.GasLimit, + Data: []byte(w.Data), + } +} diff --git a/kroma-chain-ops/crossdomain/withdrawal_test.go b/kroma-chain-ops/crossdomain/withdrawal_test.go new file mode 100644 index 000000000..e17a7db18 --- /dev/null +++ b/kroma-chain-ops/crossdomain/withdrawal_test.go @@ -0,0 +1,129 @@ +package crossdomain_test + +import ( + "fmt" + "math/big" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/stretchr/testify/require" + + "github.com/ethereum-optimism/optimism/op-chain-ops/crossdomain" +) + +// FuzzEncodeDecodeWithdrawal will fuzz encoding and decoding of a Withdrawal +func FuzzEncodeDecodeWithdrawal(f *testing.F) { + f.Fuzz(func(t *testing.T, _nonce, _sender, _target, _value, _gasLimit, data []byte) { + nonce := new(big.Int).SetBytes(_nonce) + sender := common.BytesToAddress(_sender) + target := common.BytesToAddress(_target) + value := new(big.Int).SetBytes(_value) + gasLimit := new(big.Int).SetBytes(_gasLimit) + + withdrawal := crossdomain.NewWithdrawal( + nonce, + &sender, + &target, + value, + gasLimit, + data, + ) + + encoded, err := withdrawal.Encode() + require.Nil(t, err) + + var w crossdomain.Withdrawal + err = w.Decode(encoded) + require.Nil(t, err) + + require.Equal(t, withdrawal.Nonce.Uint64(), w.Nonce.Uint64()) + require.Equal(t, withdrawal.Sender, w.Sender) + require.Equal(t, withdrawal.Target, w.Target) + require.Equal(t, withdrawal.Value.Uint64(), w.Value.Uint64()) + require.Equal(t, withdrawal.GasLimit.Uint64(), w.GasLimit.Uint64()) + require.Equal(t, withdrawal.Data, w.Data) + }) +} + +// TestWithdrawalHashing will test the correct computation of Withdrawal hashes +// and the storage slot that the withdrawal hash is stored in. Test vectors +// generated with forge +func TestWithdrawalHashing(t *testing.T) { + type expect struct { + Hash common.Hash + Slot common.Hash + } + + cases := []struct { + Withdrawal *crossdomain.Withdrawal + Expect expect + }{ + { + Withdrawal: crossdomain.NewWithdrawal( + big.NewInt(0), + ptr(common.HexToAddress("0xaa179e0640054db6ba4fe9b291dd3b248f4b4960")), + ptr(common.HexToAddress("0x9b2b72e299e04f00fc5b386972d8951bb870d65e")), + big.NewInt(1), + decimalStringToBig("124808255574871339965699013847079823271"), + hexutil.MustDecode("0x2e1d8f26c6611c04d9f8ea352444b9d366f76c19897c851f5ce9a4d650cf2355f92da68491af279f78110a31c6cb26db09b20b3b1307ff99be0bc410d8bf6994b0e87ced86b747773597dfd1da84268508e34a46a087088ed9276738ffe39e7a1264"), + ), + Expect: expect{ + Hash: common.HexToHash("0xbddee6e1e89962069cb559abae8342ea3490f9488509c22c482c4ba73988165c"), + Slot: common.HexToHash("0x26bea3ec4f60cfc1152358454086b7f6a3b669d84a0ec088b2e316ff88c2a892"), + }, + }, + { + Withdrawal: crossdomain.NewWithdrawal( + big.NewInt(0), + ptr(common.HexToAddress("0x00000000000000000000000000000000000011bc")), + ptr(common.HexToAddress("0x00000000000000000000000000000000000033eb")), + big.NewInt(26), + decimalStringToBig("22338"), + hexutil.MustDecode("0x0000000000000000000000000000000000000000000000000000000000000004"), + ), + Expect: expect{ + Hash: common.HexToHash("0x65768976d27ba8a7f91c5b267b97d29830103171863c0ba24f3234ef07d0f8e3"), + Slot: common.HexToHash("0xd73bc49fa8e52d7717fb65cbec7ff0e30bf4e2fbbd38924d1b2efa1f96381517"), + }, + }, + { + Withdrawal: crossdomain.NewWithdrawal( + big.NewInt(0), + ptr(common.HexToAddress("0x4b0ca57cb88a41771d2cc24ac9fd50afeaa3eedd")), + ptr(common.HexToAddress("0x8a5e8410b2c3e1036c49ff8acae1e659e2508200")), + big.NewInt(3), + decimalStringToBig("115792089237316195423570985008687907853269984665640564039457584007913129639935"), + hexutil.MustDecode("0xce6b96a23be7a1ac1de74f3202dfc4cedaef69502204c0d92f7b352a837a"), + ), + Expect: expect{ + Hash: common.HexToHash("0x4ba164b689ac62c27c68f41b5f3c4731eb2c25c2d39e4aadcc413d150764624f"), + Slot: common.HexToHash("0xf055f7cec6a95c9bfc93fc2dc0262d2323a7d4e74af5ee608f0fe2acc83fa1ef"), + }, + }, + } + + for i, test := range cases { + t.Run(fmt.Sprintf("case%d", i), func(t *testing.T) { + hash, err := test.Withdrawal.Hash() + require.Nil(t, err) + require.Equal(t, hash, test.Expect.Hash) + + slot, err := test.Withdrawal.StorageSlot() + require.Nil(t, err) + require.Equal(t, slot, test.Expect.Slot) + }) + } +} + +func decimalStringToBig(n string) *big.Int { + ret, ok := new(big.Int).SetString(n, 10) + if !ok { + panic("") + } + return ret +} + +func ptr(i common.Address) *common.Address { + return &i +} diff --git a/op-chain-ops/genesis/config.go b/kroma-chain-ops/genesis/config.go similarity index 68% rename from op-chain-ops/genesis/config.go rename to kroma-chain-ops/genesis/config.go index e5f39bde1..cd3e854fe 100644 --- a/op-chain-ops/genesis/config.go +++ b/kroma-chain-ops/genesis/config.go @@ -8,20 +8,22 @@ import ( "math/big" "os" "path/filepath" + "reflect" "strings" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" + gstate "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rpc" "github.com/ethereum-optimism/optimism/op-bindings/hardhat" - "github.com/ethereum-optimism/optimism/op-bindings/predeploys" - "github.com/ethereum-optimism/optimism/op-chain-ops/immutables" "github.com/ethereum-optimism/optimism/op-chain-ops/state" "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-service/eth" + "github.com/kroma-network/kroma/kroma-bindings/predeploys" + "github.com/kroma-network/kroma/kroma-chain-ops/immutables" ) var ( @@ -96,40 +98,15 @@ type DeployConfig struct { L2GenesisBlockParentHash common.Hash `json:"l2GenesisBlockParentHash"` L2GenesisBlockBaseFeePerGas *hexutil.Big `json:"l2GenesisBlockBaseFeePerGas"` - ValidatorPoolTrustedValidator common.Address `json:"validatorPoolTrustedValidator"` - ValidatorPoolRequiredBondAmount *hexutil.Big `json:"validatorPoolRequiredBondAmount"` - ValidatorPoolMaxUnbond uint64 `json:"validatorPoolMaxUnbond"` - ValidatorPoolRoundDuration uint64 `json:"validatorPoolRoundDuration"` - - ColosseumCreationPeriodSeconds uint64 `json:"colosseumCreationPeriodSeconds"` - ColosseumBisectionTimeout uint64 `json:"colosseumBisectionTimeout"` - ColosseumProvingTimeout uint64 `json:"colosseumProvingTimeout"` - ColosseumSegmentsLengths string `json:"colosseumSegmentsLengths"` - ColosseumDummyHash common.Hash `json:"colosseumDummyHash"` - ColosseumMaxTxs uint64 `json:"colosseumMaxTxs"` - - // Owner of the SecurityCouncil - SecurityCouncilOwners []common.Address `json:"securityCouncilOwners"` - // The initial value of the voting delay(unit:block) - GovernorVotingDelayBlocks uint64 `json:"governorVotingDelayBlocks"` - // The initial value of the voting period(unit:block) - GovernorVotingPeriodBlocks uint64 `json:"governorVotingPeriodBlocks"` - // The initial value of the proposal threshold(unit:token) - GovernorProposalThreshold uint64 `json:"governorProposalThreshold"` - // The initial value of the votes quorum fraction(unit:percent) - GovernorVotesQuorumFractionPercent uint64 `json:"governorVotesQuorumFractionPercent"` - // The latency value of the proposal executing(unit:second) - TimeLockMinDelaySeconds uint64 `json:"timeLockMinDelaySeconds"` - // The initial value of the L2 voting period(unit:block) - L2GovernorVotingPeriodBlocks uint64 `json:"l2GovernorVotingPeriodBlocks"` - // The latency value of the L2 proposal executing(unit:second) - L2TimeLockMinDelaySeconds uint64 `json:"l2TimeLockMinDelaySeconds"` - - ZKVerifierHashScalar *hexutil.Big `json:"zkVerifierHashScalar"` - ZKVerifierM56Px *hexutil.Big `json:"zkVerifierM56Px"` - ZKVerifierM56Py *hexutil.Big `json:"zkVerifierM56Py"` - - // Owner of the ProxyAdmin predeploy, but in test it means super admin of the system + // L2GenesisRegolithTimeOffset is the number of seconds after genesis block that Regolith hard fork activates. + // Set it to 0 to activate at genesis. Nil to disable regolith. + L2GenesisRegolithTimeOffset *hexutil.Uint64 `json:"l2GenesisRegolithTimeOffset,omitempty"` + // L2GenesisSpanBatchTimeOffset is the number of seconds after genesis block that Span Batch hard fork activates. + // Set it to 0 to activate at genesis. Nil to disable SpanBatch. + L2GenesisSpanBatchTimeOffset *hexutil.Uint64 `json:"l2GenesisSpanBatchTimeOffset,omitempty"` + // L2GenesisBlockExtraData is configurable extradata. Will default to []byte("BEDROCK") if left unspecified. + L2GenesisBlockExtraData []byte `json:"l2GenesisBlockExtraData"` + // ProxyAdminOwner represents the owner of the ProxyAdmin predeploy on L2. ProxyAdminOwner common.Address `json:"proxyAdminOwner"` // L1 recipient of fees accumulated in the ProtocolVault ProtocolVaultRecipient common.Address `json:"protocolVaultRecipient"` @@ -150,14 +127,19 @@ type DeployConfig struct { // KromaPortalProxy represents the address of the KromaPortalProxy on L1 and is used // as part of the derivation pipeline. KromaPortalProxy common.Address `json:"kromaPortalProxy"` - // ValidatorPool proxy address on L1 - ValidatorPoolProxy common.Address `json:"validatorPoolProxy"` // GasPriceOracleOverhead represents the initial value of the gas overhead in the GasPriceOracle predeploy. GasPriceOracleOverhead uint64 `json:"gasPriceOracleOverhead"` // GasPriceOracleScalar represents the initial value of the gas scalar in the GasPriceOracle predeploy. GasPriceOracleScalar uint64 `json:"gasPriceOracleScalar"` - // The initial value of the validator reward scalar - ValidatorRewardScalar uint64 `json:"validatorRewardScalar"` + // EnableGovernance configures whether or not include governance token predeploy. + EnableGovernance bool `json:"enableGovernance"` + // GovernanceTokenSymbol represents the ERC20 symbol of the GovernanceToken. + GovernanceTokenSymbol string `json:"governanceTokenSymbol"` + // GovernanceTokenName represents the ERC20 name of the GovernanceToken + GovernanceTokenName string `json:"governanceTokenName"` + // GovernanceTokenOwner represents the owner of the GovernanceToken. Has the ability + // to mint and burn tokens. + GovernanceTokenOwner common.Address `json:"governanceTokenOwner"` // DeploymentWaitConfirmations is the number of confirmations to wait during // deployment. This is DEPRECATED and should be removed in a future PR. DeploymentWaitConfirmations int `json:"deploymentWaitConfirmations"` @@ -168,6 +150,61 @@ type DeployConfig struct { // FundDevAccounts configures whether or not to fund the dev accounts. Should only be used // during devnet deployments. FundDevAccounts bool `json:"fundDevAccounts"` + + // [Kroma: START] + // ValidatorPool proxy address on L1 + ValidatorPoolProxy common.Address `json:"validatorPoolProxy"` + // The initial value of the validator reward scalar + ValidatorRewardScalar uint64 `json:"validatorRewardScalar"` + + ValidatorPoolTrustedValidator common.Address `json:"validatorPoolTrustedValidator"` + ValidatorPoolRequiredBondAmount *hexutil.Big `json:"validatorPoolRequiredBondAmount"` + ValidatorPoolMaxUnbond uint64 `json:"validatorPoolMaxUnbond"` + ValidatorPoolRoundDuration uint64 `json:"validatorPoolRoundDuration"` + + ColosseumCreationPeriodSeconds uint64 `json:"colosseumCreationPeriodSeconds"` + ColosseumBisectionTimeout uint64 `json:"colosseumBisectionTimeout"` + ColosseumProvingTimeout uint64 `json:"colosseumProvingTimeout"` + ColosseumSegmentsLengths string `json:"colosseumSegmentsLengths"` + ColosseumDummyHash common.Hash `json:"colosseumDummyHash"` + ColosseumMaxTxs uint64 `json:"colosseumMaxTxs"` + + // Owner of the SecurityCouncil + SecurityCouncilOwners []common.Address `json:"securityCouncilOwners"` + // The initial value of the voting delay(unit:block) + GovernorVotingDelayBlocks uint64 `json:"governorVotingDelayBlocks"` + // The initial value of the voting period(unit:block) + GovernorVotingPeriodBlocks uint64 `json:"governorVotingPeriodBlocks"` + // The initial value of the proposal threshold(unit:token) + GovernorProposalThreshold uint64 `json:"governorProposalThreshold"` + // The initial value of the votes quorum fraction(unit:percent) + GovernorVotesQuorumFractionPercent uint64 `json:"governorVotesQuorumFractionPercent"` + // The latency value of the proposal executing(unit:second) + TimeLockMinDelaySeconds uint64 `json:"timeLockMinDelaySeconds"` + // The initial value of the L2 voting period(unit:block) + L2GovernorVotingPeriodBlocks uint64 `json:"l2GovernorVotingPeriodBlocks"` + // The latency value of the L2 proposal executing(unit:second) + L2TimeLockMinDelaySeconds uint64 `json:"l2TimeLockMinDelaySeconds"` + + ZKVerifierHashScalar *hexutil.Big `json:"zkVerifierHashScalar"` + ZKVerifierM56Px *hexutil.Big `json:"zkVerifierM56Px"` + ZKVerifierM56Py *hexutil.Big `json:"zkVerifierM56Py"` + // [Kroma: END] +} + +// Copy will deeply copy the DeployConfig. This does a JSON roundtrip to copy +// which makes it easier to maintain, we do not need efficiency in this case. +func (d *DeployConfig) Copy() *DeployConfig { + raw, err := json.Marshal(d) + if err != nil { + panic(err) + } + + cpy := DeployConfig{} + if err = json.Unmarshal(raw, &cpy); err != nil { + panic(err) + } + return &cpy } // Check will ensure that the config is sane and return an error when it is not @@ -205,24 +242,9 @@ func (d *DeployConfig) Check() error { if d.BatchSenderAddress == (common.Address{}) { return fmt.Errorf("%w: BatchSenderAddress cannot be address(0)", ErrInvalidDeployConfig) } - if d.ValidatorPoolTrustedValidator == (common.Address{}) { - return fmt.Errorf("%w: ValidatorPoolTrustedValidator cannot be address(0)", ErrInvalidDeployConfig) - } - if d.ValidatorPoolRequiredBondAmount == nil { - return fmt.Errorf("%w: ValidatorPoolRequiredBondAmount cannot be nil", ErrInvalidDeployConfig) - } - if d.ValidatorPoolMaxUnbond == 0 { - return fmt.Errorf("%w: ValidatorPoolMaxUnbond cannot be 0", ErrInvalidDeployConfig) - } - if d.ValidatorPoolRoundDuration == 0 { - return fmt.Errorf("%w: ValidatorPoolRoundDuration cannot be 0", ErrInvalidDeployConfig) - } if d.L2OutputOracleSubmissionInterval == 0 { return fmt.Errorf("%w: L2OutputOracleSubmissionInterval cannot be 0", ErrInvalidDeployConfig) } - if d.L2OutputOracleSubmissionInterval*d.L2BlockTime != d.ValidatorPoolRoundDuration*2 { - return fmt.Errorf("%w: double of ValidatorPoolRoundDuration must equal to L2OutputOracleSubmissionInterval", ErrInvalidDeployConfig) - } if d.L2OutputOracleStartingTimestamp == 0 { log.Warn("L2OutputOracleStartingTimestamp is 0") } @@ -241,24 +263,6 @@ func (d *DeployConfig) Check() error { if d.GasPriceOracleScalar == 0 { return fmt.Errorf("%w: GasPriceOracleScalar cannot be 0", ErrInvalidDeployConfig) } - if d.ValidatorRewardScalar == 0 { - log.Warn("ValidatorRewardScalar is 0") - } - if d.L1StandardBridgeProxy == (common.Address{}) { - return fmt.Errorf("%w: L1StandardBridgeProxy cannot be address(0)", ErrInvalidDeployConfig) - } - if d.L1CrossDomainMessengerProxy == (common.Address{}) { - return fmt.Errorf("%w: L1CrossDomainMessengerProxy cannot be address(0)", ErrInvalidDeployConfig) - } - if d.L1ERC721BridgeProxy == (common.Address{}) { - return fmt.Errorf("%w: L1ERC721BridgeProxy cannot be address(0)", ErrInvalidDeployConfig) - } - if d.SystemConfigProxy == (common.Address{}) { - return fmt.Errorf("%w: SystemConfigProxy cannot be address(0)", ErrInvalidDeployConfig) - } - if d.KromaPortalProxy == (common.Address{}) { - return fmt.Errorf("%w: KromaPortalProxy cannot be address(0)", ErrInvalidDeployConfig) - } if d.EIP1559Denominator == 0 { return fmt.Errorf("%w: EIP1559Denominator cannot be 0", ErrInvalidDeployConfig) } @@ -276,6 +280,36 @@ func (d *DeployConfig) Check() error { if d.L2GenesisBlockBaseFeePerGas == nil { return fmt.Errorf("%w: L2 genesis block base fee per gas cannot be nil", ErrInvalidDeployConfig) } + if d.EnableGovernance { + if d.GovernanceTokenName == "" { + return fmt.Errorf("%w: GovernanceToken.name cannot be empty", ErrInvalidDeployConfig) + } + if d.GovernanceTokenSymbol == "" { + return fmt.Errorf("%w: GovernanceToken.symbol cannot be empty", ErrInvalidDeployConfig) + } + if d.GovernanceTokenOwner == (common.Address{}) { + return fmt.Errorf("%w: GovernanceToken owner cannot be address(0)", ErrInvalidDeployConfig) + } + } + // [Kroma: START] + if d.ValidatorRewardScalar == 0 { + log.Warn("ValidatorRewardScalar is 0") + } + if d.ValidatorPoolTrustedValidator == (common.Address{}) { + return fmt.Errorf("%w: ValidatorPoolTrustedValidator cannot be address(0)", ErrInvalidDeployConfig) + } + if d.ValidatorPoolRequiredBondAmount == nil { + return fmt.Errorf("%w: ValidatorPoolRequiredBondAmount cannot be nil", ErrInvalidDeployConfig) + } + if d.ValidatorPoolMaxUnbond == 0 { + return fmt.Errorf("%w: ValidatorPoolMaxUnbond cannot be 0", ErrInvalidDeployConfig) + } + if d.ValidatorPoolRoundDuration == 0 { + return fmt.Errorf("%w: ValidatorPoolRoundDuration cannot be 0", ErrInvalidDeployConfig) + } + if d.L2OutputOracleSubmissionInterval*d.L2BlockTime != d.ValidatorPoolRoundDuration*2 { + return fmt.Errorf("%w: double of ValidatorPoolRoundDuration must equal to L2OutputOracleSubmissionInterval", ErrInvalidDeployConfig) + } if d.ColosseumCreationPeriodSeconds == 0 { return fmt.Errorf("%w: ColosseumCreationPeriodSeconds cannot be 0", ErrInvalidDeployConfig) } @@ -312,24 +346,77 @@ func (d *DeployConfig) Check() error { if d.ZKVerifierM56Py == nil { return fmt.Errorf("%w: ZKVerifierM56Py cannot be nil", ErrInvalidDeployConfig) } + // [Kroma: END] + // L2 block time must always be smaller than L1 block time + if d.L1BlockTime < d.L2BlockTime { + return fmt.Errorf("L2 block time (%d) is larger than L1 block time (%d)", d.L2BlockTime, d.L1BlockTime) + } return nil } +// CheckAddresses will return an error if the addresses are not set. +// These values are required to create the L2 genesis state and are present in the deploy config +// even though the deploy config is required to deploy the contracts on L1. This creates a +// circular dependency that should be resolved in the future. +func (d *DeployConfig) CheckAddresses() error { + if d.L1StandardBridgeProxy == (common.Address{}) { + return fmt.Errorf("%w: L1StandardBridgeProxy cannot be address(0)", ErrInvalidDeployConfig) + } + if d.L1CrossDomainMessengerProxy == (common.Address{}) { + return fmt.Errorf("%w: L1CrossDomainMessengerProxy cannot be address(0)", ErrInvalidDeployConfig) + } + if d.L1ERC721BridgeProxy == (common.Address{}) { + return fmt.Errorf("%w: L1ERC721BridgeProxy cannot be address(0)", ErrInvalidDeployConfig) + } + if d.SystemConfigProxy == (common.Address{}) { + return fmt.Errorf("%w: SystemConfigProxy cannot be address(0)", ErrInvalidDeployConfig) + } + if d.KromaPortalProxy == (common.Address{}) { + return fmt.Errorf("%w: KromaPortalProxy cannot be address(0)", ErrInvalidDeployConfig) + } + return nil +} + +// SetDeployments will merge a Deployments into a DeployConfig. +func (d *DeployConfig) SetDeployments(deployments *L1Deployments) { + d.L1StandardBridgeProxy = deployments.L1StandardBridgeProxy + d.L1CrossDomainMessengerProxy = deployments.L1CrossDomainMessengerProxy + d.L1ERC721BridgeProxy = deployments.L1ERC721BridgeProxy + d.SystemConfigProxy = deployments.SystemConfigProxy + d.KromaPortalProxy = deployments.KromaPortalProxy + + // [Kroma: START] + d.ValidatorPoolProxy = deployments.ValidatorPoolProxy + // [Kroma: END] +} + // GetDeployedAddresses will get the deployed addresses of deployed L1 contracts -// required for the L2 genesis creation. +// required for the L2 genesis creation. Legacy systems use the `Proxy__` prefix +// while modern systems use the `Proxy` suffix. First check for the legacy +// deployments so that this works with upgrading a system. func (d *DeployConfig) GetDeployedAddresses(hh *hardhat.Hardhat) error { + var err error + if d.L1StandardBridgeProxy == (common.Address{}) { - l1StandardBridgeProxyDeployment, err := hh.GetDeployment("L1StandardBridgeProxy") - if err != nil { - return err + var l1StandardBridgeProxyDeployment *hardhat.Deployment + l1StandardBridgeProxyDeployment, err = hh.GetDeployment("Proxy__OVM_L1StandardBridge") + if errors.Is(err, hardhat.ErrCannotFindDeployment) { + l1StandardBridgeProxyDeployment, err = hh.GetDeployment("L1StandardBridgeProxy") + if err != nil { + return err + } } d.L1StandardBridgeProxy = l1StandardBridgeProxyDeployment.Address } if d.L1CrossDomainMessengerProxy == (common.Address{}) { - l1CrossDomainMessengerProxyDeployment, err := hh.GetDeployment("L1CrossDomainMessengerProxy") - if err != nil { - return err + var l1CrossDomainMessengerProxyDeployment *hardhat.Deployment + l1CrossDomainMessengerProxyDeployment, err = hh.GetDeployment("Proxy__OVM_L1CrossDomainMessenger") + if errors.Is(err, hardhat.ErrCannotFindDeployment) { + l1CrossDomainMessengerProxyDeployment, err = hh.GetDeployment("L1CrossDomainMessengerProxy") + if err != nil { + return err + } } d.L1CrossDomainMessengerProxy = l1CrossDomainMessengerProxyDeployment.Address } @@ -370,15 +457,26 @@ func (d *DeployConfig) GetDeployedAddresses(hh *hardhat.Hardhat) error { return nil } -// InitDeveloperDeployedAddresses will set the dev addresses on the DeployConfig -func (d *DeployConfig) InitDeveloperDeployedAddresses() error { - d.L1StandardBridgeProxy = predeploys.DevL1StandardBridgeAddr - d.L1CrossDomainMessengerProxy = predeploys.DevL1CrossDomainMessengerAddr - d.L1ERC721BridgeProxy = predeploys.DevL1ERC721BridgeAddr - d.KromaPortalProxy = predeploys.DevKromaPortalAddr - d.SystemConfigProxy = predeploys.DevSystemConfigAddr - d.ValidatorPoolProxy = predeploys.DevValidatorPoolAddr - return nil +func (d *DeployConfig) RegolithTime(genesisTime uint64) *uint64 { + if d.L2GenesisRegolithTimeOffset == nil { + return nil + } + v := uint64(0) + if offset := *d.L2GenesisRegolithTimeOffset; offset > 0 { + v = genesisTime + uint64(offset) + } + return &v +} + +func (d *DeployConfig) SpanBatchTime(genesisTime uint64) *uint64 { + if d.L2GenesisSpanBatchTimeOffset == nil { + return nil + } + v := uint64(0) + if offset := *d.L2GenesisSpanBatchTimeOffset; offset > 0 { + v = genesisTime + uint64(offset) + } + return &v } // RollupConfig converts a DeployConfig to a rollup.Config @@ -418,6 +516,8 @@ func (d *DeployConfig) RollupConfig(l1StartBlock *types.Block, l2GenesisBlockHas BatchInboxAddress: d.BatchInboxAddress, DepositContractAddress: d.KromaPortalProxy, L1SystemConfigAddress: d.SystemConfigProxy, + RegolithTime: d.RegolithTime(l1StartBlock.Time()), + SpanBatchTime: d.SpanBatchTime(l1StartBlock.Time()), }, nil } @@ -447,6 +547,142 @@ func NewDeployConfigWithNetwork(network, path string) (*DeployConfig, error) { return NewDeployConfig(deployConfig) } +// L1Deployments represents a set of L1 contracts that are deployed. +type L1Deployments struct { + // [Kroma: START] + // AddressManager common.Address `json:"AddressManager"` + // BlockOracle common.Address `json:"BlockOracle"` + // DisputeGameFactory common.Address `json:"DisputeGameFactory"` + // DisputeGameFactoryProxy common.Address `json:"DisputeGameFactoryProxy"` + // [Kroma: END] + L1CrossDomainMessenger common.Address `json:"L1CrossDomainMessenger"` + L1CrossDomainMessengerProxy common.Address `json:"L1CrossDomainMessengerProxy"` + L1ERC721Bridge common.Address `json:"L1ERC721Bridge"` + L1ERC721BridgeProxy common.Address `json:"L1ERC721BridgeProxy"` + L1StandardBridge common.Address `json:"L1StandardBridge"` + L1StandardBridgeProxy common.Address `json:"L1StandardBridgeProxy"` + L2OutputOracle common.Address `json:"L2OutputOracle"` + L2OutputOracleProxy common.Address `json:"L2OutputOracleProxy"` + KromaMintableERC20Factory common.Address `json:"KromaMintableERC20Factory"` + KromaMintableERC20FactoryProxy common.Address `json:"KromaMintableERC20FactoryProxy"` + KromaPortal common.Address `json:"KromaPortal"` + KromaPortalProxy common.Address `json:"KromaPortalProxy"` + ProxyAdmin common.Address `json:"ProxyAdmin"` + SystemConfig common.Address `json:"SystemConfig"` + SystemConfigProxy common.Address `json:"SystemConfigProxy"` + // [Kroma: START] + // ProtocolVersions common.Address `json:"ProtocolVersions"` + // ProtocolVersionsProxy common.Address `json:"ProtocolVersionsProxy"` + // [Kroma: END] + + // [Kroma: START] + Colosseum common.Address `json:"Colosseum"` + ColosseumProxy common.Address `json:"ColosseumProxy"` + Poseidon2 common.Address `json:"Poseidon2"` + SecurityCouncil common.Address `json:"SecurityCouncil"` + SecurityCouncilProxy common.Address `json:"SecurityCouncilProxy"` + SecurityCouncilToken common.Address `json:"SecurityCouncilToken"` + SecurityCouncilTokenProxy common.Address `json:"SecurityCouncilTokenProxy"` + TimeLock common.Address `json:"TimeLock"` + TimeLockProxy common.Address `json:"TimeLockProxy"` + UpgradeGovernor common.Address `json:"UpgradeGovernor"` + UpgradeGovernorProxy common.Address `json:"UpgradeGovernorProxy"` + ValidatorPool common.Address `json:"ValidatorPool"` + ValidatorPoolProxy common.Address `json:"ValidatorPoolProxy"` + ZKMerkleTrie common.Address `json:"ZKMerkleTrie"` + ZKVerifier common.Address `json:"ZKVerifier"` + ZKVerifierProxy common.Address `json:"ZKVerifierProxy"` + // [Kroma: END] +} + +// GetName will return the name of the contract given an address. +func (d *L1Deployments) GetName(addr common.Address) string { + val := reflect.ValueOf(d) + if val.Kind() == reflect.Ptr { + val = val.Elem() + } + for i := 0; i < val.NumField(); i++ { + if addr == val.Field(i).Interface().(common.Address) { + return val.Type().Field(i).Name + } + } + return "" +} + +// Check will ensure that the L1Deployments are sane +func (d *L1Deployments) Check() error { + val := reflect.ValueOf(d) + if val.Kind() == reflect.Ptr { + val = val.Elem() + } + for i := 0; i < val.NumField(); i++ { + name := val.Type().Field(i).Name + // Skip the non production ready contracts + if name == "DisputeGameFactory" || name == "DisputeGameFactoryProxy" || name == "BlockOracle" { + continue + } + if val.Field(i).Interface().(common.Address) == (common.Address{}) { + return fmt.Errorf("%s is not set", name) + } + } + return nil +} + +// ForEach will iterate over each contract in the L1Deployments +func (d *L1Deployments) ForEach(cb func(name string, addr common.Address)) { + val := reflect.ValueOf(d) + if val.Kind() == reflect.Ptr { + val = val.Elem() + } + for i := 0; i < val.NumField(); i++ { + name := val.Type().Field(i).Name + cb(name, val.Field(i).Interface().(common.Address)) + } +} + +// Copy will copy the L1Deployments struct +func (d *L1Deployments) Copy() *L1Deployments { + cpy := L1Deployments{} + data, err := json.Marshal(d) + if err != nil { + panic(err) + } + if err := json.Unmarshal(data, &cpy); err != nil { + panic(err) + } + return &cpy +} + +// NewL1Deployments will create a new L1Deployments from a JSON file on disk +// at the given path. +func NewL1Deployments(path string) (*L1Deployments, error) { + file, err := os.ReadFile(path) + if err != nil { + return nil, fmt.Errorf("L1 deployments at %s not found: %w", path, err) + } + + var deployments L1Deployments + if err := json.Unmarshal(file, &deployments); err != nil { + return nil, fmt.Errorf("cannot unmarshal L1 deployements: %w", err) + } + + return &deployments, nil +} + +// NewStateDump will read a Dump JSON file from disk +func NewStateDump(path string) (*gstate.Dump, error) { + file, err := os.ReadFile(path) + if err != nil { + return nil, fmt.Errorf("dump at %s not found: %w", path, err) + } + + var dump gstate.Dump + if err := json.Unmarshal(file, &dump); err != nil { + return nil, fmt.Errorf("cannot unmarshal dump: %w", err) + } + return &dump, nil +} + // NewL2ImmutableConfig will create an ImmutableConfig given an instance of a // DeployConfig and a block. func NewL2ImmutableConfig(config *DeployConfig, block *types.Block) (immutables.ImmutableConfig, error) { @@ -534,6 +770,13 @@ func NewL2StorageConfig(config *DeployConfig, block *types.Block) (state.Storage "symbol": "WETH", "decimals": 18, } + if config.EnableGovernance { + storage["GovernanceToken"] = state.StorageValues{ + "_name": config.GovernanceTokenName, + "_symbol": config.GovernanceTokenSymbol, + "_owner": config.GovernanceTokenOwner, + } + } storage["ProxyAdmin"] = state.StorageValues{ "_owner": config.ProxyAdminOwner, } @@ -565,3 +808,18 @@ func (m *MarshalableRPCBlockNumberOrHash) UnmarshalJSON(b []byte) error { *m = asMarshalable return nil } + +// Number wraps the rpc.BlockNumberOrHash Number method. +func (m *MarshalableRPCBlockNumberOrHash) Number() (rpc.BlockNumber, bool) { + return (*rpc.BlockNumberOrHash)(m).Number() +} + +// Hash wraps the rpc.BlockNumberOrHash Hash method. +func (m *MarshalableRPCBlockNumberOrHash) Hash() (common.Hash, bool) { + return (*rpc.BlockNumberOrHash)(m).Hash() +} + +// String wraps the rpc.BlockNumberOrHash String method. +func (m *MarshalableRPCBlockNumberOrHash) String() string { + return (*rpc.BlockNumberOrHash)(m).String() +} diff --git a/kroma-chain-ops/genesis/config_test.go b/kroma-chain-ops/genesis/config_test.go new file mode 100644 index 000000000..ddfd2511c --- /dev/null +++ b/kroma-chain-ops/genesis/config_test.go @@ -0,0 +1,114 @@ +package genesis + +import ( + "bytes" + "encoding/json" + "fmt" + "os" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/rpc" + "github.com/stretchr/testify/require" +) + +func TestConfigDataMarshalUnmarshal(t *testing.T) { + b, err := os.ReadFile("testdata/test-deploy-config-full.json") + require.NoError(t, err) + + dec := json.NewDecoder(bytes.NewReader(b)) + decoded := new(DeployConfig) + require.NoError(t, dec.Decode(decoded)) + require.EqualValues(t, "non-default value", string(decoded.L2GenesisBlockExtraData)) + + encoded, err := json.MarshalIndent(decoded, "", " ") + require.NoError(t, err) + require.JSONEq(t, string(b), string(encoded)) +} + +func TestUnmarshalL1StartingBlockTag(t *testing.T) { + decoded := new(DeployConfig) + require.NoError(t, json.Unmarshal([]byte(`{"l1StartingBlockTag": "earliest"}`), decoded)) + require.EqualValues(t, rpc.EarliestBlockNumber, *decoded.L1StartingBlockTag.BlockNumber) + h := "0x86c7263d87140ca7cd9bf1bc9e95a435a7a0efc0ae2afaf64920c5b59a6393d4" + require.NoError(t, json.Unmarshal([]byte(fmt.Sprintf(`{"l1StartingBlockTag": "%s"}`, h)), decoded)) + require.EqualValues(t, common.HexToHash(h), *decoded.L1StartingBlockTag.BlockHash) +} + +func TestRegolithTimeZero(t *testing.T) { + regolithOffset := hexutil.Uint64(0) + config := &DeployConfig{L2GenesisRegolithTimeOffset: ®olithOffset} + require.Equal(t, uint64(0), *config.RegolithTime(1234)) +} + +func TestRegolithTimeAsOffset(t *testing.T) { + regolithOffset := hexutil.Uint64(1500) + config := &DeployConfig{L2GenesisRegolithTimeOffset: ®olithOffset} + require.Equal(t, uint64(1500+5000), *config.RegolithTime(5000)) +} + +// TestCopy will copy a DeployConfig and ensure that the copy is equal to the original. +func TestCopy(t *testing.T) { + b, err := os.ReadFile("testdata/test-deploy-config-full.json") + require.NoError(t, err) + + decoded := new(DeployConfig) + require.NoError(t, json.NewDecoder(bytes.NewReader(b)).Decode(decoded)) + + cpy := decoded.Copy() + require.EqualValues(t, decoded, cpy) + + offset := hexutil.Uint64(100) + cpy.L2GenesisRegolithTimeOffset = &offset + require.NotEqual(t, decoded, cpy) +} + +// TestL1Deployments ensures that NewL1Deployments can read a JSON file +// from disk and deserialize all of the key/value pairs correctly. +func TestL1Deployments(t *testing.T) { + deployments, err := NewL1Deployments("testdata/l1-deployments.json") + require.NoError(t, err) + + // [Kroma: START] + // require.NotEqual(t, deployments.AddressManager, common.Address{}) + // require.NotEqual(t, deployments.DisputeGameFactory, common.Address{}) + // require.NotEqual(t, deployments.DisputeGameFactoryProxy, common.Address{}) + require.NotEqual(t, deployments.L1CrossDomainMessenger, common.Address{}) + require.NotEqual(t, deployments.L1CrossDomainMessengerProxy, common.Address{}) + require.NotEqual(t, deployments.L1ERC721Bridge, common.Address{}) + require.NotEqual(t, deployments.L1ERC721BridgeProxy, common.Address{}) + require.NotEqual(t, deployments.L1StandardBridge, common.Address{}) + require.NotEqual(t, deployments.L1StandardBridgeProxy, common.Address{}) + require.NotEqual(t, deployments.L2OutputOracle, common.Address{}) + require.NotEqual(t, deployments.L2OutputOracleProxy, common.Address{}) + // require.NotEqual(t, deployments.OptimismMintableERC20Factory, common.Address{}) + // require.NotEqual(t, deployments.OptimismMintableERC20FactoryProxy, common.Address{}) + // require.NotEqual(t, deployments.OptimismPortal, common.Address{}) + // require.NotEqual(t, deployments.OptimismPortalProxy, common.Address{}) + require.NotEqual(t, deployments.ProxyAdmin, common.Address{}) + require.NotEqual(t, deployments.SystemConfig, common.Address{}) + require.NotEqual(t, deployments.SystemConfigProxy, common.Address{}) + // require.NotEqual(t, deployments.ProtocolVersions, common.Address{}) + // require.NotEqual(t, deployments.ProtocolVersionsProxy, common.Address{}) + require.NotEqual(t, deployments.Colosseum, common.Address{}) + require.NotEqual(t, deployments.ColosseumProxy, common.Address{}) + require.NotEqual(t, deployments.Poseidon2, common.Address{}) + require.NotEqual(t, deployments.SecurityCouncil, common.Address{}) + require.NotEqual(t, deployments.SecurityCouncilProxy, common.Address{}) + require.NotEqual(t, deployments.TimeLock, common.Address{}) + require.NotEqual(t, deployments.TimeLockProxy, common.Address{}) + require.NotEqual(t, deployments.UpgradeGovernor, common.Address{}) + require.NotEqual(t, deployments.UpgradeGovernorProxy, common.Address{}) + require.NotEqual(t, deployments.ValidatorPool, common.Address{}) + require.NotEqual(t, deployments.ValidatorPoolProxy, common.Address{}) + require.NotEqual(t, deployments.ZKMerkleTrie, common.Address{}) + require.NotEqual(t, deployments.ZKVerifier, common.Address{}) + require.NotEqual(t, deployments.ZKVerifierProxy, common.Address{}) + // [Kroma: END] + + // require.Equal(t, "AddressManager", deployments.GetName(deployments.AddressManager)) + require.Equal(t, "KromaPortalProxy", deployments.GetName(deployments.KromaPortalProxy)) + // One that doesn't exist returns empty string + require.Equal(t, "", deployments.GetName(common.Address{19: 0xff})) +} diff --git a/op-chain-ops/genesis/genesis.go b/kroma-chain-ops/genesis/genesis.go similarity index 87% rename from op-chain-ops/genesis/genesis.go rename to kroma-chain-ops/genesis/genesis.go index c49bfaee1..ee5069cd3 100644 --- a/op-chain-ops/genesis/genesis.go +++ b/kroma-chain-ops/genesis/genesis.go @@ -2,6 +2,7 @@ package genesis import ( "errors" + "fmt" "math/big" "time" @@ -17,7 +18,7 @@ import ( const DefaultGasLimit = 30_000_000 // NewL2Genesis will create a new L2 genesis -func NewL2Genesis(config *DeployConfig, block *types.Block, zktrie bool) (*core.Genesis, error) { +func NewL2Genesis(config *DeployConfig, block *types.Block) (*core.Genesis, error) { if config.L2ChainID == 0 { return nil, errors.New("must define L2 ChainID") } @@ -51,11 +52,13 @@ func NewL2Genesis(config *DeployConfig, block *types.Block, zktrie bool) (*core. MergeNetsplitBlock: big.NewInt(0), TerminalTotalDifficulty: big.NewInt(0), TerminalTotalDifficultyPassed: true, + // BedrockBlock: new(big.Int).SetUint64(uint64(config.L2GenesisBlockNumber)), + // RegolithTime: config.RegolithTime(block.Time()), Kroma: ¶ms.KromaConfig{ EIP1559Denominator: eip1559Denom, EIP1559Elasticity: eip1559Elasticity, }, - Zktrie: zktrie, + Zktrie: true, } gasLimit := config.L2GenesisBlockGasLimit @@ -71,11 +74,21 @@ func NewL2Genesis(config *DeployConfig, block *types.Block, zktrie bool) (*core. difficulty = newHexBig(0) } + extraData := config.L2GenesisBlockExtraData + if extraData == nil { + // L2GenesisBlockExtraData is optional, so use a default value when nil + extraData = []byte{} + } + // Ensure that the extradata is valid + if size := len(extraData); size > 32 { + return nil, fmt.Errorf("transition block extradata too long: %d", size) + } + return &core.Genesis{ Config: &kromaChainConfig, Nonce: uint64(config.L2GenesisBlockNonce), Timestamp: block.Time(), - ExtraData: []byte{}, + ExtraData: extraData, GasLimit: uint64(gasLimit), Difficulty: difficulty.ToInt(), Mixhash: config.L2GenesisBlockMixHash, @@ -126,6 +139,7 @@ func NewL1Genesis(config *DeployConfig) (*core.Genesis, error) { chainConfig.MergeNetsplitBlock = big.NewInt(0) chainConfig.TerminalTotalDifficulty = big.NewInt(0) chainConfig.TerminalTotalDifficultyPassed = true + chainConfig.ShanghaiTime = u64ptr(0) } gasLimit := config.L1GenesisBlockGasLimit @@ -161,3 +175,7 @@ func NewL1Genesis(config *DeployConfig) (*core.Genesis, error) { Alloc: map[common.Address]core.GenesisAccount{}, }, nil } + +func u64ptr(n uint64) *uint64 { + return &n +} diff --git a/op-chain-ops/genesis/helpers.go b/kroma-chain-ops/genesis/helpers.go similarity index 93% rename from op-chain-ops/genesis/helpers.go rename to kroma-chain-ops/genesis/helpers.go index 457db5d66..805e87a69 100644 --- a/op-chain-ops/genesis/helpers.go +++ b/kroma-chain-ops/genesis/helpers.go @@ -19,12 +19,8 @@ var ( codeNamespace = common.HexToAddress("0xc0D3C0d3C0d3C0D3c0d3C0d3c0D3C0d3c0d30000") // l2PredeployNamespace represents the namespace of L2 predeploys l2PredeployNamespace = common.HexToAddress("0x4200000000000000000000000000000000000000") - // l1PredeployNamespace represents the namespace of L1 predeploys - l1PredeployNamespace = common.HexToAddress("0x6900000000000000000000000000000000000000") - // BigL2PredeployNamespace represents the predeploy namespace as a big.Int + // bigL2PredeployNamespace represents the predeploy namespace as a big.Int BigL2PredeployNamespace = new(big.Int).SetBytes(l2PredeployNamespace.Bytes()) - // bigL1PredeployNamespace represents the predeploy namespace as a big.Int - bigL1PredeployNamespace = new(big.Int).SetBytes(l1PredeployNamespace.Bytes()) // bigCodeNamespace represents the predeploy namespace as a big.Int bigCodeNameSpace = new(big.Int).SetBytes(codeNamespace.Bytes()) // implementationSlot represents the EIP 1967 implementation storage slot diff --git a/kroma-chain-ops/genesis/layer_one.go b/kroma-chain-ops/genesis/layer_one.go new file mode 100644 index 000000000..fadc4fcef --- /dev/null +++ b/kroma-chain-ops/genesis/layer_one.go @@ -0,0 +1,145 @@ +package genesis + +import ( + "errors" + "fmt" + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" + gstate "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" + + "github.com/ethereum-optimism/optimism/op-chain-ops/state" + "github.com/kroma-network/kroma/kroma-bindings/bindings" +) + +var ( + // uint128Max is type(uint128).max and is set in the init function. + uint128Max = new(big.Int) + // The default values for the ResourceConfig, used as part of + // an EIP-1559 curve for deposit gas. + DefaultResourceConfig = bindings.ResourceMeteringResourceConfig{ + MaxResourceLimit: 20_000_000, + ElasticityMultiplier: 10, + BaseFeeMaxChangeDenominator: 8, + MinimumBaseFee: params.GWei, + SystemTxMaxGas: 1_000_000, + } +) + +func init() { + var ok bool + uint128Max, ok = new(big.Int).SetString("ffffffffffffffffffffffffffffffff", 16) + if !ok { + panic("bad uint128Max") + } + // Set the maximum base fee on the default config. + DefaultResourceConfig.MaximumBaseFee = uint128Max +} + +// BuildL1DeveloperGenesis will create a L1 genesis block after creating +// all of the state required for an Optimism network to function. +// It is expected that the dump contains all of the required state to bootstrap +// the L1 chain. +func BuildL1DeveloperGenesis(config *DeployConfig, dump *gstate.Dump, l1Deployments *L1Deployments, postProcess bool) (*core.Genesis, error) { + log.Info("Building developer L1 genesis block") + genesis, err := NewL1Genesis(config) + if err != nil { + return nil, fmt.Errorf("cannot create L1 developer genesis: %w", err) + } + + memDB := state.NewMemoryStateDB(genesis) + FundDevAccounts(memDB) + SetPrecompileBalances(memDB) + + if dump != nil { + for address, account := range dump.Accounts { + name := "" + if l1Deployments != nil { + if n := l1Deployments.GetName(address); n != "" { + name = n + } + } + log.Info("Setting account", "name", name, "address", address.Hex()) + memDB.CreateAccount(address) + memDB.SetNonce(address, account.Nonce) + + balance, ok := new(big.Int).SetString(account.Balance, 10) + if !ok { + return nil, fmt.Errorf("failed to parse balance for %s", address) + } + memDB.AddBalance(address, balance) + memDB.SetCode(address, account.Code) + for key, value := range account.Storage { + log.Info("Setting storage", "name", name, "key", key.Hex(), "value", value) + memDB.SetState(address, key, common.HexToHash(value)) + } + } + + // This should only be used if we are expecting Optimism specific state to be set + if postProcess { + if err := PostProcessL1DeveloperGenesis(memDB, l1Deployments); err != nil { + return nil, fmt.Errorf("failed to post process L1 developer genesis: %w", err) + } + } + } + + return memDB.Genesis(), nil +} + +// PostProcessL1DeveloperGenesis will apply post processing to the L1 genesis +// state. This is required to handle edge cases in the genesis generation. +// `block.number` is used during deployment and without specifically setting +// the value to 0, it will cause underflow reverts for deposits in testing. +func PostProcessL1DeveloperGenesis(stateDB *state.MemoryStateDB, deployments *L1Deployments) error { + log.Info("Post processing state") + + if stateDB == nil { + return errors.New("cannot post process nil stateDB") + } + if deployments == nil { + return errors.New("cannot post process dump with nil deployments") + } + + if !stateDB.Exist(deployments.KromaPortalProxy) { + return fmt.Errorf("portal proxy doesn't exist at %s", deployments.KromaPortalProxy) + } + + layout, err := bindings.GetStorageLayout("KromaPortal") + if err != nil { + return errors.New("failed to get storage layout for KromaPortal") + } + + entry, err := layout.GetStorageLayoutEntry("params") + if err != nil { + return errors.New("failed to get storage layout entry for KromaPortal.params") + } + slot := common.BigToHash(big.NewInt(int64(entry.Slot))) + + stateDB.SetState(deployments.KromaPortalProxy, slot, common.Hash{}) + log.Info("Post process update", "address", deployments.KromaPortalProxy, "slot", slot.Hex(), "value", common.Hash{}.Hex()) + + // [Kroma: START] Transfer ownership of SystemConfig to ProxyAdminOwner for test + if !stateDB.Exist(deployments.SystemConfigProxy) { + return fmt.Errorf("sysCfg proxy doesn't exist at %s", deployments.SystemConfigProxy) + } + + layout, err = bindings.GetStorageLayout("SystemConfig") + if err != nil { + return errors.New("failed to get storage layout for SystemConfig") + } + + entry, err = layout.GetStorageLayoutEntry("_owner") + if err != nil { + return errors.New("failed to get storage layout entry for SystemConfig._owner") + } + slot = common.BigToHash(big.NewInt(int64(entry.Slot))) + val := stateDB.GetState(deployments.ProxyAdmin, common.BigToHash(common.Big0)) + + stateDB.SetState(deployments.SystemConfigProxy, slot, val) + log.Info("Post process update", "address", deployments.SystemConfigProxy, "slot", slot.Hex(), "value", val.Hex()) + // [Kroma: END] + return nil +} diff --git a/op-chain-ops/genesis/layer_one_test.go b/kroma-chain-ops/genesis/layer_one_test.go similarity index 69% rename from op-chain-ops/genesis/layer_one_test.go rename to kroma-chain-ops/genesis/layer_one_test.go index 054b63fcd..273f4dbc5 100644 --- a/op-chain-ops/genesis/layer_one_test.go +++ b/kroma-chain-ops/genesis/layer_one_test.go @@ -12,15 +12,20 @@ import ( "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/params" "github.com/stretchr/testify/require" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" - "github.com/ethereum-optimism/optimism/op-bindings/predeploys" "github.com/ethereum-optimism/optimism/op-chain-ops/deployer" + "github.com/kroma-network/kroma/kroma-bindings/bindings" + "github.com/kroma-network/kroma/kroma-bindings/predeploys" ) +// TestBuildL1DeveloperGenesis tests that the L1 genesis block can be built +// given a deploy config and an l1-allocs.json and a deploy.json that +// are generated from a deploy config. If new contracts are added, these +// mocks will need to be regenerated. func TestBuildL1DeveloperGenesis(t *testing.T) { b, err := os.ReadFile("testdata/test-deploy-config-full.json") require.NoError(t, err) @@ -29,7 +34,15 @@ func TestBuildL1DeveloperGenesis(t *testing.T) { require.NoError(t, dec.Decode(config)) config.L1GenesisBlockTimestamp = hexutil.Uint64(time.Now().Unix() - 100) - genesis, err := BuildL1DeveloperGenesis(config) + c, err := os.ReadFile("testdata/allocs-l1.json") + require.NoError(t, err) + dump := new(state.Dump) + require.NoError(t, json.NewDecoder(bytes.NewReader(c)).Decode(dump)) + + deployments, err := NewL1Deployments("testdata/deploy.json") + require.NoError(t, err) + + genesis, err := BuildL1DeveloperGenesis(config, dump, nil, false) require.NoError(t, err) sim := backends.NewSimulatedBackend( @@ -38,18 +51,18 @@ func TestBuildL1DeveloperGenesis(t *testing.T) { ) callOpts := &bind.CallOpts{} - oracle, err := bindings.NewL2OutputOracle(predeploys.DevL2OutputOracleAddr, sim) + oracle, err := bindings.NewL2OutputOracle(deployments.L2OutputOracleProxy, sim) require.NoError(t, err) - portal, err := bindings.NewKromaPortal(predeploys.DevKromaPortalAddr, sim) + portal, err := bindings.NewKromaPortal(deployments.KromaPortalProxy, sim) require.NoError(t, err) valPoolAddr, err := oracle.VALIDATORPOOL(callOpts) require.NoError(t, err) - require.Equal(t, predeploys.DevValidatorPoolAddr, valPoolAddr) + require.Equal(t, deployments.ValidatorPoolProxy, valPoolAddr) colosseumAddr, err := oracle.COLOSSEUM(callOpts) require.NoError(t, err) - require.Equal(t, predeploys.DevColosseumAddr, colosseumAddr) + require.Equal(t, deployments.ColosseumProxy, colosseumAddr) // Same set of tests as exist in the deployment scripts interval, err := oracle.SUBMISSIONINTERVAL(callOpts) @@ -66,49 +79,37 @@ func TestBuildL1DeveloperGenesis(t *testing.T) { oracleAddr, err := portal.L2ORACLE(callOpts) require.NoError(t, err) - require.EqualValues(t, predeploys.DevL2OutputOracleAddr, oracleAddr) + require.EqualValues(t, deployments.L2OutputOracleProxy, oracleAddr) - msgr, err := bindings.NewL1CrossDomainMessenger(predeploys.DevL1CrossDomainMessengerAddr, sim) + msgr, err := bindings.NewL1CrossDomainMessenger(deployments.L1CrossDomainMessengerProxy, sim) require.NoError(t, err) portalAddr, err := msgr.PORTAL(callOpts) require.NoError(t, err) - require.Equal(t, predeploys.DevKromaPortalAddr, portalAddr) + require.Equal(t, deployments.KromaPortalProxy, portalAddr) - bridge, err := bindings.NewL1StandardBridge(predeploys.DevL1StandardBridgeAddr, sim) + bridge, err := bindings.NewL1StandardBridge(deployments.L1StandardBridgeProxy, sim) require.NoError(t, err) msgrAddr, err := bridge.MESSENGER(callOpts) require.NoError(t, err) - require.Equal(t, predeploys.DevL1CrossDomainMessengerAddr, msgrAddr) + require.Equal(t, deployments.L1CrossDomainMessengerProxy, msgrAddr) otherBridge, err := bridge.OTHERBRIDGE(callOpts) require.NoError(t, err) require.Equal(t, predeploys.L2StandardBridgeAddr, otherBridge) - factory, err := bindings.NewKromaMintableERC20(predeploys.DevKromaMintableERC20FactoryAddr, sim) + factory, err := bindings.NewKromaMintableERC20(deployments.KromaMintableERC20Factory, sim) require.NoError(t, err) bridgeAddr, err := factory.BRIDGE(callOpts) require.NoError(t, err) - require.Equal(t, predeploys.DevL1StandardBridgeAddr, bridgeAddr) - - weth9, err := bindings.NewWETH9(predeploys.DevWETH9Addr, sim) - require.NoError(t, err) - decimals, err := weth9.Decimals(callOpts) - require.NoError(t, err) - require.Equal(t, uint8(18), decimals) - symbol, err := weth9.Symbol(callOpts) - require.NoError(t, err) - require.Equal(t, "WETH", symbol) - name, err := weth9.Name(callOpts) - require.NoError(t, err) - require.Equal(t, "Wrapped Ether", name) + require.Equal(t, deployments.L1StandardBridgeProxy, bridgeAddr) - sysCfg, err := bindings.NewSystemConfig(predeploys.DevSystemConfigAddr, sim) + sysCfg, err := bindings.NewSystemConfig(deployments.SystemConfigProxy, sim) require.NoError(t, err) cfg, err := sysCfg.ResourceConfig(&bind.CallOpts{}) require.NoError(t, err) require.Equal(t, cfg, DefaultResourceConfig) owner, err := sysCfg.Owner(&bind.CallOpts{}) require.NoError(t, err) - require.Equal(t, owner, config.ProxyAdminOwner) + require.Equal(t, owner, deployments.TimeLockProxy) overhead, err := sysCfg.Overhead(&bind.CallOpts{}) require.NoError(t, err) require.Equal(t, overhead.Uint64(), config.GasPriceOracleOverhead) diff --git a/kroma-chain-ops/genesis/layer_two.go b/kroma-chain-ops/genesis/layer_two.go new file mode 100644 index 000000000..2b048d4f9 --- /dev/null +++ b/kroma-chain-ops/genesis/layer_two.go @@ -0,0 +1,89 @@ +package genesis + +import ( + "fmt" + + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/log" + + "github.com/ethereum-optimism/optimism/op-chain-ops/state" + "github.com/kroma-network/kroma/kroma-bindings/predeploys" + "github.com/kroma-network/kroma/kroma-chain-ops/immutables" +) + +// BuildL2DeveloperGenesis will build the L2 genesis block. +func BuildL2Genesis(config *DeployConfig, l1StartBlock *types.Block) (*core.Genesis, error) { + genspec, err := NewL2Genesis(config, l1StartBlock) + if err != nil { + return nil, err + } + + db := state.NewMemoryStateDB(genspec) + if config.FundDevAccounts { + log.Info("Funding developer accounts in L2 genesis") + FundDevAccounts(db) + } + + SetPrecompileBalances(db) + + storage, err := NewL2StorageConfig(config, l1StartBlock) + if err != nil { + return nil, err + } + + immutable, err := NewL2ImmutableConfig(config, l1StartBlock) + if err != nil { + return nil, err + } + + // Set up the proxies + err = setProxies(db, predeploys.ProxyAdminAddr, BigL2PredeployNamespace, L2ProxyCount) + if err != nil { + return nil, err + } + + // Set up the implementations + deployResults, err := immutables.BuildKroma(immutable) + if err != nil { + return nil, err + } + for name, predeploy := range predeploys.Predeploys { + addr := *predeploy + if addr == predeploys.GovernanceTokenAddr && !config.EnableGovernance { + // there is no governance token configured, so skip the governance token predeploy + log.Warn("Governance is not enabled, skipping governance token predeploy.") + continue + } + codeAddr := addr + if predeploys.IsProxied(addr) { + codeAddr, err = AddressToCodeNamespace(addr) + if err != nil { + return nil, fmt.Errorf("error converting to code namespace: %w", err) + } + db.CreateAccount(codeAddr) + db.SetState(addr, ImplementationSlot, codeAddr.Hash()) + log.Info("Set proxy", "name", name, "address", addr, "implementation", codeAddr) + } else { + db.DeleteState(addr, AdminSlot) + } + if err := setupPredeploy(db, deployResults, storage, name, addr, codeAddr); err != nil { + return nil, err + } + code := db.GetCode(codeAddr) + if len(code) == 0 { + return nil, fmt.Errorf("code not set for %s", name) + } + } + + return db.Genesis(), nil +} + +func L2PredeploysCount(config *DeployConfig) int { + cnt := PrecompileCount + int(L2ProxyCount) + len(predeploys.Predeploys) + if config.FundDevAccounts { + cnt = cnt + len(DevAccounts) + } + + return cnt +} diff --git a/op-chain-ops/genesis/layer_two_test.go b/kroma-chain-ops/genesis/layer_two_test.go similarity index 50% rename from op-chain-ops/genesis/layer_two_test.go rename to kroma-chain-ops/genesis/layer_two_test.go index a266147ea..885956336 100644 --- a/op-chain-ops/genesis/layer_two_test.go +++ b/kroma-chain-ops/genesis/layer_two_test.go @@ -14,9 +14,9 @@ import ( "github.com/ethereum/go-ethereum/crypto" "github.com/stretchr/testify/require" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" - "github.com/ethereum-optimism/optimism/op-bindings/predeploys" - "github.com/ethereum-optimism/optimism/op-chain-ops/genesis" + "github.com/kroma-network/kroma/kroma-bindings/bindings" + "github.com/kroma-network/kroma/kroma-bindings/predeploys" + "github.com/kroma-network/kroma/kroma-chain-ops/genesis" ) var writeFile bool @@ -27,10 +27,8 @@ func init() { var testKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") -func TestBuildL2Genesis(t *testing.T) { - config, err := genesis.NewDeployConfig("./testdata/test-deploy-config-devnet-l1.json") - require.Nil(t, err) - +// Tests the BuildL2MainnetGenesis factory with the provided config. +func testBuildL2Genesis(t *testing.T, config *genesis.DeployConfig) *core.Genesis { backend := backends.NewSimulatedBackend( core.GenesisAlloc{ crypto.PubkeyToAddress(testKey.PublicKey): {Balance: big.NewInt(10000000000000000)}, @@ -40,59 +38,62 @@ func TestBuildL2Genesis(t *testing.T) { block, err := backend.BlockByNumber(context.Background(), common.Big0) require.NoError(t, err) - gen, err := genesis.BuildL2Genesis(config, block, true) + gen, err := genesis.BuildL2Genesis(config, block) require.Nil(t, err) require.NotNil(t, gen) - depB, err := bindings.GetDeployedBytecode("Proxy") + proxyBytecode, err := bindings.GetDeployedBytecode("Proxy") require.NoError(t, err) - for name, address := range predeploys.Predeploys { - addr := *address + for name, predeploy := range predeploys.Predeploys { + addr := *predeploy account, ok := gen.Alloc[addr] - require.Equal(t, ok, true) + require.Equal(t, true, ok, name) require.Greater(t, len(account.Code), 0) - if name == "ProxyAdmin" || name == "WETH9" { - continue - } - adminSlot, ok := account.Storage[genesis.AdminSlot] - require.Equal(t, ok, true) - require.Equal(t, adminSlot, predeploys.ProxyAdminAddr.Hash()) - require.Equal(t, account.Code, depB) + isProxy := predeploys.IsProxied(addr) || + (!config.EnableGovernance && addr == predeploys.GovernanceTokenAddr) + if isProxy { + require.Equal(t, true, ok, name) + require.Equal(t, predeploys.ProxyAdminAddr.Hash(), adminSlot) + require.Equal(t, proxyBytecode, account.Code) + } else { + require.Equal(t, false, ok, name) + require.NotEqual(t, proxyBytecode, account.Code, name) + } } - actualCount := genesis.L2PredeploysCount(config) - require.Equal(t, actualCount, len(gen.Alloc)) + // All of the precompile addresses should be funded with a single wei + for i := 0; i < genesis.PrecompileCount; i++ { + addr := common.BytesToAddress([]byte{byte(i)}) + require.Equal(t, common.Big1, gen.Alloc[addr].Balance) + } if writeFile { file, _ := json.MarshalIndent(gen, "", " ") _ = os.WriteFile("genesis.json", file, 0644) } + return gen } -func TestBuildL2GenesisDevAccountsFunding(t *testing.T) { +func TestBuildL2MainnetGenesis(t *testing.T) { config, err := genesis.NewDeployConfig("./testdata/test-deploy-config-devnet-l1.json") require.Nil(t, err) + config.EnableGovernance = true config.FundDevAccounts = false - - err = config.InitDeveloperDeployedAddresses() - require.NoError(t, err) - - backend := backends.NewSimulatedBackend( - core.GenesisAlloc{ - crypto.PubkeyToAddress(testKey.PublicKey): {Balance: big.NewInt(10000000000000000)}, - }, - 15000000, - ) - block, err := backend.BlockByNumber(context.Background(), common.Big0) - require.NoError(t, err) - - gen, err := genesis.BuildL2Genesis(config, block, true) - require.NoError(t, err) - + gen := testBuildL2Genesis(t, config) actualCount := genesis.L2PredeploysCount(config) require.Equal(t, actualCount, len(gen.Alloc)) } + +func TestBuildL2MainnetNoGovernanceGenesis(t *testing.T) { + config, err := genesis.NewDeployConfig("./testdata/test-deploy-config-devnet-l1.json") + require.Nil(t, err) + config.EnableGovernance = false + config.FundDevAccounts = false + gen := testBuildL2Genesis(t, config) + actualCount := genesis.L2PredeploysCount(config) - 1 + require.Equal(t, actualCount, len(gen.Alloc)) +} diff --git a/op-chain-ops/genesis/poseidon.go b/kroma-chain-ops/genesis/poseidon.go similarity index 100% rename from op-chain-ops/genesis/poseidon.go rename to kroma-chain-ops/genesis/poseidon.go diff --git a/kroma-chain-ops/genesis/setters.go b/kroma-chain-ops/genesis/setters.go new file mode 100644 index 000000000..cd16d60aa --- /dev/null +++ b/kroma-chain-ops/genesis/setters.go @@ -0,0 +1,97 @@ +package genesis + +import ( + "errors" + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/log" + + opstate "github.com/ethereum-optimism/optimism/op-chain-ops/state" + "github.com/kroma-network/kroma/kroma-bindings/bindings" + "github.com/kroma-network/kroma/kroma-chain-ops/immutables" + "github.com/kroma-network/kroma/kroma-chain-ops/state" +) + +// PrecompileCount represents the number of precompile addresses +// starting from `address(0)` to PrecompileCount that are funded +// with a single wei in the genesis state. +const PrecompileCount = 256 + +var ( + L1ProxyCount = uint64(2048) + L2ProxyCount = uint64(256) +) + +// FundDevAccounts will fund each of the development accounts. +func FundDevAccounts(db vm.StateDB) { + for _, account := range DevAccounts { + if !db.Exist(account) { + db.CreateAccount(account) + } + db.AddBalance(account, devBalance) + } +} + +func setProxies(db vm.StateDB, proxyAdminAddr common.Address, namespace *big.Int, count uint64) error { + depBytecode, err := bindings.GetDeployedBytecode("Proxy") + if err != nil { + return err + } + if len(depBytecode) == 0 { + return errors.New("Proxy has empty bytecode") + } + + for i := uint64(0); i <= count; i++ { + bigAddr := new(big.Int).Or(namespace, new(big.Int).SetUint64(i)) + addr := common.BigToAddress(bigAddr) + + if !db.Exist(addr) { + db.CreateAccount(addr) + } + + db.SetCode(addr, depBytecode) + db.SetState(addr, AdminSlot, proxyAdminAddr.Hash()) + log.Trace("Set proxy", "address", addr, "admin", proxyAdminAddr) + } + + return nil +} + +// SetPrecompileBalances will set a single wei at each precompile address. +// This is an optimization to make calling them cheaper. This should only +// be used for devnets. +func SetPrecompileBalances(db vm.StateDB) { + for i := 0; i < PrecompileCount; i++ { + addr := common.BytesToAddress([]byte{byte(i)}) + db.CreateAccount(addr) + db.AddBalance(addr, common.Big1) + } +} + +func setupPredeploy(db vm.StateDB, deployResults immutables.DeploymentResults, storage opstate.StorageConfig, name string, proxyAddr common.Address, implAddr common.Address) error { + // Use the generated bytecode when there are immutables + // otherwise use the artifact deployed bytecode + if bytecode, ok := deployResults[name]; ok { + log.Info("Setting deployed bytecode with immutables", "name", name, "address", implAddr) + db.SetCode(implAddr, bytecode) + } else { + depBytecode, err := bindings.GetDeployedBytecode(name) + if err != nil { + return err + } + log.Info("Setting deployed bytecode from solc compiler output", "name", name, "address", implAddr) + db.SetCode(implAddr, depBytecode) + } + + // Set the storage values + if storageConfig, ok := storage[name]; ok { + log.Info("Setting storage", "name", name, "address", proxyAddr) + if err := state.SetStorage(name, proxyAddr, storageConfig, db); err != nil { + return err + } + } + + return nil +} diff --git a/kroma-chain-ops/genesis/testdata/allocs-l1.json b/kroma-chain-ops/genesis/testdata/allocs-l1.json new file mode 100644 index 000000000..0b2602e94 --- /dev/null +++ b/kroma-chain-ops/genesis/testdata/allocs-l1.json @@ -0,0 +1,524 @@ +{ + "root": "8742b474f73fe68564939d1e2ead5ba226bd0675a9276ddc641d2ae97033b503", + "accounts": { + "0x0000000000000000000000000000000000000001": { + "balance": "1", + "nonce": 0, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "key": "0x1468288056310c82aa4c01a7e12a10f8111a0560e72b700555479031b86c357d" + }, + "0x0000000000000000000000000000000000000002": { + "balance": "1", + "nonce": 0, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "key": "0xd52688a8f926c816ca1e079067caba944f158e764817b83fc43594370ca9cf62" + }, + "0x0000000000000000000000000000000000000003": { + "balance": "1", + "nonce": 0, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "key": "0x5b70e80538acdabd6137353b0f9d8d149f4dba91e8be2e7946e409bfdbe685b9" + }, + "0x0000000000000000000000000000000000000004": { + "balance": "1", + "nonce": 0, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "key": "0xa876da518a393dbd067dc72abfa08d475ed6447fca96d92ec3f9e7eba503ca61" + }, + "0x0000000000000000000000000000000000000005": { + "balance": "1", + "nonce": 0, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "key": "0x421df1fa259221d02aa4956eb0d35ace318ca24c0a33a64c1af96cf67cf245b6" + }, + "0x0000000000000000000000000000000000000006": { + "balance": "1", + "nonce": 0, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "key": "0x689802d6ed1a28b049e9d4fe5334c5902fd9bc00c42821c82f82ee2da10be908" + }, + "0x0000000000000000000000000000000000000007": { + "balance": "1", + "nonce": 0, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "key": "0x8c3ab0970b73895b8c9959bae685c3a19f45eb5ad89d42b52a340ec4ac204d19" + }, + "0x0000000000000000000000000000000000000008": { + "balance": "1", + "nonce": 0, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "key": "0x471703c5eda8644a64cec152c58f5aacec93d72fb0bfa705f0473f9043a8357c" + }, + "0x0000000000000000000000000000000000000009": { + "balance": "1", + "nonce": 0, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "key": "0xe690b239ba3aaf993e443ae14aeffc44cf8d9931a79baed9fa141d0e4506e131" + }, + "0x0165878a594ca255338adfa4d48449f69242eb8f": { + "balance": "0", + "nonce": 1, + "root": "0x5db2da37f5d435a1eed37d016077f6ed704b0322ff3eed4cf62ca3987f9927ec", + "codeHash": "0x1f958654ab06a152993e7a0ae7b6dbb0d4b19265cc9337b8789fe1353bd9dc35", + "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106d9565b610224565b6100a86100a33660046106f4565b610296565b6040516100b59190610777565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106d9565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ea565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060b565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006106357fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038390556040805173ffffffffffffffffffffffffffffffffffffffff8084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d457600080fd5b919050565b6000602082840312156106eb57600080fd5b610412826106b0565b60008060006040848603121561070957600080fd5b610712846106b0565b9250602084013567ffffffffffffffff8082111561072f57600080fd5b818601915086601f83011261074357600080fd5b81358181111561075257600080fd5b87602082850101111561076457600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a457858101830151858201604001528201610788565b818111156107b6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", + "storage": { + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "3aa5ebb10dc797cac828524e59a333d0a371443c", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "5fbdb2315678afecb367f032d93f642f64180aa3" + }, + "key": "0x5df489e29c0253edd77505b9c678fec4c95c2ef043b278ef257f40c6ae972e95" + }, + "0x09635f643e140090a9a8dcd712ed6285858cebef": { + "balance": "0", + "nonce": 1, + "root": "0x821e2556a290c86405f8160a2d662042a431ba456b9db265c79bb837c04be5f0", + "codeHash": "0xd0ccb1a39e8ab23d21aca695bf452938b189ecd73485b9e76e0d15346e280907", + "code": "0x6080604052600436106101745760003560e01c80639e45e8f4116100cb578063cf8e5cf01161007f578063e4a3011611610059578063e4a3011614610487578063e6646723146104a7578063f4daa291146104c757600080fd5b8063cf8e5cf014610432578063d1de856c14610452578063dcec33481461047257600080fd5b8063a48ea6de116100b0578063a48ea6de146103be578063b0ea09a8146103de578063b98debbf146103fe57600080fd5b80639e45e8f4146102e6578063a25ae5571461033f57600080fd5b80635a045f781161012d57806370872aa51161010757806370872aa51461029a5780637f006420146102b057806388786272146102d057600080fd5b80635a045f781461025b57806369f16eec146102705780636abcf5631461028557600080fd5b80634599c7881161015e5780634599c788146101f0578063529933df1461020557806354fd4d501461023957600080fd5b80622134cc1461017957806333727c4d146101c0575b600080fd5b34801561018557600080fd5b506101ad7f000000000000000000000000000000000000000000000000000000000000000281565b6040519081526020015b60405180910390f35b3480156101cc57600080fd5b506101e06101db366004611800565b6104fb565b60405190151581526020016101b7565b3480156101fc57600080fd5b506101ad610569565b34801561021157600080fd5b506101ad7f000000000000000000000000000000000000000000000000000000000000001081565b34801561024557600080fd5b5061024e6105dc565b6040516101b79190611849565b61026e61026936600461189a565b61067f565b005b34801561027c57600080fd5b506101ad610c86565b34801561029157600080fd5b506003546101ad565b3480156102a657600080fd5b506101ad60015481565b3480156102bc57600080fd5b506101ad6102cb366004611800565b610c98565b3480156102dc57600080fd5b506101ad60025481565b3480156102f257600080fd5b5061031a7f000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad78881565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b7565b34801561034b57600080fd5b5061035f61035a366004611800565b610e78565b60408051825173ffffffffffffffffffffffffffffffffffffffff16815260208084015190820152828201516fffffffffffffffffffffffffffffffff90811692820192909252606092830151909116918101919091526080016101b7565b3480156103ca57600080fd5b506101ad6103d9366004611800565b610f35565b3480156103ea57600080fd5b5061031a6103f9366004611800565b610fa1565b34801561040a57600080fd5b5061031a7f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b34801561043e57600080fd5b5061035f61044d366004611800565b610fe3565b34801561045e57600080fd5b506101ad61046d366004611800565b611022565b34801561047e57600080fd5b506101ad61106a565b34801561049357600080fd5b5061026e6104a23660046118cc565b6110b0565b3480156104b357600080fd5b5061026e6104c2366004611913565b6112c9565b3480156104d357600080fd5b506101ad7f000000000000000000000000000000000000000000000000000000000000025881565b6000427f0000000000000000000000000000000000000000000000000000000000000258600384815481106105325761053261194c565b600091825260209091206002600390920201015461056291906fffffffffffffffffffffffffffffffff166119aa565b1092915050565b600354600090156105d35760038054610584906001906119c2565b815481106105945761059461194c565b600091825260209091206003909102016002015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16919050565b6001545b905090565b60606106077f0000000000000000000000000000000000000000000000000000000000000001611660565b6106307f0000000000000000000000000000000000000000000000000000000000000000611660565b6106597f0000000000000000000000000000000000000000000000000000000000000000611660565b60405160200161066b939291906119d9565b604051602081830303815290604052905090565b60007f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc973ffffffffffffffffffffffffffffffffffffffff16633a5490466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107109190611a4f565b905073ffffffffffffffffffffffffffffffffffffffff808216146107e5573373ffffffffffffffffffffffffffffffffffffffff8216146107e55760405162461bcd60e51b815260206004820152604260248201527f4c324f75747075744f7261636c653a206f6e6c7920746865206e65787420736560448201527f6c65637465642076616c696461746f722063616e207375626d6974206f75747060648201527f7574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6107ed61106a565b84146108875760405162461bcd60e51b815260206004820152604860248201527f4c324f75747075744f7261636c653a20626c6f636b206e756d626572206d757360448201527f7420626520657175616c20746f206e65787420657870656374656420626c6f6360648201527f6b206e756d626572000000000000000000000000000000000000000000000000608482015260a4016107dc565b4261089185611022565b106109045760405162461bcd60e51b815260206004820152603560248201527f4c324f75747075744f7261636c653a2063616e6e6f74207375626d6974204c3260448201527f206f757470757420696e2074686520667574757265000000000000000000000060648201526084016107dc565b846109775760405162461bcd60e51b815260206004820152603c60248201527f4c324f75747075744f7261636c653a204c3220636865636b706f696e74206f7560448201527f747075742063616e6e6f7420626520746865207a65726f20686173680000000060648201526084016107dc565b82158015906109865750814015155b15610a275782824014610a275760405162461bcd60e51b815260206004820152604960248201527f4c324f75747075744f7261636c653a20626c6f636b206861736820646f65732060448201527f6e6f74206d61746368207468652068617368206174207468652065787065637460648201527f6564206865696768740000000000000000000000000000000000000000000000608482015260a4016107dc565b6000610a3260035490565b60408051608081018252338152602081018981526fffffffffffffffffffffffffffffffff428181168486019081528b831660608601908152600380546001810182556000829052965196027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b8101805473ffffffffffffffffffffffffffffffffffffffff989098167fffffffffffffffffffffffff00000000000000000000000000000000000000009098169790971790965593517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c86015551925182167001000000000000000000000000000000000292909116919091177fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85d9092019190915590519192508691839189917f457b4388026260019ae0b0b4f16c98235d74fe7359be469bdcba16e6d0d4968991610b8f9190815260200190565b60405180910390a473ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc91663d38dc7ee82610bfe7f0000000000000000000000000000000000000000000000000000000000000258426119aa565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526fffffffffffffffffffffffffffffffff166024820152604401600060405180830381600087803b158015610c6657600080fd5b505af1158015610c7a573d6000803e3d6000fd5b50505050505050505050565b6003546000906105d7906001906119c2565b6000610ca2610569565b821115610d3d5760405162461bcd60e51b815260206004820152604960248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f7420666f72206120626c6f636b207468617420686173206e6f74206265656e2060648201527f7375626d69747465640000000000000000000000000000000000000000000000608482015260a4016107dc565b600354610dd85760405162461bcd60e51b815260206004820152604760248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f74206173206e6f206f7574707574732068617665206265656e207375626d697460648201527f7465642079657400000000000000000000000000000000000000000000000000608482015260a4016107dc565b6003546000905b80821015610e715760006002610df583856119aa565b610dff9190611a73565b90508460038281548110610e1557610e1561194c565b600091825260209091206003909102016002015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff161015610e6757610e608160016119aa565b9250610e6b565b8091505b50610ddf565b5092915050565b60408051608081018252600080825260208201819052918101829052606081019190915260038281548110610eaf57610eaf61194c565b6000918252602091829020604080516080810182526003909302909101805473ffffffffffffffffffffffffffffffffffffffff1683526001810154938301939093526002909201546fffffffffffffffffffffffffffffffff808216938301939093527001000000000000000000000000000000009004909116606082015292915050565b60007f000000000000000000000000000000000000000000000000000000000000025860038381548110610f6b57610f6b61194c565b6000918252602090912060026003909202010154610f9b91906fffffffffffffffffffffffffffffffff166119aa565b92915050565b600060038281548110610fb657610fb661194c565b600091825260209091206003909102015473ffffffffffffffffffffffffffffffffffffffff1692915050565b604080516080810182526000808252602082018190529181018290526060810191909152600361101283610c98565b81548110610eaf57610eaf61194c565b60007f00000000000000000000000000000000000000000000000000000000000000026001548361105391906119c2565b61105d9190611aae565b600254610f9b91906119aa565b600354600090156110a8577f000000000000000000000000000000000000000000000000000000000000001061109e610569565b6105d791906119aa565b6105d7610569565b600054610100900460ff16158080156110d05750600054600160ff909116105b806110ea5750303b1580156110ea575060005460ff166001145b61115c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107dc565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156111ba57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b428211156112575760405162461bcd60e51b8152602060048201526044602482018190527f4c324f75747075744f7261636c653a207374617274696e67204c322074696d65908201527f7374616d70206d757374206265206c657373207468616e2063757272656e742060648201527f74696d6500000000000000000000000000000000000000000000000000000000608482015260a4016107dc565b6002829055600183905580156112c457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788161461139a5760405162461bcd60e51b815260206004820152604160248201527f4c324f75747075744f7261636c653a206f6e6c792074686520636f6c6f73736560448201527f756d20636f6e74726163742063616e207265706c61636520616e206f7574707560648201527f7400000000000000000000000000000000000000000000000000000000000000608482015260a4016107dc565b73ffffffffffffffffffffffffffffffffffffffff81166114235760405162461bcd60e51b815260206004820152603060248201527f4c324f75747075744f7261636c653a207375626d69747465722061646472657360448201527f732063616e6e6f74206265207a65726f0000000000000000000000000000000060648201526084016107dc565b60035483106114c05760405162461bcd60e51b815260206004820152604660248201527f4c324f75747075744f7261636c653a2063616e6e6f74207265706c616365206160448201527f6e206f757470757420616674657220746865206c6174657374206f757470757460648201527f20696e6465780000000000000000000000000000000000000000000000000000608482015260a4016107dc565b6000600384815481106114d5576114d561194c565b6000918252602090912060039091020160028101549091507f00000000000000000000000000000000000000000000000000000000000002589061152b906fffffffffffffffffffffffffffffffff16426119c2565b106115c45760405162461bcd60e51b815260206004820152604860248201527f4c324f75747075744f7261636c653a2063616e6e6f74207265706c616365206160448201527f6e206f757470757420746861742068617320616c7265616479206265656e206660648201527f696e616c697a6564000000000000000000000000000000000000000000000000608482015260a4016107dc565b6001810183905580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831617815560405183815284907fa1b831bb8b6b242db6d0988a6d21f869c610de9f703a5e45e1b7d3dc3137b9069060200160405180910390a250505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6060600061166d8361171e565b600101905060008167ffffffffffffffff81111561168d5761168d611aeb565b6040519080825280601f01601f1916602001820160405280156116b7576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846116c157509392505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611767577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611793576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106117b157662386f26fc10000830492506010015b6305f5e10083106117c9576305f5e100830492506008015b61271083106117dd57612710830492506004015b606483106117ef576064830492506002015b600a8310610f9b5760010192915050565b60006020828403121561181257600080fd5b5035919050565b60005b8381101561183457818101518382015260200161181c565b83811115611843576000848401525b50505050565b6020815260008251806020840152611868816040850160208701611819565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600080600080608085870312156118b057600080fd5b5050823594602084013594506040840135936060013592509050565b600080604083850312156118df57600080fd5b50508035926020909101359150565b73ffffffffffffffffffffffffffffffffffffffff8116811461191057600080fd5b50565b60008060006060848603121561192857600080fd5b83359250602084013591506040840135611941816118ee565b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156119bd576119bd61197b565b500190565b6000828210156119d4576119d461197b565b500390565b600084516119eb818460208901611819565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611a27816001850160208a01611819565b60019201918201528351611a42816002840160208801611819565b0160020195945050505050565b600060208284031215611a6157600080fd5b8151611a6c816118ee565b9392505050565b600082611aa9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ae657611ae661197b565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "01" + }, + "key": "0xaebd2e1514b4e7a57d6aea7d9336de4a0ebf14a8dbe0b3d364f6030b7abedd33" + }, + "0x0b306bf915c4d645ff596e518faf3f9669b97016": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x354b26999e434f8256d168395315e1f51fc15bf49bf2e6bb58fc549bd597e7da", + "code": "0x7c010000000000000000000000000000000000000000000000000000000060003504806329a5f2f6149063299e566014176200003757fe5b7f109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b6020527f16ed41e13bb9c0c66ae119424fddbcbc9314dc9fdbdeea55d6c64543dc4903e06040527f2b90bba00fca0589f617e7dcbfe82e0df706ab640ceb247b791a93b74e36736d6060527f2969f27eed31a480b9c36c764379dbca2cc8fdd1415c3dded62940bcde0bd7716080527f2e2419f9ec02ec394c9871c832963dc1b89d743c8c7b964029b2311687b1fe2360a0527f101071f0032379b697315876690f053d148d4e109f5fb065c8aacc55a0f89bfa60c0527f143021ec686a3f330d5f9e654638065ce6cd79e28c5b3753326244ee65a1b1a760e0527f176cc029695ad02582a70eff08a6fd99d057e12e58e7d7b6b16cdfabc8ee2911610100527f19a3fc0a56702bf417ba7fee3802593fa644470307043f7773279cd71d25d5e0610120527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016024356004356000837f0ee9a592ba9a9518d05986d656f40c2114c4993c11bb29938d21d47304cd8e6e82089050837f00f1445235f2148c5986587169fc1bcd887b08d4d00868df5696fff40956e86483089150837f08dff3487e8ac99e1f29a058d0fa80b930c728730b7ab36ce879f3890ecf73f58408925083818180828009800909905083828180828009800909915083838180828009800909925062000249600052620025ba565b837f2f27be690fdaee46c3ce28f7532b13c856c35342c84bda6e20966310fadc01d082089050837f2b2ae1acf68b7b8d2416bebf3d4f6234b763fe04b8043ee48b8327bebca16cf283089150837f0319d062072bef7ecca5eac06f97d4d55952c175ab6b03eae64b44c7dbf11cfa84089250838181808280098009099050838281808280098009099150838381808280098009099250620002ec600052620025ba565b837f28813dcaebaeaa828a376df87af4a63bc8b7bf27ad49c6298ef7b387bf28526d82089050837f2727673b2ccbc903f181bf38e1c1d40d2033865200c352bc150928adddf9cb7883089150837f234ec45ca27727c2e74abd2b2a1494cd6efbd43e340587d6b8fb9e31e65cc632840892508381818082800980090990508382818082800980090991508383818082800980090992506200038f600052620025ba565b837f15b52534031ae18f7f862cb2cf7cf760ab10a8150a337b1ccd99ff6e8797d42882089050837f0dc8fad6d9e4b35f5ed9a3d186b79ce38e0e8a8d1b58b132d701d4eecf68d1f683089150837f1bcd95ffc211fbca600f705fad3fb567ea4eb378f62e1fec97805518a47e4d9c8408925083818180828009800909905083828180828009800909915083838180828009800909925062000432600052620025ba565b837f10520b0ab721cadfe9eff81b016fc34dc76da36c2578937817cb978d069de55982089050837f1f6d48149b8e7f7d9b257d8ed5fbbaf42932498075fed0ace88a9eb81f5627f683089150837f1d9655f652309014d29e00ef35a2089bfff8dc1c816f0dc9ca34bdb5460c870584089250838181808280098009099050620004bd600052620025ba565b837f04df5a56ff95bcafb051f7b1cd43a99ba731ff67e47032058fe3d4185697cc7d82089050837f0672d995f8fff640151b3d290cedaf148690a10a8c8424a7f6ec282b6e4be82883089150837f099952b414884454b21200d7ffafdd5f0c9a9dcc06f2708e9fc1d8209b5c75b98408925083818180828009800909905062000548600052620025ba565b837f052cba2255dfd00c7c483143ba8d469448e43586a9b4cd9183fd0e843a6b9fa682089050837f0b8badee690adb8eb0bd74712b7999af82de55707251ad7716077cb93c464ddc83089150837f119b1590f13307af5a1ee651020c07c749c15d60683a8050b963d0a8e4b2bdd184089250838181808280098009099050620005d3600052620025ba565b837f03150b7cd6d5d17b2529d36be0f67b832c4acfc884ef4ee5ce15be0bfb4a8d0982089050837f2cc6182c5e14546e3cf1951f173912355374efb83d80898abe69cb317c9ea56583089150837f005032551e6378c450cfe129a404b3764218cadedac14e2b92d2cd73111bf0f9840892508381818082800980090990506200065e600052620025ba565b837f233237e3289baa34bb147e972ebcb9516469c399fcc069fb88f9da2cc28276b582089050837f05c8f4f4ebd4a6e3c980d31674bfbe6323037f21b34ae5a4e80c2d4c24d6028083089150837f0a7b1db13042d396ba05d818a319f25252bcf35ef3aeed91ee1f09b2590fc65b84089250838181808280098009099050620006e9600052620025ba565b837f2a73b71f9b210cf5b14296572c9d32dbf156e2b086ff47dc5df542365a404ec082089050837f1ac9b0417abcc9a1935107e9ffc91dc3ec18f2c4dbe7f22976a760bb5c50c46083089150837f12c0339ae08374823fabb076707ef479269f3e4d6cb104349015ee046dc93fc08408925083818180828009800909905062000774600052620025ba565b837f0b7475b102a165ad7f5b18db4e1e704f52900aa3253baac68246682e56e9a28e82089050837f037c2849e191ca3edb1c5e49f6e8b8917c843e379366f2ea32ab3aa88d7f844883089150837f05a6811f8556f014e92674661e217e9bd5206c5c93a07dc145fdb176a716346f84089250838181808280098009099050620007ff600052620025ba565b837f29a795e7d98028946e947b75d54e9f044076e87a7b2883b47b675ef5f38bd66e82089050837f20439a0c84b322eb45a3857afc18f5826e8c7382c8a1585c507be199981fd22f83089150837f2e0ba8d94d9ecf4a94ec2050c7371ff1bb50f27799a84b6d4a2a6f2a0982c887840892508381818082800980090990506200088a600052620025ba565b837f143fd115ce08fb27ca38eb7cce822b4517822cd2109048d2e6d0ddcca17d71c882089050837f0c64cbecb1c734b857968dbbdcf813cdf8611659323dbcbfc84323623be9caf183089150837f028a305847c683f646fca925c163ff5ae74f348d62c2b670f1426cef9403da538408925083818180828009800909905062000915600052620025ba565b837f2e4ef510ff0b6fda5fa940ab4c4380f26a6bcb64d89427b824d6755b5db9e30c82089050837f0081c95bc43384e663d79270c956ce3b8925b4f6d033b078b96384f50579400e83089150837f2ed5f0c91cbd9749187e2fade687e05ee2491b349c039a0bba8a9f4023a0bb3884089250838181808280098009099050620009a0600052620025ba565b837f30509991f88da3504bbf374ed5aae2f03448a22c76234c8c990f01f33a73520682089050837f1c3f20fd55409a53221b7c4d49a356b9f0a1119fb2067b41a7529094424ec6ad83089150837f10b4e7f3ab5df003049514459b6e18eec46bb2213e8e131e170887b47ddcb96c8408925083818180828009800909905062000a2b600052620025ba565b837f2a1982979c3ff7f43ddd543d891c2abddd80f804c077d775039aa3502e43adef82089050837f1c74ee64f15e1db6feddbead56d6d55dba431ebc396c9af95cad0f1315bd5c9183089150837f07533ec850ba7f98eab9303cace01b4b9e4f2e8b82708cfa9c2fe45a0ae146a08408925083818180828009800909905062000ab6600052620025ba565b837f21576b438e500449a151e4eeaf17b154285c68f42d42c1808a11abf3764c075082089050837f2f17c0559b8fe79608ad5ca193d62f10bce8384c815f0906743d6930836d4a9e83089150837f2d477e3862d07708a79e8aae946170bc9775a4201318474ae665b0b1b7e2730e8408925083818180828009800909905062000b41600052620025ba565b837f162f5243967064c390e095577984f291afba2266c38f5abcd89be0f5b2747eab82089050837f2b4cb233ede9ba48264ecd2c8ae50d1ad7a8596a87f29f8a7777a7009239331183089150837f2c8fbcb2dd8573dc1dbaf8f4622854776db2eece6d85c4cf4254e7c35e03b07a8408925083818180828009800909905062000bcc600052620025ba565b837f1d6f347725e4816af2ff453f0cd56b199e1b61e9f601e9ade5e88db870949da982089050837f204b0c397f4ebe71ebc2d8b3df5b913df9e6ac02b68d31324cd49af5c456552983089150837f0c4cb9dc3c4fd8174f1149b3c63c3c2f9ecb827cd7dc25534ff8fb75bc79c5028408925083818180828009800909905062000c57600052620025ba565b837f174ad61a1448c899a25416474f4930301e5c49475279e0639a616ddc45bc7b5482089050837f1a96177bcf4d8d89f759df4ec2f3cde2eaaa28c177cc0fa13a9816d49a38d2ef83089150837f066d04b24331d71cd0ef8054bc60c4ff05202c126a233c1a8242ace360b8a30a8408925083818180828009800909905062000ce2600052620025ba565b837f2a4c4fc6ec0b0cf52195782871c6dd3b381cc65f72e02ad527037a62aa1bd80482089050837f13ab2d136ccf37d447e9f2e14a7cedc95e727f8446f6d9d7e55afc01219fd64983089150837f1121552fca26061619d24d843dc82769c1b04fcec26f55194c2e3e869acc6a9a8408925083818180828009800909905062000d6d600052620025ba565b837f00ef653322b13d6c889bc81715c37d77a6cd267d595c4a8909a5546c7c97cff182089050837f0e25483e45a665208b261d8ba74051e6400c776d652595d9845aca35d8a397d383089150837f29f536dcb9dd7682245264659e15d88e395ac3d4dde92d8c46448db979eeba898408925083818180828009800909905062000df8600052620025ba565b837f2a56ef9f2c53febadfda33575dbdbd885a124e2780bbea170e456baace0fa5be82089050837f1c8361c78eb5cf5decfb7a2d17b5c409f2ae2999a46762e8ee416240a8cb9af183089150837f151aff5f38b20a0fc0473089aaf0206b83e8e68a764507bfd3d0ab4be74319c58408925083818180828009800909905062000e83600052620025ba565b837f04c6187e41ed881dc1b239c88f7f9d43a9f52fc8c8b6cdd1e76e47615b51f10082089050837f13b37bd80f4d27fb10d84331f6fb6d534b81c61ed15776449e801b7ddc9c296783089150837f01a5c536273c2d9df578bfbd32c17b7a2ce3664c2a52032c9321ceb1c4e8a8e48408925083818180828009800909905062000f0e600052620025ba565b837f2ab3561834ca73835ad05f5d7acb950b4a9a2c666b9726da832239065b7c3b0282089050837f1d4d8ec291e720db200fe6d686c0d613acaf6af4e95d3bf69f7ed516a597b64683089150837f041294d2cc484d228f5784fe7919fd2bb925351240a04b711514c9c80b65af1d8408925083818180828009800909905062000f99600052620025ba565b837f154ac98e01708c611c4fa715991f004898f57939d126e392042971dd90e81fc682089050837f0b339d8acca7d4f83eedd84093aef51050b3684c88f8b0b04524563bc6ea4da483089150837f0955e49e6610c94254a4f84cfbab344598f0e71eaff4a7dd81ed95b50839c82e8408925083818180828009800909905062001024600052620025ba565b837f06746a6156eba54426b9e22206f15abca9a6f41e6f535c6f3525401ea065462682089050837f0f18f5a0ecd1423c496f3820c549c27838e5790e2bd0a196ac917c7ff32077fb83089150837f04f6eeca1751f7308ac59eff5beb261e4bb563583ede7bc92a738223d6f76e1384089250838181808280098009099050620010af600052620025ba565b837f2b56973364c4c4f5c1a3ec4da3cdce038811eb116fb3e45bc1768d26fc0b375882089050837f123769dd49d5b054dcd76b89804b1bcb8e1392b385716a5d83feb65d437f29ef83089150837f2147b424fc48c80a88ee52b91169aacea989f6446471150994257b2fb01c63e9840892508381818082800980090990506200113a600052620025ba565b837f0fdc1f58548b85701a6c5505ea332a29647e6f34ad4243c2ea54ad897cebe54d82089050837f12373a8251fea004df68abcf0f7786d4bceff28c5dbbe0c3944f685cc0a0b1f283089150837f21e4f4ea5f35f85bad7ea52ff742c9e8a642756b6af44203dd8a1f35c1a9003584089250838181808280098009099050620011c5600052620025ba565b837f16243916d69d2ca3dfb4722224d4c462b57366492f45e90d8a81934f1bc3b14782089050837f1efbe46dd7a578b4f66f9adbc88b4378abc21566e1a0453ca13a4159cac04ac283089150837f07ea5e8537cf5dd08886020e23a7f387d468d5525be66f853b672cc96a88969a8408925083818180828009800909905062001250600052620025ba565b837f05a8c4f9968b8aa3b7b478a30f9a5b63650f19a75e7ce11ca9fe16c0b76c00bc82089050837f20f057712cc21654fbfe59bd345e8dac3f7818c701b9c7882d9d57b72a32e83f83089150837f04a12ededa9dfd689672f8c67fee31636dcd8e88d01d49019bd90b33eb33db6984089250838181808280098009099050620012db600052620025ba565b837f27e88d8c15f37dcee44f1e5425a51decbd136ce5091a6767e49ec9544ccd101a82089050837f2feed17b84285ed9b8a5c8c5e95a41f66e096619a7703223176c41ee433de4d183089150837f1ed7cc76edf45c7c404241420f729cf394e5942911312a0d6972b8bd53aff2b88408925083818180828009800909905062001366600052620025ba565b837f15742e99b9bfa323157ff8c586f5660eac6783476144cdcadf2874be45466b1a82089050837f1aac285387f65e82c895fc6887ddf40577107454c6ec0317284f033f27d0c78583089150837f25851c3c845d4790f9ddadbdb6057357832e2e7a49775f71ec75a96554d67c7784089250838181808280098009099050620013f1600052620025ba565b837f15a5821565cc2ec2ce78457db197edf353b7ebba2c5523370ddccc3d9f146a6782089050837f2411d57a4813b9980efa7e31a1db5966dcf64f36044277502f15485f28c7172783089150837f002e6f8d6520cd4713e335b8c0b6d2e647e9a98e12f4cd2558828b5ef6cb4c9b840892508381818082800980090990506200147c600052620025ba565b837f2ff7bc8f4380cde997da00b616b0fcd1af8f0e91e2fe1ed7398834609e0315d282089050837f00b9831b948525595ee02724471bcd182e9521f6b7bb68f1e93be4febb0d3cbe83089150837f0a2f53768b8ebf6a86913b0e57c04e011ca408648a4743a87d77adbf0c9c35128408925083818180828009800909905062001507600052620025ba565b837f00248156142fd0373a479f91ff239e960f599ff7e94be69b7f2a290305e1198d82089050837f171d5620b87bfb1328cf8c02ab3f0c9a397196aa6a542c2350eb512a2b2bcda983089150837f170a4f55536f7dc970087c7c10d6fad760c952172dd54dd99d1045e4ec34a8088408925083818180828009800909905062001592600052620025ba565b837f29aba33f799fe66c2ef3134aea04336ecc37e38c1cd211ba482eca17e2dbfae182089050837f1e9bc179a4fdd758fdd1bb1945088d47e70d114a03f6a0e8b5ba650369e6497383089150837f1dd269799b660fad58f7f4892dfb0b5afeaad869a9c4b44f9c9e1c43bdaf8f09840892508381818082800980090990506200161d600052620025ba565b837f22cdbc8b70117ad1401181d02e15459e7ccd426fe869c7c95d1dd2cb0f24af3882089050837f0ef042e454771c533a9f57a55c503fcefd3150f52ed94a7cd5ba93b9c7dacefd83089150837f11609e06ad6c8fe2f287f3036037e8851318e8b08a0359a03b304ffca62e828484089250838181808280098009099050620016a8600052620025ba565b837f1166d9e554616dba9e753eea427c17b7fecd58c076dfe42708b08f5b783aa9af82089050837f2de52989431a859593413026354413db177fbf4cd2ac0b56f855a888357ee46683089150837f3006eb4ffc7a85819a6da492f3a8ac1df51aee5b17b8e89d74bf01cf5f71e9ad8408925083818180828009800909905062001733600052620025ba565b837f2af41fbb61ba8a80fdcf6fff9e3f6f422993fe8f0a4639f962344c822514508682089050837f119e684de476155fe5a6b41a8ebc85db8718ab27889e85e781b214bace4827c383089150837f1835b786e2e8925e188bea59ae363537b51248c23828f047cff784b97b3fd80084089250838181808280098009099050620017be600052620025ba565b837f28201a34c594dfa34d794996c6433a20d152bac2a7905c926c40e285ab32eeb682089050837f083efd7a27d1751094e80fefaf78b000864c82eb571187724a761f88c22cc4e783089150837f0b6f88a3577199526158e61ceea27be811c16df7774dd8519e079564f61fd13b8408925083818180828009800909905062001849600052620025ba565b837f0ec868e6d15e51d9644f66e1d6471a94589511ca00d29e1014390e6ee4254f5b82089050837f2af33e3f866771271ac0c9b3ed2e1142ecd3e74b939cd40d00d937ab84c9859183089150837f0b520211f904b5e7d09b5d961c6ace7734568c547dd6858b364ce5e47951f17884089250838181808280098009099050620018d4600052620025ba565b837f0b2d722d0919a1aad8db58f10062a92ea0c56ac4270e822cca228620188a1d4082089050837f1f790d4d7f8cf094d980ceb37c2453e957b54a9991ca38bbe0061d1ed6e562d483089150837f0171eb95dfbf7d1eaea97cd385f780150885c16235a2a6a8da92ceb01e504233840892508381818082800980090990506200195f600052620025ba565b837f0c2d0e3b5fd57549329bf6885da66b9b790b40defd2c8650762305381b16887382089050837f1162fb28689c27154e5a8228b4e72b377cbcafa589e283c35d3803054407a18d83089150837f2f1459b65dee441b64ad386a91e8310f282c5a92a89e19921623ef8249711bc084089250838181808280098009099050620019ea600052620025ba565b837f1e6ff3216b688c3d996d74367d5cd4c1bc489d46754eb712c243f70d1b53cfbb82089050837f01ca8be73832b8d0681487d27d157802d741a6f36cdc2a0576881f932647887583089150837f1f7735706ffe9fc586f976d5bdf223dc680286080b10cea00b9b5de315f9650e8408925083818180828009800909905062001a75600052620025ba565b837f2522b60f4ea3307640a0c2dce041fba921ac10a3d5f096ef4745ca838285f01982089050837f23f0bee001b1029d5255075ddc957f833418cad4f52b6c3f8ce16c235572575b83089150837f2bc1ae8b8ddbb81fcaac2d44555ed5685d142633e9df905f66d9401093082d598408925083818180828009800909905062001b00600052620025ba565b837f0f9406b8296564a37304507b8dba3ed162371273a07b1fc98011fcd6ad72205f82089050837f2360a8eb0cc7defa67b72998de90714e17e75b174a52ee4acb126c8cd995f0a883089150837f15871a5cddead976804c803cbaef255eb4815a5e96df8b006dcbbc2767f889488408925083818180828009800909905062001b8b600052620025ba565b837f193a56766998ee9e0a8652dd2f3b1da0362f4f54f72379544f957ccdeefb420f82089050837f2a394a43934f86982f9be56ff4fab1703b2e63c8ad334834e4309805e777ae0f83089150837f1859954cfeb8695f3e8b635dcb345192892cd11223443ba7b4166e8876c0d1428408925083818180828009800909905062001c16600052620025ba565b837f04e1181763050e58013444dbcb99f1902b11bc25d90bbdca408d3819f4fed32b82089050837f0fdb253dee83869d40c335ea64de8c5bb10eb82db08b5e8b1f5e5552bfd05f2383089150837f058cbe8a9a5027bdaa4efb623adead6275f08686f1c08984a9d7c5bae9b4f1c08408925083818180828009800909905062001ca1600052620025ba565b837f1382edce9971e186497eadb1aeb1f52b23b4b83bef023ab0d15228b4cceca59a82089050837f03464990f045c6ee0819ca51fd11b0be7f61b8eb99f14b77e1e6634601d9e8b583089150837f23f7bfc8720dc296fff33b41f98ff83c6fcab4605db2eb5aaa5bc137aeb70a588408925083818180828009800909905062001d2c600052620025ba565b837f0a59a158e3eec2117e6e94e7f0e9decf18c3ffd5e1531a9219636158bbaf62f282089050837f06ec54c80381c052b58bf23b312ffd3ce2c4eba065420af8f4c23ed0075fd07b83089150837f118872dc832e0eb5476b56648e867ec8b09340f7a7bcb1b4962f0ff9ed1f9d018408925083818180828009800909905062001db7600052620025ba565b837f13d69fa127d834165ad5c7cba7ad59ed52e0b0f0e42d7fea95e1906b520921b182089050837f169a177f63ea681270b1c6877a73d21bde143942fb71dc55fd8a49f19f10c77b83089150837f04ef51591c6ead97ef42f287adce40d93abeb032b922f66ffb7e9a5a7450544d8408925083818180828009800909905062001e42600052620025ba565b837f256e175a1dc079390ecd7ca703fb2e3b19ec61805d4f03ced5f45ee6dd0f69ec82089050837f30102d28636abd5fe5f2af412ff6004f75cc360d3205dd2da002813d3e2ceeb283089150837f10998e42dfcd3bbf1c0714bc73eb1bf40443a3fa99bef4a31fd31be182fcc7928408925083818180828009800909905062001ecd600052620025ba565b837f193edd8e9fcf3d7625fa7d24b598a1d89f3362eaf4d582efecad76f879e3686082089050837f18168afd34f2d915d0368ce80b7b3347d1c7a561ce611425f2664d7aa51f0b5d83089150837f29383c01ebd3b6ab0c017656ebe658b6a328ec77bc33626e29e2e95b33ea61118408925083818180828009800909905062001f58600052620025ba565b837f10646d2f2603de39a1f4ae5e7771a64a702db6e86fb76ab600bf573f9010c71182089050837f0beb5e07d1b27145f575f1395a55bf132f90c25b40da7b3864d0242dcb1117fb83089150837f16d685252078c133dc0d3ecad62b5c8830f95bb2e54b59abdffbf018d96fa3368408925083818180828009800909905062001fe3600052620025ba565b837f0a6abd1d833938f33c74154e0404b4b40a555bbbec21ddfafd672dd62047f01a82089050837f1a679f5d36eb7b5c8ea12a4c2dedc8feb12dffeec450317270a6f19b34cf186083089150837f0980fb233bd456c23974d50e0ebfde4726a423eada4e8f6ffbc7592e3f1b93d6840892508381818082800980090990506200206e600052620025ba565b837f161b42232e61b84cbf1810af93a38fc0cece3d5628c9282003ebacb5c312c72b82089050837f0ada10a90c7f0520950f7d47a60d5e6a493f09787f1564e5d09203db47de1a0b83089150837f1a730d372310ba82320345a29ac4238ed3f07a8a2b4e121bb50ddb9af407f45184089250838181808280098009099050620020f9600052620025ba565b837f2c8120f268ef054f817064c369dda7ea908377feaba5c4dffbda10ef58e8c55682089050837f1c7c8824f758753fa57c00789c684217b930e95313bcb73e6e7b8649a4968f7083089150837f2cd9ed31f5f8691c8e39e4077a74faa0f400ad8b491eb3f7b47b27fa3fd1cf778408925083818180828009800909905062002184600052620025ba565b837f23ff4f9d46813457cf60d92f57618399a5e022ac321ca550854ae23918a22eea82089050837f09945a5d147a4f66ceece6405dddd9d0af5a2c5103529407dff1ea58f180426d83089150837f188d9c528025d4c2b67660c6b771b90f7c7da6eaa29d3f268a6dd223ec6fc630840892508381818082800980090990506200220f600052620025ba565b837f3050e37996596b7f81f68311431d8734dba7d926d3633595e0c0d8ddf4f0f47f82089050837f15af1169396830a91600ca8102c35c426ceae5461e3f95d89d829518d30afd7883089150837f1da6d09885432ea9a06d9f37f873d985dae933e351466b2904284da3320d8acc840892508381818082800980090990506200229a600052620025ba565b837f2796ea90d269af29f5f8acf33921124e4e4fad3dbe658945e546ee411ddaa9cb82089050837f202d7dd1da0f6b4b0325c8b3307742f01e15612ec8e9304a7cb0319e01d32d6083089150837f096d6790d05bb759156a952ba263d672a2d7f9c788f4c831a29dace4c0f8be5f8408925083818180828009800909905062002325600052620025ba565b837f054efa1f65b0fce283808965275d877b438da23ce5b13e1963798cb1447d25a482089050837f1b162f83d917e93edb3308c29802deb9d8aa690113b2e14864ccf6e18e4165f183089150837f21e5241e12564dd6fd9f1cdd2a0de39eedfefc1466cc568ec5ceb745a0506edc84089250838181808280098009099050838281808280098009099150838381808280098009099250620023c8600052620025ba565b837f1cfb5662e8cf5ac9226a80ee17b36abecb73ab5f87e161927b4349e10e4bdf0882089050837f0f21177e302a771bbae6d8d1ecb373b62c99af346220ac0129c53f666eb2410083089150837f1671522374606992affb0dd7f71b12bec4236aede6290546bcef7e1f515c2320840892508381818082800980090990508382818082800980090991508383818082800980090992506200246b600052620025ba565b837f0fa3ec5b9488259c2eb4cf24501bfad9be2ec9e42c5cc8ccd419d2a692cad87082089050837f193c0e04e0bd298357cb266c1506080ed36edce85c648cc085e8c57b1ab54bba83089150837f102adf8ef74735a27e9128306dcbc3c99f6f7291cd406578ce14ea2adaba68f8840892508381818082800980090990508382818082800980090991508383818082800980090992506200250e600052620025ba565b837f0fe0af7858e49859e2a54d6f1ad945b1316aa24bfbdd23ae40a6d0cb70c3eab182089050837f216f6717bbc7dedb08536a2220843f4e2da5f1daa9ebdefde8a5ea7344798d2283089150837f1da55cc900f0d21f4a3e694391918a1b3c23b2ac773c6b3ef88e2e422832516184089250838181808280098009099050838281808280098009099150838381808280098009099250620025b1600052620025ba565b60005260206000f35b8360205182098460405184098591088460605185098591088460805183098560a05185098691088560c05186098691088560e0518409866101005186098791088661012051870987910894509250905060005156", + "key": "0xa3571888cfbca68776ab582afabed39268990974a4835e694b767474e2d63a4d" + }, + "0x0dcd1bf9a1b36ce34237eeafef220932846bcd82": { + "balance": "0", + "nonce": 1, + "root": "0x01a0734c0991c1696197736400dcab06ddff3d62f41c2dad4e768b7182adbabf", + "codeHash": "0x1f958654ab06a152993e7a0ae7b6dbb0d4b19265cc9337b8789fe1353bd9dc35", + "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106d9565b610224565b6100a86100a33660046106f4565b610296565b6040516100b59190610777565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106d9565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ea565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060b565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006106357fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038390556040805173ffffffffffffffffffffffffffffffffffffffff8084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d457600080fd5b919050565b6000602082840312156106eb57600080fd5b610412826106b0565b60008060006040848603121561070957600080fd5b610712846106b0565b9250602084013567ffffffffffffffff8082111561072f57600080fd5b818601915086601f83011261074357600080fd5b81358181111561075257600080fd5b87602082850101111561076457600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a457858101830151858201604001528201610788565b818111156107b6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "01", + "0x0000000000000000000000000000000000000000000000000000000000000098": "01", + "0x15607ed846111477865e6a5ae13858a7efc3144c7bcee5a06d87a3c693f53e7b": "01", + "0x223f14562f323bd7948caddd31987c85600c2817f2384e55c0c8839f3290e304": "01", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "99bba657f2bbc93c02d617f8ba121cb8fc104acf", + "0x7a9063cff4dcff21a2b2f1e67ae95f0c195c18b3b736c251a0911c20a1caaa57": "01", + "0x7bfc5f26b3cf6ec97010d4bb5190cf963125bb344dab3b14432f5b456f3be435": "01", + "0x7dc9f88e569f94faad6fa0d44dd44858caf3f34f1bd1c985800aedf5793aad8c": "5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5", + "0xa6869e09f0e61177cfe4ab5144e7c9f7d8b39aa2279dd8bab5aba69de54a74f7": "01", + "0xa7f0fe6b160f14839da5807e54d8be701aeb7039e18d9515384c8011270d6e78": "5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5", + "0xafe71ff1fe81c59ca16af21c02420893e650adae4948ece1623218f842885478": "5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5", + "0xb33a3829f2d1f31fd111fcd13892b72b93a782f7b93bf968903b15b040efa321": "5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "5fbdb2315678afecb367f032d93f642f64180aa3" + }, + "key": "0xc50ebb69c859ca3ea43ae77477b7cd716b304b912fc6cbed4066e2e43e858652" + }, + "0x1613beb3b2c4f22ee086b2b38c1476a3ce7f78e8": { + "balance": "0", + "nonce": 1, + "root": "0x1f6d4a6bd29feba7ce7b0aeb56e30f5d7718d9230959d0621e846e72f6d850c9", + "codeHash": "0xc3bad12c4f9a7738c21773eb6704b2b0dea0d59d3ee6bb212718cfcb8f3169c6", + "code": "0x608060405234801561001057600080fd5b50600436106101775760003560e01c8063c71973f6116100d8578063ed579ad31161008c578063f68016b711610066578063f68016b714610439578063fc7ffea71461044d578063ffa1ad741461046057600080fd5b8063ed579ad314610414578063f2fde38b1461041d578063f45e65d81461043057600080fd5b8063cc731b02116100bd578063cc731b02146102c4578063e81b2c6d146103f8578063ecdd939d1461040157600080fd5b8063c71973f61461029e578063c9b26f61146102b157600080fd5b806354fd4d501161012f5780638da5cb5b116101145780638da5cb5b1461025a578063935f029e14610278578063b40a817c1461028b57600080fd5b806354fd4d501461023d578063715018a61461025257600080fd5b80631fd19ee1116101605780631fd19ee1146101ad5780634add321d146101f55780634f16540b1461021657600080fd5b80630c18c1621461017c57806318d1391814610198575b600080fd5b61018560655481565b6040519081526020015b60405180910390f35b6101ab6101a636600461134e565b610468565b005b7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08545b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161018f565b6101fd61052c565b60405167ffffffffffffffff909116815260200161018f565b6101857f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b610245610557565b60405161018f91906113ea565b6101ab6105fa565b60335473ffffffffffffffffffffffffffffffffffffffff166101d0565b6101ab6102863660046113fd565b61060e565b6101ab610299366004611437565b6106a7565b6101ab6102ac36600461158f565b610778565b6101ab6102bf3660046115ab565b61078c565b6103886040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b60405161018f9190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61018560675481565b6101ab61040f3660046115ab565b6107bc565b610185606a5481565b6101ab61042b36600461134e565b61088a565b61018560665481565b6068546101fd9067ffffffffffffffff1681565b6101ab61045b3660046115c4565b610924565b610185600081565b610470610ba9565b610498817f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161052091906113ea565b60405180910390a35050565b6069546000906105529063ffffffff6a0100000000000000000000820481169116611670565b905090565b60606105827f0000000000000000000000000000000000000000000000000000000000000001610c10565b6105ab7f0000000000000000000000000000000000000000000000000000000000000000610c10565b6105d47f0000000000000000000000000000000000000000000000000000000000000000610c10565b6040516020016105e69392919061169c565b604051602081830303815290604052905090565b610602610ba9565b61060c6000610cce565b565b610616610ba9565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161069a91906113ea565b60405180910390a3505050565b6106af610ba9565b6106b761052c565b67ffffffffffffffff168167ffffffffffffffff16101561071f5760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064015b60405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831690811790915560408051602080820193909352815180820390930183528101905260026104ef565b610780610ba9565b61078981610d45565b50565b610794610ba9565b60678190556040805160208082018490528251808303909101815290820190915260006104ef565b6107c4610ba9565b6127108111156108625760405162461bcd60e51b815260206004820152604860248201527f53797374656d436f6e6669673a20746865206d61782076616c7565206f66207660448201527f616c696461746f7220726577617264207363616c617220686173206265656e2060648201527f6578636565646564000000000000000000000000000000000000000000000000608482015260a401610716565b606a8190556040805160208082018490528251808303909101815290820190915260046104ef565b610892610ba9565b73ffffffffffffffffffffffffffffffffffffffff811661091b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610716565b61078981610cce565b600054610100900460ff16158080156109445750600054600160ff909116105b8061095e5750303b15801561095e575060005460ff166001145b6109d05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610716565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610a2e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610a36611137565b610a3f8961088a565b606588905560668790556067869055606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff87161790557f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08849055610aaf83610d45565b610ab761052c565b67ffffffffffffffff168567ffffffffffffffff161015610b1a5760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610716565b606a8290558015610b8257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60335473ffffffffffffffffffffffffffffffffffffffff16331461060c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610716565b60606000610c1d836111bc565b600101905060008167ffffffffffffffff811115610c3d57610c3d611452565b6040519080825280601f01601f191660200182016040528015610c67576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084610c7157509392505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115610ddb5760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610716565b6001816040015160ff1611610e585760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e203100000000000000000000000000000000006064820152608401610716565b6068546080820151825167ffffffffffffffff90921691610e799190611712565b63ffffffff161115610ecd5760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610716565b6000816020015160ff1611610f4a5760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610716565b8051602082015163ffffffff82169160ff90911690610f6a908290611731565b610f74919061177b565b63ffffffff1614610fed5760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610716565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b600054610100900460ff166111b45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610716565b61060c61129f565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611205577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611231576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061124f57662386f26fc10000830492506010015b6305f5e1008310611267576305f5e100830492506008015b612710831061127b57612710830492506004015b6064831061128d576064830492506002015b600a8310611299576001015b92915050565b600054610100900460ff1661131c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610716565b61060c33610cce565b803573ffffffffffffffffffffffffffffffffffffffff8116811461134957600080fd5b919050565b60006020828403121561136057600080fd5b61136982611325565b9392505050565b60005b8381101561138b578181015183820152602001611373565b8381111561139a576000848401525b50505050565b600081518084526113b8816020860160208601611370565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061136960208301846113a0565b6000806040838503121561141057600080fd5b50508035926020909101359150565b803567ffffffffffffffff8116811461134957600080fd5b60006020828403121561144957600080fd5b6113698261141f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b803563ffffffff8116811461134957600080fd5b803560ff8116811461134957600080fd5b80356fffffffffffffffffffffffffffffffff8116811461134957600080fd5b600060c082840312156114d857600080fd5b60405160c0810181811067ffffffffffffffff82111715611522577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290508061153183611481565b815261153f60208401611495565b602082015261155060408401611495565b604082015261156160608401611481565b606082015261157260808401611481565b608082015261158360a084016114a6565b60a08201525092915050565b600060c082840312156115a157600080fd5b61136983836114c6565b6000602082840312156115bd57600080fd5b5035919050565b6000806000806000806000806101a0898b0312156115e157600080fd5b6115ea89611325565b975060208901359650604089013595506060890135945061160d60808a0161141f565b935061161b60a08a01611325565b925061162a8a60c08b016114c6565b915061018089013590509295985092959890939650565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851680830382111561169357611693611641565b01949350505050565b600084516116ae818460208901611370565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516116ea816001850160208a01611370565b60019201918201528351611705816002840160208801611370565b0160020195945050505050565b600063ffffffff80831681851680830382111561169357611693611641565b600063ffffffff8084168061176f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161561179e5761179e611641565b0294935050505056fea164736f6c634300080f000a", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "01", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0dcd1bf9a1b36ce34237eeafef220932846bcd82", + "0x0000000000000000000000000000000000000000000000000000000000000065": "0834", + "0x0000000000000000000000000000000000000000000000000000000000000066": "0f4240", + "0x0000000000000000000000000000000000000000000000000000000000000067": "3c44cdddb6a900fa2b585dd299e03d12fa4293bc", + "0x0000000000000000000000000000000000000000000000000000000000000068": "01c9c380", + "0x0000000000000000000000000000000000000000000000000000000000000069": "ffffffffffffffffffffffffffffffff000f42403b9aca00080a01312d00", + "0x000000000000000000000000000000000000000000000000000000000000006a": "1388", + "0x65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08": "9965507d1a55bcc2695c58ba16fb37d819b0a4dc" + }, + "key": "0x0ca8700cbcfbb19114f6c493c0f446cb5554349ae166db6cd30363717639c13b" + }, + "0x2279b7a0a67db372996a5fab50d91eaa73d2ebe6": { + "balance": "0", + "nonce": 1, + "root": "0xdcb8bb08e9ca2969a8c8d71d038f8e20921c6648e015d72f82352cf3a97de669", + "codeHash": "0x1f958654ab06a152993e7a0ae7b6dbb0d4b19265cc9337b8789fe1353bd9dc35", + "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106d9565b610224565b6100a86100a33660046106f4565b610296565b6040516100b59190610777565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106d9565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ea565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060b565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006106357fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038390556040805173ffffffffffffffffffffffffffffffffffffffff8084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d457600080fd5b919050565b6000602082840312156106eb57600080fd5b610412826106b0565b60008060006040848603121561070957600080fd5b610712846106b0565b9250602084013567ffffffffffffffff8082111561072f57600080fd5b818601915086601f83011261074357600080fd5b81358181111561075257600080fd5b87602082850101111561076457600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a457858101830151858201604001528201610788565b818111156107b6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", + "storage": { + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "322813fd9a801c5507c9de605d63cea4f2ce6c44", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "5fbdb2315678afecb367f032d93f642f64180aa3" + }, + "key": "0x228e1b4e1a077e8fe2073d2aea60505de76d541f0ccda8c233c439c27b0c341e" + }, + "0x322813fd9a801c5507c9de605d63cea4f2ce6c44": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x5c3264bb93210a67cf07be18db9df1c30b100548a313f5a8cd0006418195c451", + "code": "0x60806040523480156200001157600080fd5b5060043610620000465760003560e01c80635269aa1b146200004b57806354fd4d50146200008c578063ee9a31a214620000a5575b600080fd5b620000626200005c3660046200057d565b620000cd565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200009662000233565b60405162000083919062000693565b620000627f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f81565b600073ffffffffffffffffffffffffffffffffffffffff841662000177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f4b726f6d614d696e7461626c654552433230466163746f72793a206d7573742060448201527f70726f766964652072656d6f746520746f6b656e206164647265737300000000606482015260840160405180910390fd5b60007f0000000000000000000000000165878a594ca255338adfa4d48449f69242eb8f858585604051620001ab906200048d565b620001ba9493929190620006af565b604051809103906000f080158015620001d7573d6000803e3d6000fd5b5060405133815290915073ffffffffffffffffffffffffffffffffffffffff80871691908316907f16f14001f89df9d8ecc68e7cbb61373ece9025038b9df30bea3635fc0e4701a99060200160405180910390a3949350505050565b6060620002607f0000000000000000000000000000000000000000000000000000000000000001620002de565b6200028b7f0000000000000000000000000000000000000000000000000000000000000000620002de565b620002b67f0000000000000000000000000000000000000000000000000000000000000000620002de565b604051602001620002ca9392919062000709565b604051602081830303815290604052905090565b60606000620002ed83620003a3565b600101905060008167ffffffffffffffff8111156200031057620003106200049b565b6040519080825280601f01601f1916602001820160405280156200033b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846200034557509392505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310620003ed577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106200041a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106200043957662386f26fc10000830492506010015b6305f5e100831062000452576305f5e100830492506008015b61271083106200046757612710830492506004015b606483106200047a576064830492506002015b600a831062000487576001015b92915050565b611732806200078683390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112620004dc57600080fd5b813567ffffffffffffffff80821115620004fa57620004fa6200049b565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156200054357620005436200049b565b816040528381528660208588010111156200055d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156200059357600080fd5b833573ffffffffffffffffffffffffffffffffffffffff81168114620005b857600080fd5b9250602084013567ffffffffffffffff80821115620005d657600080fd5b620005e487838801620004ca565b93506040860135915080821115620005fb57600080fd5b506200060a86828701620004ca565b9150509250925092565b60005b838110156200063157818101518382015260200162000617565b8381111562000641576000848401525b50505050565b600081518084526200066181602086016020860162000614565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000620006a8602083018462000647565b9392505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152620006ea608083018562000647565b8281036060840152620006fe818562000647565b979650505050505050565b600084516200071d81846020890162000614565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516200075b816001850160208a0162000614565b600192019182015283516200077881600284016020880162000614565b016002019594505050505056fe6101206040523480156200001257600080fd5b50604051620017323803806200173283398101604081905262000035916200016d565b6001600080848460036200004a83826200028c565b5060046200005982826200028c565b50505060809290925260a05260c05250506001600160a01b0390811660e052166101005262000358565b80516001600160a01b03811681146200009b57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000c857600080fd5b81516001600160401b0380821115620000e557620000e5620000a0565b604051601f8301601f19908116603f01168101908282118183101715620001105762000110620000a0565b816040528381526020925086838588010111156200012d57600080fd5b600091505b8382101562000151578582018301518183018401529082019062000132565b83821115620001635760008385830101525b9695505050505050565b600080600080608085870312156200018457600080fd5b6200018f8562000083565b93506200019f6020860162000083565b60408601519093506001600160401b0380821115620001bd57600080fd5b620001cb88838901620000b6565b93506060870151915080821115620001e257600080fd5b50620001f187828801620000b6565b91505092959194509250565b600181811c908216806200021257607f821691505b6020821081036200023357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200028757600081815260208120601f850160051c81016020861015620002625750805b601f850160051c820191505b8181101562000283578281556001016200026e565b5050505b505050565b81516001600160401b03811115620002a857620002a8620000a0565b620002c081620002b98454620001fd565b8462000239565b602080601f831160018114620002f85760008415620002df5750858301515b600019600386901b1c1916600185901b17855562000283565b600085815260208120601f198616915b82811015620003295788860151825594840194600190910190840162000308565b5085821015620003485787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051611387620003ab600039600081816102e2015281816104d601526106960152600061014d01526000610625015260006105fc015260006105d301526113876000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806340c10f19116100b25780639dc29fac11610081578063a9059cbb11610066578063a9059cbb14610284578063dd62ed3e14610297578063ee9a31a2146102dd57600080fd5b80639dc29fac1461025e578063a457c2d71461027157600080fd5b806340c10f191461020357806354fd4d501461021857806370a082311461022057806395d89b411461025657600080fd5b806318160ddd116100ee57806318160ddd146101bc57806323b872dd146101ce578063313ce567146101e157806339509351146101f057600080fd5b806301ffc9a714610120578063033964be1461014857806306fdde0314610194578063095ea7b3146101a9575b600080fd5b61013361012e3660046110a0565b610304565b60405190151581526020015b60405180910390f35b61016f7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161013f565b61019c6103a4565b60405161013f9190611115565b6101336101b736600461118f565b610436565b6002545b60405190815260200161013f565b6101336101dc3660046111b9565b61044e565b6040516012815260200161013f565b6101336101fe36600461118f565b610472565b61021661021136600461118f565b6104be565b005b61019c6105cc565b6101c061022e3660046111f5565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61019c61066f565b61021661026c36600461118f565b61067e565b61013361027f36600461118f565b61077b565b61013361029236600461118f565b610832565b6101c06102a5366004611210565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61016f7f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007f30a0c5a9000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000841682148061039c57507fffffffff00000000000000000000000000000000000000000000000000000000848116908216145b949350505050565b6060600380546103b390611243565b80601f01602080910402602001604051908101604052809291908181526020018280546103df90611243565b801561042c5780601f106104015761010080835404028352916020019161042c565b820191906000526020600020905b81548152906001019060200180831161040f57829003601f168201915b5050505050905090565b600033610444818585610840565b5060019392505050565b60003361045c8582856109c0565b610467858585610a7d565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061044490829086906104b9908790611296565b610840565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461056e5760405162461bcd60e51b815260206004820152603160248201527f4b726f6d614d696e7461626c6545524332303a206f6e6c79206272696467652060448201527f63616e206d696e7420616e64206275726e00000000000000000000000000000060648201526084015b60405180910390fd5b6105788282610c9e565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885826040516105c091815260200190565b60405180910390a25050565b60606105f77f0000000000000000000000000000000000000000000000000000000000000000610d77565b6106207f0000000000000000000000000000000000000000000000000000000000000000610d77565b6106497f0000000000000000000000000000000000000000000000000000000000000000610d77565b60405160200161065b939291906112d5565b604051602081830303815290604052905090565b6060600480546103b390611243565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146107295760405162461bcd60e51b815260206004820152603160248201527f4b726f6d614d696e7461626c6545524332303a206f6e6c79206272696467652060448201527f63616e206d696e7420616e64206275726e0000000000000000000000000000006064820152608401610565565b6107338282610e35565b8173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040516105c091815260200190565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156108255760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610565565b6104678286868403610840565b600033610444818585610a7d565b73ffffffffffffffffffffffffffffffffffffffff83166108c85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610565565b73ffffffffffffffffffffffffffffffffffffffff82166109515760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610565565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a775781811015610a6a5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610565565b610a778484848403610840565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b065760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610565565b73ffffffffffffffffffffffffffffffffffffffff8216610b8f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610565565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610c2b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610565565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610a77565b73ffffffffffffffffffffffffffffffffffffffff8216610d015760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610565565b8060026000828254610d139190611296565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60606000610d8483610fbd565b600101905060008167ffffffffffffffff811115610da457610da461134b565b6040519080825280601f01601f191660200182016040528015610dce576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084610dd857509392505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ebe5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610565565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610f5a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610565565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016109b3565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611006577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611032576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061105057662386f26fc10000830492506010015b6305f5e1008310611068576305f5e100830492506008015b612710831061107c57612710830492506004015b6064831061108e576064830492506002015b600a831061109a576001015b92915050565b6000602082840312156110b257600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146110e257600080fd5b9392505050565b60005b838110156111045781810151838201526020016110ec565b83811115610a775750506000910152565b60208152600082518060208401526111348160408501602087016110e9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461118a57600080fd5b919050565b600080604083850312156111a257600080fd5b6111ab83611166565b946020939093013593505050565b6000806000606084860312156111ce57600080fd5b6111d784611166565b92506111e560208501611166565b9150604084013590509250925092565b60006020828403121561120757600080fd5b6110e282611166565b6000806040838503121561122357600080fd5b61122c83611166565b915061123a60208401611166565b90509250929050565b600181811c9082168061125757607f821691505b602082108103611290577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082198211156112d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b600084516112e78184602089016110e9565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611323816001850160208a016110e9565b6001920191820152835161133e8160028401602088016110e9565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000aa164736f6c634300080f000a", + "key": "0x2534d5cf18dc003706807fe440cab5aca30a915a6b5ccee4fb97946dc7ecd7cd" + }, + "0x3aa5ebb10dc797cac828524e59a333d0a371443c": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x31f64bb018006f5ca74dcafea62b374f1e38aa97fc90423b1fda478870486ec4", + "code": "0x6080604052600436106100b55760003560e01c80637f46ddb2116100695780638f601f661161004e5780638f601f6614610264578063927ede2d146102a7578063e11013dd146102db57600080fd5b80637f46ddb2146101eb578063870876231461024457600080fd5b80631635f5fd1161009a5780631635f5fd1461018d578063540abf73146101a057806354fd4d50146101c057600080fd5b80630166a07a1461015a57806309fc88431461017a57600080fd5b3661015557333b156101345760405162461bcd60e51b815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61015333333462030d40604051806020016040528060008152506102ee565b005b600080fd5b34801561016657600080fd5b50610153610175366004611b82565b610513565b610153610188366004611c33565b61090f565b61015361019b366004611c86565b6109cc565b3480156101ac57600080fd5b506101536101bb366004611cf9565b610e46565b3480156101cc57600080fd5b506101d5610e94565b6040516101e29190611de6565b60405180910390f35b3480156101f757600080fd5b5061021f7f000000000000000000000000420000000000000000000000000000000000000981565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e2565b34801561025057600080fd5b5061015361025f366004611df9565b610f37565b34801561027057600080fd5b5061029961027f366004611e7c565b600060208181529281526040808220909352908152205481565b6040519081526020016101e2565b3480156102b357600080fd5b5061021f7f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570781565b6101536102e9366004611eb5565b610ff1565b8234146103635760405162461bcd60e51b815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161012b565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af585846040516103c2929190611f18565b60405180910390a37f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570773ffffffffffffffffffffffffffffffffffffffff16633dbb202b847f0000000000000000000000004200000000000000000000000000000000000009631635f5fd60e01b898989886040516024016104479493929190611f31565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526104da92918890600401611f7a565b6000604051808303818588803b1580156104f357600080fd5b505af1158015610507573d6000803e3d6000fd5b50505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f8757071614801561063157507f000000000000000000000000420000000000000000000000000000000000000973ffffffffffffffffffffffffffffffffffffffff167f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570773ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106199190611fbf565b73ffffffffffffffffffffffffffffffffffffffff16145b6106c95760405162461bcd60e51b815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161012b565b6106d28761103a565b15610806576106e1878761106c565b6107795760405162461bcd60e51b815260206004820152604760248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204b726f6d61204d696e7461626c65204552433230206c6f636160648201527f6c20746f6b656e00000000000000000000000000000000000000000000000000608482015260a40161012b565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b50505050610884565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260208181526040808320938a168352929052205461084290849061200b565b73ffffffffffffffffffffffffffffffffffffffff808916600081815260208181526040808320948c1683529390529190912091909155610884908585611113565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd878787876040516108fe949392919061206b565b60405180910390a450505050505050565b333b156109845760405162461bcd60e51b815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161012b565b6109c73333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506102ee92505050565b505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570716148015610aea57507f000000000000000000000000420000000000000000000000000000000000000973ffffffffffffffffffffffffffffffffffffffff167f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570773ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad29190611fbf565b73ffffffffffffffffffffffffffffffffffffffff16145b610b825760405162461bcd60e51b815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161012b565b823414610bf75760405162461bcd60e51b815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161012b565b3073ffffffffffffffffffffffffffffffffffffffff851603610c825760405162461bcd60e51b815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161012b565b7f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d435760405162461bcd60e51b815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161012b565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d858585604051610da4939291906120a1565b60405180910390a36000610dc9855a86604051806020016040528060008152506111e7565b905080610e3e5760405162461bcd60e51b815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161012b565b505050505050565b610e8b87873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061120392505050565b50505050505050565b6060610ebf7f000000000000000000000000000000000000000000000000000000000000000161159e565b610ee87f000000000000000000000000000000000000000000000000000000000000000061159e565b610f117f000000000000000000000000000000000000000000000000000000000000000061159e565b604051602001610f23939291906120c4565b604051602081830303815290604052905090565b333b15610fac5760405162461bcd60e51b815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161012b565b610e3e86863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061120392505050565b6110343385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506102ee92505050565b50505050565b6000611066827f30a0c5a90000000000000000000000000000000000000000000000000000000061165c565b92915050565b60008273ffffffffffffffffffffffffffffffffffffffff1663033964be6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dd9190611fbf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614905092915050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109c79084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261167f565b600080600080845160208601878a8af19150505b949350505050565b61120c8761103a565b156113405761121b878761106c565b6112b35760405162461bcd60e51b815260206004820152604760248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204b726f6d61204d696e7461626c65204552433230206c6f636160648201527f6c20746f6b656e00000000000000000000000000000000000000000000000000608482015260a40161012b565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561132357600080fd5b505af1158015611337573d6000803e3d6000fd5b505050506113d0565b61136273ffffffffffffffffffffffffffffffffffffffff8816863086611774565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260208181526040808320938a168352929052205461139e90849061213a565b73ffffffffffffffffffffffffffffffffffffffff808916600090815260208181526040808320938b16835292905220555b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf87878660405161144893929190612152565b60405180910390a47f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570773ffffffffffffffffffffffffffffffffffffffff16633dbb202b7f0000000000000000000000004200000000000000000000000000000000000009630166a07a60e01b898b8a8a8a896040516024016114d096959493929190612187565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261156392918790600401611f7a565b600060405180830381600087803b15801561157d57600080fd5b505af1158015611591573d6000803e3d6000fd5b5050505050505050505050565b606060006115ab836117d2565b600101905060008167ffffffffffffffff8111156115cb576115cb6121e2565b6040519080825280601f01601f1916602001820160405280156115f5576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846115ff57509392505050565b6000611667836118b4565b801561167857506116788383611918565b9392505050565b60006116e1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166119e79092919063ffffffff16565b90508051600014806117025750808060200190518101906117029190612211565b6109c75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161012b565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526110349085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611165565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061181b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611847576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061186557662386f26fc10000830492506010015b6305f5e100831061187d576305f5e100830492506008015b612710831061189157612710830492506004015b606483106118a3576064830492506002015b600a83106110665760010192915050565b60006118e0827f01ffc9a700000000000000000000000000000000000000000000000000000000611918565b80156110665750611911827fffffffff00000000000000000000000000000000000000000000000000000000611918565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156119d0575060208210155b80156119dc5750600081115b979650505050505050565b60606111fb8484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051611a1b9190612233565b60006040518083038185875af1925050503d8060008114611a58576040519150601f19603f3d011682016040523d82523d6000602084013e611a5d565b606091505b50915091506119dc8783838760608315611ae5578251600003611ade5773ffffffffffffffffffffffffffffffffffffffff85163b611ade5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161012b565b50816111fb565b6111fb8383815115611afa5781518083602001fd5b8060405162461bcd60e51b815260040161012b9190611de6565b73ffffffffffffffffffffffffffffffffffffffff81168114611b3657600080fd5b50565b60008083601f840112611b4b57600080fd5b50813567ffffffffffffffff811115611b6357600080fd5b602083019150836020828501011115611b7b57600080fd5b9250929050565b600080600080600080600060c0888a031215611b9d57600080fd5b8735611ba881611b14565b96506020880135611bb881611b14565b95506040880135611bc881611b14565b94506060880135611bd881611b14565b93506080880135925060a088013567ffffffffffffffff811115611bfb57600080fd5b611c078a828b01611b39565b989b979a50959850939692959293505050565b803563ffffffff81168114611c2e57600080fd5b919050565b600080600060408486031215611c4857600080fd5b611c5184611c1a565b9250602084013567ffffffffffffffff811115611c6d57600080fd5b611c7986828701611b39565b9497909650939450505050565b600080600080600060808688031215611c9e57600080fd5b8535611ca981611b14565b94506020860135611cb981611b14565b935060408601359250606086013567ffffffffffffffff811115611cdc57600080fd5b611ce888828901611b39565b969995985093965092949392505050565b600080600080600080600060c0888a031215611d1457600080fd5b8735611d1f81611b14565b96506020880135611d2f81611b14565b95506040880135611d3f81611b14565b945060608801359350611d5460808901611c1a565b925060a088013567ffffffffffffffff811115611bfb57600080fd5b60005b83811015611d8b578181015183820152602001611d73565b838111156110345750506000910152565b60008151808452611db4816020860160208601611d70565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006116786020830184611d9c565b60008060008060008060a08789031215611e1257600080fd5b8635611e1d81611b14565b95506020870135611e2d81611b14565b945060408701359350611e4260608801611c1a565b9250608087013567ffffffffffffffff811115611e5e57600080fd5b611e6a89828a01611b39565b979a9699509497509295939492505050565b60008060408385031215611e8f57600080fd5b8235611e9a81611b14565b91506020830135611eaa81611b14565b809150509250929050565b60008060008060608587031215611ecb57600080fd5b8435611ed681611b14565b9350611ee460208601611c1a565b9250604085013567ffffffffffffffff811115611f0057600080fd5b611f0c87828801611b39565b95989497509550505050565b8281526040602082015260006111fb6040830184611d9c565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152611f706080830184611d9c565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000611fa96060830185611d9c565b905063ffffffff83166040830152949350505050565b600060208284031215611fd157600080fd5b815161167881611b14565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561201d5761201d611fdc565b500390565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000611f70606083018486612022565b8381526040602082015260006120bb604083018486612022565b95945050505050565b600084516120d6818460208901611d70565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612112816001850160208a01611d70565b6001920191820152835161212d816002840160208801611d70565b0160020195945050505050565b6000821982111561214d5761214d611fdc565b500190565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006120bb6060830184611d9c565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a08301526121d660c0830184611d9c565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561222357600080fd5b8151801515811461167857600080fd5b60008251612245818460208701611d70565b919091019291505056fea164736f6c634300080f000a", + "key": "0x7694289e56b3885be351656b2b6cd001557c52e00baa368c33676c4a1431e6dc" + }, + "0x3fab184622dc19b6109349b94811493bf2a45362": { + "balance": "993186900000000000", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "key": "0xde33f5554ba92b642b2295d39f4de663601655a65aa90577cfd665fdbe35db04" + }, + "0x4a679253410272dd5232b3ff7cf5dbb88f295319": { + "balance": "0", + "nonce": 1, + "root": "0xa7abcc6e1e344abdd761f5e3b08dfacd08b68a6533969baeeaf61e80fde624e4", + "codeHash": "0x5d5f5766ebbb91fa37aa87bd0998705f87442d57a9f8c43662ce38269aadf8d2", + "code": "0x6080604052600436106101955760003560e01c806370a08231116100e1578063ab91f1901161008a578063d38dc7ee11610064578063d38dc7ee146104de578063d8fe7642146104fe578063dd215c5d1461054e578063facd743b1461056e57600080fd5b8063ab91f19014610472578063b7d636a5146104a2578063d0e30db0146104d657600080fd5b80638f09ade4116100bb5780638f09ade414610409578063946765fd14610429578063a51c9ace1461045d57600080fd5b806370a08231146103885780638129fc1c146103be57806382dae3aa146103d357600080fd5b80633a549046116101435780635a5447421161011d5780635a5447421461031f5780635df6a6bc1461033f5780636641ea081461035457600080fd5b80633a549046146102b45780633ee4d4a3146102c957806354fd4d50146102fd57600080fd5b80632e1a7d4d116101745780632e1a7d4d1461023e578063360864171461026057806336b834691461029457600080fd5b80621c2ff61461019a5780630f43a677146101eb5780630ff754ea1461020a575b600080fd5b3480156101a657600080fd5b506101ce7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101f757600080fd5b506036545b6040519081526020016101e2565b34801561021657600080fd5b506101ce7f0000000000000000000000009fe46736679d2d9a65f0992f2272de9f3c7fa6e081565b34801561024a57600080fd5b5061025e6102593660046123de565b61059e565b005b34801561026c57600080fd5b506101ce7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b3480156102a057600080fd5b5061025e6102af36600461240c565b610654565b3480156102c057600080fd5b506101ce6108c5565b3480156102d557600080fd5b506101ce7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c881565b34801561030957600080fd5b50610312610a83565b6040516101e291906124c4565b34801561032b57600080fd5b5061025e61033a3660046124d7565b610b26565b34801561034b57600080fd5b5061025e610dcf565b34801561036057600080fd5b506101fc7f000000000000000000000000000000000000000000000000000000000000001081565b34801561039457600080fd5b506101fc6103a3366004612507565b6001600160a01b031660009081526033602052604090205490565b3480156103ca57600080fd5b5061025e610e4e565b3480156103df57600080fd5b506103e8601481565b6040516fffffffffffffffffffffffffffffffff90911681526020016101e2565b34801561041557600080fd5b506103e86104243660046124d7565b610fc5565b34801561043557600080fd5b506101fc7f000000000000000000000000000000000000000000000000000000000000000a81565b34801561046957600080fd5b506103e8606481565b34801561047e57600080fd5b50610489620186a081565b60405167ffffffffffffffff90911681526020016101e2565b3480156104ae57600080fd5b506103e87f000000000000000000000000000000000000000000000000000000000000000181565b61025e611074565b3480156104ea57600080fd5b5061025e6104f9366004612542565b611080565b34801561050a57600080fd5b5061051e6105193660046123de565b611359565b6040805182516fffffffffffffffffffffffffffffffff90811682526020938401511692810192909252016101e2565b34801561055a57600080fd5b5061025e6105693660046124d7565b611478565b34801561057a57600080fd5b5061058e610589366004612507565b6117de565b60405190151581526020016101e2565b6105a6611864565b6105b033826118bd565b60006105cd335a8460405180602001604052806000815250611b0f565b9050806106475760405162461bcd60e51b815260206004820152602260248201527f56616c696461746f72506f6f6c3a20455448207472616e73666572206661696c60448201527f656400000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5061065160018055565b50565b7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b0316639e45e8f46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d69190612567565b6001600160a01b0316336001600160a01b03161461075c5760405162461bcd60e51b815260206004820152602660248201527f56616c696461746f72506f6f6c3a2073656e646572206973206e6f7420436f6c60448201527f6f737365756d0000000000000000000000000000000000000000000000000000606482015260840161063e565b60008381526039602090815260408083206001600160a01b03861684529091529020546fffffffffffffffffffffffffffffffff16806108045760405162461bcd60e51b815260206004820152602e60248201527f56616c696461746f72506f6f6c3a207468652070656e64696e6720626f6e642060448201527f646f6573206e6f74206578697374000000000000000000000000000000000000606482015260840161063e565b60008481526039602090815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169055610868826fffffffffffffffffffffffffffffffff8316611b2f565b6040516fffffffffffffffffffffffffffffffff821681526001600160a01b03808416919085169086907f8c95336a279406edcc768d685e8eb6667368a77d840a188144b8e3719423198f9060200160405180910390a450505050565b6038546000906001600160a01b031615610a5e5760007f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b031663dcec33486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610939573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095d9190612584565b905060006001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91663d1de856c61099b8460016125cc565b6040518263ffffffff1660e01b81526004016109b991815260200190565b602060405180830381865afa1580156109d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fa9190612584565b9050804210610a4b576000610a0f82426125e4565b90507f0000000000000000000000000000000000000000000000000000000000000010811115610a49576001600160a01b03935050505090565b505b50506038546001600160a01b0316919050565b507f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c890565b6060610aae7f0000000000000000000000000000000000000000000000000000000000000001611c63565b610ad77f0000000000000000000000000000000000000000000000000000000000000000611c63565b610b007f0000000000000000000000000000000000000000000000000000000000000001611c63565b604051602001610b12939291906125fb565b604051602081830303815290604052905090565b7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b0316639e45e8f46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba89190612567565b6001600160a01b0316336001600160a01b031614610c2e5760405162461bcd60e51b815260206004820152602660248201527f56616c696461746f72506f6f6c3a2073656e646572206973206e6f7420436f6c60448201527f6f737365756d0000000000000000000000000000000000000000000000000000606482015260840161063e565b60008281526034602052604090208054427001000000000000000000000000000000009091046fffffffffffffffffffffffffffffffff161015610cda5760405162461bcd60e51b815260206004820152602e60248201527f56616c696461746f72506f6f6c3a20746865206f757470757420697320616c7260448201527f656164792066696e616c697a6564000000000000000000000000000000000000606482015260840161063e565b610d16827f00000000000000000000000000000000000000000000000000000000000000016fffffffffffffffffffffffffffffffff166118bd565b60008381526039602090815260408083206001600160a01b0386168085529083529281902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000016fffffffffffffffffffffffffffffffff16908117909155905190815285917f2904258f32adf74dd8f23ad6f17ff50209896039c8ee3d4728ff55bd05c4cf2a910160405180910390a3505050565b6000610dd9611d21565b9050806106515760405162461bcd60e51b815260206004820152602960248201527f56616c696461746f72506f6f6c3a206e6f20626f6e6420746861742063616e2060448201527f626520756e626f6e640000000000000000000000000000000000000000000000606482015260840161063e565b600054610100900460ff1615808015610e6e5750600054600160ff909116105b80610e885750303b158015610e88575060005460ff166001145b610efa5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161063e565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610f5857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610f60611f3f565b801561065157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b60008281526039602090815260408083206001600160a01b03851684529091528120546fffffffffffffffffffffffffffffffff168061106d5760405162461bcd60e51b815260206004820152602e60248201527f56616c696461746f72506f6f6c3a207468652070656e64696e6720626f6e642060448201527f646f6573206e6f74206578697374000000000000000000000000000000000000606482015260840161063e565b9392505050565b61107e3334611b2f565b565b336001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9161461111e5760405162461bcd60e51b815260206004820152602b60248201527f56616c696461746f72506f6f6c3a2073656e646572206973206e6f74204c324f60448201527f75747075744f7261636c65000000000000000000000000000000000000000000606482015260840161063e565b6000828152603460205260409020805470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16156111c75760405162461bcd60e51b815260206004820152603c60248201527f56616c696461746f72506f6f6c3a20626f6e64206f662074686520676976656e60448201527f206f757470757420696e64657820616c72656164792065786973747300000000606482015260840161063e565b6111cf611d21565b506040517fb0ea09a8000000000000000000000000000000000000000000000000000000008152600481018490526000907f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b03169063b0ea09a890602401602060405180830381865afa158015611251573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112759190612567565b90506112b3817f00000000000000000000000000000000000000000000000000000000000000016fffffffffffffffffffffffffffffffff166118bd565b7f00000000000000000000000000000000000000000000000000000000000000016fffffffffffffffffffffffffffffffff9081167001000000000000000000000000000000009185169182028117845560408051918252602082019290925285916001600160a01b038416917f5ca130257b8f76f72ad2965efcbe166f3918d820e4a49956e70081ea311f97c4910160405180910390a3611353611fbc565b50505050565b6040805180820190915260008082526020820152600082815260346020526040902080546fffffffffffffffffffffffffffffffff16158015906113c35750805470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1615155b6114355760405162461bcd60e51b815260206004820152602660248201527f56616c696461746f72506f6f6c3a2074686520626f6e6420646f6573206e6f7460448201527f2065786973740000000000000000000000000000000000000000000000000000606482015260840161063e565b6040805180820190915290546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000090910416602082015292915050565b7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b0316639e45e8f46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fa9190612567565b6001600160a01b0316336001600160a01b0316146115805760405162461bcd60e51b815260206004820152602660248201527f56616c696461746f72506f6f6c3a2073656e646572206973206e6f7420436f6c60448201527f6f737365756d0000000000000000000000000000000000000000000000000000606482015260840161063e565b60008281526034602052604090208054427001000000000000000000000000000000009091046fffffffffffffffffffffffffffffffff16101561162c5760405162461bcd60e51b815260206004820152602e60248201527f56616c696461746f72506f6f6c3a20746865206f757470757420697320616c7260448201527f656164792066696e616c697a6564000000000000000000000000000000000000606482015260840161063e565b60008381526039602090815260408083206001600160a01b03861684529091529020546fffffffffffffffffffffffffffffffff16806116d45760405162461bcd60e51b815260206004820152602e60248201527f56616c696461746f72506f6f6c3a207468652070656e64696e6720626f6e642060448201527f646f6573206e6f74206578697374000000000000000000000000000000000000606482015260840161063e565b600060646116e3601484612671565b6116ed91906126d8565b905060006116fb8284612707565b60008781526039602090815260408083206001600160a01b038a811680865291845282852080547fffffffffffffffffffffffffffffffff000000000000000000000000000000009081169091558a549081166fffffffffffffffffffffffffffffffff91821688018216178b557f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e9091168552603384529382902080548886160190559051928416835292935088917f383f9b8b5a1fc2ec555726eb895621a312042e18b764135fa12ef1a520ad30db910160405180910390a3505050505050565b60365460009081036117f257506000919050565b6001600160a01b03821661180857506000919050565b6001600160a01b038216600081815260376020526040902054603680549192918390811061183857611838612738565b6000918252602090912001546001600160a01b0316149392505050565b6001600160a01b03163b151590565b6002600154036118b65760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161063e565b6002600155565b6001600160a01b0382166000908152603360205260409020548181101561194b5760405162461bcd60e51b8152602060048201526024808201527f56616c696461746f72506f6f6c3a20696e73756666696369656e742062616c6160448201527f6e63657300000000000000000000000000000000000000000000000000000000606482015260840161063e565b61195582826125e4565b90507f00000000000000000000000000000000000000000000000000000000000000016fffffffffffffffffffffffffffffffff168110801561199c575061199c836117de565b15611aef576036546000906119b3906001906125e4565b90508015611a6b576001600160a01b03841660009081526037602052604081205460368054919291849081106119eb576119eb612738565b600091825260209091200154603680546001600160a01b039092169250829184908110611a1a57611a1a612738565b600091825260208083209190910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03948516179055929091168152603790915260409020555b6001600160a01b0384166000908152603760205260408120556036805480611a9557611a95612767565b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055505b6001600160a01b0390921660009081526033602052604090209190915550565b600080600080845160208601878a8af19695505050505050565b60018055565b6001600160a01b038216600090815260336020526040812054611b539083906125cc565b90507f00000000000000000000000000000000000000000000000000000000000000016fffffffffffffffffffffffffffffffff168110158015611b9d5750611b9b836117de565b155b15611aef577f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316836001600160a01b031614611aef57603680546001600160a01b03949094166000818152603760209081526040808320889055600188019094557f4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81b890960180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690921790915560339094529092209190915550565b60606000611c708361218a565b600101905060008167ffffffffffffffff811115611c9057611c90612796565b6040519080825280601f01601f191660200182016040528015611cba576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084611cc457509392505050565b60355460408051608081018252600080825260208201819052918101829052606081018290529091908290819060005b7f000000000000000000000000000000000000000000000000000000000000000a811015611f1c57600085815260346020526040902080546fffffffffffffffffffffffffffffffff80821696509194507001000000000000000000000000000000009004164210801590611dd857506000846fffffffffffffffffffffffffffffffff16115b15611f1c5760008581526034602052604080822091909155517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018690527f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b03169063a25ae55790602401608060405180830381865afa158015611e6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9091906127c5565b9150611eb28260000151856fffffffffffffffffffffffffffffffff16611b2f565b81516040516fffffffffffffffffffffffffffffffff861681526001600160a01b039091169086907f7047a0fb8bfae78c0ebbd4117437945bb85240453235ac4fd2e55712eb5bf0c39060200160405180910390a3611f108261226d565b60019485019401611d51565b8015611f3357505050603591909155506001919050565b60009550505050505090565b600054610100900460ff16611b295760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161063e565b6036548015801590611fd057506000603554115b1561215f5760007f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b031663a25ae557600160355461201591906125e4565b6040518263ffffffff1660e01b815260040161203391815260200190565b608060405180830381865afa158015612050573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207491906127c5565b9050600082826020015143414460014361208e91906125e4565b6040805160208101969096528501939093527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606092831b1691840191909152607483015240609482015260b4016040516020818303038152906040528051906020012060001c6120ff9190612868565b90506036818154811061211457612114612738565b600091825260209091200154603880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909216919091179055506106519050565b603880547fffffffffffffffffffffffff000000000000000000000000000000000000000016905550565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106121d3577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106121ff576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061221d57662386f26fc10000830492506010015b6305f5e1008310612235576305f5e100830492506008015b612710831061224957612710830492506004015b6064831061225b576064830492506002015b600a8310612267576001015b92915050565b805160608201516040516001600160a01b037f0000000000000000000000009fe46736679d2d9a65f0992f2272de9f3c7fa6e0169263c30af3889273420000000000000000000000000000000000000892620186a0927f21670f220000000000000000000000000000000000000000000000000000000092612317926024016001600160a01b039290921682526fffffffffffffffffffffffffffffffff16602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526123a993929160040161287c565b600060405180830381600087803b1580156123c357600080fd5b505af11580156123d7573d6000803e3d6000fd5b5050505050565b6000602082840312156123f057600080fd5b5035919050565b6001600160a01b038116811461065157600080fd5b60008060006060848603121561242157600080fd5b833592506020840135612433816123f7565b91506040840135612443816123f7565b809150509250925092565b60005b83811015612469578181015183820152602001612451565b838111156113535750506000910152565b6000815180845261249281602086016020860161244e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061106d602083018461247a565b600080604083850312156124ea57600080fd5b8235915060208301356124fc816123f7565b809150509250929050565b60006020828403121561251957600080fd5b813561106d816123f7565b6fffffffffffffffffffffffffffffffff8116811461065157600080fd5b6000806040838503121561255557600080fd5b8235915060208301356124fc81612524565b60006020828403121561257957600080fd5b815161106d816123f7565b60006020828403121561259657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156125df576125df61259d565b500190565b6000828210156125f6576125f661259d565b500390565b6000845161260d81846020890161244e565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612649816001850160208a0161244e565b6001920191820152835161266481600284016020880161244e565b0160020195945050505050565b60006fffffffffffffffffffffffffffffffff808316818516818304811182151516156126a0576126a061259d565b02949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006fffffffffffffffffffffffffffffffff808416806126fb576126fb6126a9565b92169190910492915050565b60006fffffffffffffffffffffffffffffffff838116908316818110156127305761273061259d565b039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000608082840312156127d757600080fd5b6040516080810181811067ffffffffffffffff82111715612821577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052825161282f816123f7565b815260208381015190820152604083015161284981612524565b6040820152606083015161285c81612524565b60608201529392505050565b600082612877576128776126a9565b500690565b6001600160a01b038416815267ffffffffffffffff831660208201526060604082015260006128ae606083018461247a565b9594505050505056fea164736f6c634300080f000a", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "01", + "0x0000000000000000000000000000000000000000000000000000000000000001": "01" + }, + "key": "0xc158f1c4ca002e59c1aa0ce71d03e1a6fcb8722608e7b0e397a3c94dcb96c4cd" + }, + "0x4e59b44847b379578588920ca78fbf26c0b4956c": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x2fa86add0aed31f33a762c9d88e807c475bd51d0f52bd0955754b2608f7e4989", + "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3", + "key": "0x491ded984cd17b1afee6ccb6ef366c53dd79f50b592816adc12e9302a9f2b36c" + }, + "0x59b670e9fa9d0a427751af201d676719a970857b": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x4d94ca785d19ba3826070e2dc147cefdabf19574000e917328cc7d9c92ea39e7", + "code": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063761f44931161005b578063761f4493146100f95780637f46ddb21461010c578063927ede2d14610158578063aa5574521461017f57600080fd5b80633687011a1461008257806354fd4d50146100975780635d93a3fc146100b5575b600080fd5b610095610090366004610dbd565b610192565b005b61009f61023e565b6040516100ac9190610eba565b60405180910390f35b6100e96100c3366004610ed4565b603160209081526000938452604080852082529284528284209052825290205460ff1681565b60405190151581526020016100ac565b610095610107366004610f15565b6102e1565b6101337f000000000000000000000000420000000000000000000000000000000000000a81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ac565b6101337f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570781565b61009561018d366004610fad565b610762565b333b15610226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b610236868633338888888861081e565b505050505050565b60606102697f0000000000000000000000000000000000000000000000000000000000000001610b95565b6102927f0000000000000000000000000000000000000000000000000000000000000000610b95565b6102bb7f0000000000000000000000000000000000000000000000000000000000000000610b95565b6040516020016102cd93929190611024565b604051602081830303815290604052905090565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f875707161480156103ff57507f000000000000000000000000420000000000000000000000000000000000000a73ffffffffffffffffffffffffffffffffffffffff167f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f87570773ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e7919061109a565b73ffffffffffffffffffffffffffffffffffffffff16145b61048b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f746865722062726964676500606482015260840161021d565b3073ffffffffffffffffffffffffffffffffffffffff881603610530576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c314552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c6600000000000000000000000000000000000000000000606482015260840161021d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152603160209081526040808320938a1683529281528282208683529052205460ff1615156001146105ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4c314552433732314272696467653a20546f6b656e204944206973206e6f742060448201527f657363726f77656420696e20746865204c312042726964676500000000000000606482015260840161021d565b73ffffffffffffffffffffffffffffffffffffffff87811660008181526031602090815260408083208b8616845282528083208884529091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152918616602483015260448201859052906342842e0e90606401600060405180830381600087803b1580156106bf57600080fd5b505af11580156106d3573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac878787876040516107519493929190611100565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516610805576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f74206265206164647265737328302900000000000000000000000000000000606482015260840161021d565b610815878733888888888861081e565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff87166108c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c314552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f742062652061646472657373283029000000000000000000000000000000606482015260840161021d565b600063761f449360e01b888a89898988886040516024016108e89796959493929190611140565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000959095169490941790935273ffffffffffffffffffffffffffffffffffffffff8c81166000818152603186528381208e8416825286528381208b82529095529382902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590517f23b872dd000000000000000000000000000000000000000000000000000000008152908a166004820152306024820152604481018890529092506323b872dd90606401600060405180830381600087803b158015610a2857600080fd5b505af1158015610a3c573d6000803e3d6000fd5b50506040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f875707169250633dbb202b9150610ad6907f000000000000000000000000420000000000000000000000000000000000000a908590899060040161119d565b600060405180830381600087803b158015610af057600080fd5b505af1158015610b04573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a589898888604051610b829493929190611100565b60405180910390a4505050505050505050565b60606000610ba283610c53565b600101905060008167ffffffffffffffff811115610bc257610bc26111e2565b6040519080825280601f01601f191660200182016040528015610bec576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084610bf657509392505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610c9c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610cc8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ce657662386f26fc10000830492506010015b6305f5e1008310610cfe576305f5e100830492506008015b6127108310610d1257612710830492506004015b60648310610d24576064830492506002015b600a8310610d30576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff81168114610d5857600080fd5b50565b803563ffffffff81168114610d6f57600080fd5b919050565b60008083601f840112610d8657600080fd5b50813567ffffffffffffffff811115610d9e57600080fd5b602083019150836020828501011115610db657600080fd5b9250929050565b60008060008060008060a08789031215610dd657600080fd5b8635610de181610d36565b95506020870135610df181610d36565b945060408701359350610e0660608801610d5b565b9250608087013567ffffffffffffffff811115610e2257600080fd5b610e2e89828a01610d74565b979a9699509497509295939492505050565b60005b83811015610e5b578181015183820152602001610e43565b83811115610e6a576000848401525b50505050565b60008151808452610e88816020860160208601610e40565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610ecd6020830184610e70565b9392505050565b600080600060608486031215610ee957600080fd5b8335610ef481610d36565b92506020840135610f0481610d36565b929592945050506040919091013590565b600080600080600080600060c0888a031215610f3057600080fd5b8735610f3b81610d36565b96506020880135610f4b81610d36565b95506040880135610f5b81610d36565b94506060880135610f6b81610d36565b93506080880135925060a088013567ffffffffffffffff811115610f8e57600080fd5b610f9a8a828b01610d74565b989b979a50959850939692959293505050565b600080600080600080600060c0888a031215610fc857600080fd5b8735610fd381610d36565b96506020880135610fe381610d36565b95506040880135610ff381610d36565b94506060880135935061100860808901610d5b565b925060a088013567ffffffffffffffff811115610f8e57600080fd5b60008451611036818460208901610e40565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611072816001850160208a01610e40565b6001920191820152835161108d816002840160208801610e40565b0160020195945050505050565b6000602082840312156110ac57600080fd5b8151610ecd81610d36565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff851681528360208201526060604082015260006111366060830184866110b7565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a083015261119060c0830184866110b7565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006111cc6060830185610e70565b905063ffffffff83166040830152949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a", + "key": "0x955b9191e283f55b64f3d7bbeacf7afa8b939366f402751f848ad0791681c7df" + }, + "0x5eb3bc0a489c5a8288765d2336659ebca68fcd00": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xa4d04d1c138f20172943265a74852a10e563db2bf538af0778d95c5ab6c6462a", + "code": "0x608060405234801561001057600080fd5b506004361061016c5760003560e01c80638b51d13f116100cd578063b77bf60011610081578063c01a8c8411610066578063c01a8c8414610390578063c6427474146103a3578063ee22610b146103b657600080fd5b8063b77bf60014610367578063b9774f7b1461037057600080fd5b80639ab24eb0116100b25780639ab24eb01461030a5780639ace38c21461031d5780639e45e8f41461034057600080fd5b80638b51d13f146102cb57806391ddadf4146102eb57600080fd5b806349ae963d116101245780636dc0ae22116101095780636dc0ae2214610222578063784547a71461026e5780638a8e784c1461028157600080fd5b806349ae963d146101fa57806354fd4d501461020d57600080fd5b80631703a018116101555780631703a0181461019957806320ea8d86146101b45780632a758595146101c757600080fd5b80630192337114610171578063080b91ee14610186575b600080fd5b61018461017f366004611c6c565b6103c9565b005b610184610194366004611d7b565b610607565b6101a1610703565b6040519081526020015b60405180910390f35b6101846101c2366004611dcb565b610986565b6101ea6101d5366004611dcb565b60396020526000908152604090205460ff1681565b60405190151581526020016101ab565b6101a1610208366004611e06565b610c68565b610215610d51565b6040516101ab9190611ebf565b6102497f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750881565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ab565b6101ea61027c366004611dcb565b610df4565b6101ea61028f366004611ed9565b600082815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845260010190915290205460ff1692915050565b6101a16102d9366004611dcb565b60009081526034602052604090205490565b6102f3610e18565b60405165ffffffffffff90911681526020016101ab565b6101a1610318366004611efe565b610f44565b61033061032b366004611dcb565b61106d565b6040516101ab9493929190611f1b565b6102497f000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad78881565b6101a160385481565b6101a161037e366004611dcb565b60346020526000908152604090205481565b61018461039e366004611dcb565b61114b565b6101a16103b1366004611e06565b6113ad565b6101846103c4366004611dcb565b611442565b3360006103d582610f44565b1161044d5760405162461bcd60e51b815260206004820152603b60248201527f546f6b656e4d756c746953696757616c6c65743a206f6e6c7920616c6c6f776560448201527f6420746f20676f7665726e616e636520746f6b656e206f776e6572000000000060648201526084015b60405180910390fd5b60008381526039602052604090205460ff1615806104685750815b6105015760405162461bcd60e51b8152602060048201526044602482018190527f5365637572697479436f756e63696c3a20746865206f75747075742068617320908201527f616c7265616479206265656e2072657175657374656420746f2062652064656c60648201527f6574656400000000000000000000000000000000000000000000000000000000608482015260a401610444565b6040805160248082018690528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe39a219c0000000000000000000000000000000000000000000000000000000017905260006105947f000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad78882846113ad565b905061059f8161114b565b60008581526039602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905551869183917fc63c84660a471a970585c7cab9d0601af8e717ff0822a2ea049a3542fc5aa55a9190a35050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad78816146106b25760405162461bcd60e51b815260206004820152603c60248201527f5365637572697479436f756e63696c3a206f6e6c792074686520636f6c6f737360448201527f65756d20636f6e74726163742063616e20626520612073656e646572000000006064820152608401610444565b60006106c0336000846117b0565b604080518681526020810186905291925082917eef5106e82a682c776fd7748be042f406a9ee0feaaea86ae9029477c2b91f2a910160405180910390a250505050565b6000806001610710610e18565b61071a9190611f91565b65ffffffffffff1690507f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750873ffffffffffffffffffffffffffffffffffffffff166397c3d3346040518163ffffffff1660e01b8152600401602060405180830381865afa15801561078f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b39190611fb8565b6040517f60c4247f000000000000000000000000000000000000000000000000000000008152600481018390527f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750873ffffffffffffffffffffffffffffffffffffffff16906360c4247f90602401602060405180830381865afa15801561083e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108629190611fb8565b7f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750873ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f19190611fd1565b73ffffffffffffffffffffffffffffffffffffffff16638e539e8c846040518263ffffffff1660e01b815260040161092b91815260200190565b602060405180830381865afa158015610948573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096c9190611fb8565b6109769190611fee565b610980919061202b565b91505090565b33600061099282610f44565b11610a055760405162461bcd60e51b815260206004820152603b60248201527f546f6b656e4d756c746953696757616c6c65743a206f6e6c7920616c6c6f776560448201527f6420746f20676f7665726e616e636520746f6b656e206f776e657200000000006064820152608401610444565b600082815260336020526040902054829073ffffffffffffffffffffffffffffffffffffffff16610a9e5760405162461bcd60e51b815260206004820152602f60248201527f546f6b656e4d756c746953696757616c6c65743a207472616e73616374696f6e60448201527f20646f6573206e6f7420657869737400000000000000000000000000000000006064820152608401610444565b600083815260336020526040902054839074010000000000000000000000000000000000000000900460ff1615610b3d5760405162461bcd60e51b815260206004820152602560248201527f546f6b656e4d756c746953696757616c6c65743a20616c72656164792065786560448201527f63757465640000000000000000000000000000000000000000000000000000006064820152608401610444565b600084815260346020908152604080832033845260010190915290205460ff16610bcf5760405162461bcd60e51b815260206004820152602660248201527f546f6b656e4d756c746953696757616c6c65743a206e6f7420636f6e6669726d60448201527f65642079657400000000000000000000000000000000000000000000000000006064820152608401610444565b60008481526034602090815260408083203380855260018201909352922080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055610c1c90610f44565b816000016000828254610c2f9190612066565b9091555050604051859033907f795394da21278ca39d59bb3ca00efeebdc0679acc420916c7385c2c5d942656f90600090a35050505050565b60008373ffffffffffffffffffffffffffffffffffffffff8116610cf45760405162461bcd60e51b815260206004820152602960248201527f546f6b656e4d756c746953696757616c6c65743a20616464726573732069732060448201527f6e6f742076616c696400000000000000000000000000000000000000000000006064820152608401610444565b848484610cff610e18565b604051602001610d12949392919061207d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012095945050505050565b6060610d7c7f00000000000000000000000000000000000000000000000000000000000000016119d7565b610da57f00000000000000000000000000000000000000000000000000000000000000016119d7565b610dce7f00000000000000000000000000000000000000000000000000000000000000006119d7565b604051602001610de0939291906120cb565b604051602081830303815290604052905090565b6000610dfe610703565b600092835260346020526040909220549190911015919050565b60007f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750873ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea99190611fd1565b73ffffffffffffffffffffffffffffffffffffffff166391ddadf46040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610f2d575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610f2a91810190612141565b60015b610f3f57610f3a43611a95565b905090565b919050565b60007f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750873ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd59190611fd1565b6040517f9ab24eb000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529190911690639ab24eb090602401602060405180830381865afa158015611043573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110679190611fb8565b92915050565b60336020526000908152604090208054600182015460028301805473ffffffffffffffffffffffffffffffffffffffff8416947401000000000000000000000000000000000000000090940460ff169391906110c890612169565b80601f01602080910402602001604051908101604052809291908181526020018280546110f490612169565b80156111415780601f1061111657610100808354040283529160200191611141565b820191906000526020600020905b81548152906001019060200180831161112457829003601f168201915b5050505050905084565b33600061115782610f44565b116111ca5760405162461bcd60e51b815260206004820152603b60248201527f546f6b656e4d756c746953696757616c6c65743a206f6e6c7920616c6c6f776560448201527f6420746f20676f7665726e616e636520746f6b656e206f776e657200000000006064820152608401610444565b600082815260336020526040902054829073ffffffffffffffffffffffffffffffffffffffff166112635760405162461bcd60e51b815260206004820152602f60248201527f546f6b656e4d756c746953696757616c6c65743a207472616e73616374696f6e60448201527f20646f6573206e6f7420657869737400000000000000000000000000000000006064820152608401610444565b6000838152603460209081526040808320338452600181019092529091205460ff16156112f85760405162461bcd60e51b815260206004820152602660248201527f546f6b656e4d756c746953696757616c6c65743a20616c726561647920636f6e60448201527f6669726d656400000000000000000000000000000000000000000000000000006064820152608401610444565b3360008181526001838101602052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909117905561133d90610f44565b81600001600082825461135091906121bc565b9091555050604051849033907ff8a17c9136a3ae33364fac05eb088a3cbafee10c1889c88593e20ee2d8e4eb8890600090a361138a610703565b600085815260346020526040902054106113a7576113a784611442565b50505050565b60003360006113bb82610f44565b1161142e5760405162461bcd60e51b815260206004820152603b60248201527f546f6b656e4d756c746953696757616c6c65743a206f6e6c7920616c6c6f776560448201527f6420746f20676f7665726e616e636520746f6b656e206f776e657200000000006064820152608401610444565b6114398585856117b0565b95945050505050565b61144a611b17565b600081815260336020526040902054819073ffffffffffffffffffffffffffffffffffffffff166114e35760405162461bcd60e51b815260206004820152602f60248201527f546f6b656e4d756c746953696757616c6c65743a207472616e73616374696f6e60448201527f20646f6573206e6f7420657869737400000000000000000000000000000000006064820152608401610444565b600082815260336020526040902054829074010000000000000000000000000000000000000000900460ff16156115825760405162461bcd60e51b815260206004820152602560248201527f546f6b656e4d756c746953696757616c6c65743a20616c72656164792065786560448201527f63757465640000000000000000000000000000000000000000000000000000006064820152608401610444565b61158b83610df4565b6115fd5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e4d756c746953696757616c6c65743a2071756f72756d206e6f742060448201527f72656163686564000000000000000000000000000000000000000000000000006064820152608401610444565b600083815260336020526040812080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff8116740100000000000000000000000000000000000000001782559091906116fe9073ffffffffffffffffffffffffffffffffffffffff165a846001015485600201805461167b90612169565b80601f01602080910402602001604051908101604052809291908181526020018280546116a790612169565b80156116f45780601f106116c9576101008083540402835291602001916116f4565b820191906000526020600020905b8154815290600101906020018083116116d757829003601f168201915b5050505050611b70565b9050806117735760405162461bcd60e51b815260206004820152602c60248201527f546f6b656e4d756c746953696757616c6c65743a2063616c6c207472616e736160448201527f6374696f6e206661696c656400000000000000000000000000000000000000006064820152608401610444565b604051859033907f4e86ad0da28cbaaaa7e93e36c43b32696e970535225b316f1b84fbf30bdc04e890600090a3505050506117ad60018055565b50565b60008373ffffffffffffffffffffffffffffffffffffffff811661183c5760405162461bcd60e51b815260206004820152602960248201527f546f6b656e4d756c746953696757616c6c65743a20616464726573732069732060448201527f6e6f742076616c696400000000000000000000000000000000000000000000006064820152608401610444565b6000611849868686610c68565b60008181526033602052604090205490915073ffffffffffffffffffffffffffffffffffffffff16156118e45760405162461bcd60e51b815260206004820152602f60248201527f546f6b656e4d756c746953696757616c6c65743a207472616e73616374696f6e60448201527f20616c72656164792065786973747300000000000000000000000000000000006064820152608401610444565b6040805160808101825273ffffffffffffffffffffffffffffffffffffffff8089168252600060208084018281528486018b8152606086018b8152888552603390935295909220845181549351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941694169390931791909117825592516001820155915190919060028201906119959082612223565b505060388054600101905550604051819033907f1f50cd00b6a6fe3928bf4a5f2f23829e9a1c9396573b828b5fa14d95aae7e77590600090a395945050505050565b606060006119e483611b8a565b600101905060008167ffffffffffffffff811115611a0457611a04611ca1565b6040519080825280601f01601f191660200182016040528015611a2e576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084611a3857509392505050565b600065ffffffffffff821115611b135760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201527f38206269747300000000000000000000000000000000000000000000000000006064820152608401610444565b5090565b600260015403611b695760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610444565b6002600155565b600080600080845160208601878a8af19695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611bd3577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611bff576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611c1d57662386f26fc10000830492506010015b6305f5e1008310611c35576305f5e100830492506008015b6127108310611c4957612710830492506004015b60648310611c5b576064830492506002015b600a83106110675760010192915050565b60008060408385031215611c7f57600080fd5b8235915060208301358015158114611c9657600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112611ce157600080fd5b813567ffffffffffffffff80821115611cfc57611cfc611ca1565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611d4257611d42611ca1565b81604052838152866020858801011115611d5b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215611d9057600080fd5b8335925060208401359150604084013567ffffffffffffffff811115611db557600080fd5b611dc186828701611cd0565b9150509250925092565b600060208284031215611ddd57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146117ad57600080fd5b600080600060608486031215611e1b57600080fd5b8335611e2681611de4565b925060208401359150604084013567ffffffffffffffff811115611db557600080fd5b60005b83811015611e64578181015183820152602001611e4c565b838111156113a75750506000910152565b60008151808452611e8d816020860160208601611e49565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611ed26020830184611e75565b9392505050565b60008060408385031215611eec57600080fd5b823591506020830135611c9681611de4565b600060208284031215611f1057600080fd5b8135611ed281611de4565b73ffffffffffffffffffffffffffffffffffffffff851681528315156020820152826040820152608060608201526000611f586080830184611e75565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600065ffffffffffff83811690831681811015611fb057611fb0611f62565b039392505050565b600060208284031215611fca57600080fd5b5051919050565b600060208284031215611fe357600080fd5b8151611ed281611de4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561202657612026611f62565b500290565b600082612061577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008282101561207857612078611f62565b500390565b73ffffffffffffffffffffffffffffffffffffffff851681528360208201526080604082015260006120b26080830185611e75565b905065ffffffffffff8316606083015295945050505050565b600084516120dd818460208901611e49565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612119816001850160208a01611e49565b60019201918201528351612134816002840160208801611e49565b0160020195945050505050565b60006020828403121561215357600080fd5b815165ffffffffffff81168114611ed257600080fd5b600181811c9082168061217d57607f821691505b6020821081036121b6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082198211156121cf576121cf611f62565b500190565b601f82111561221e57600081815260208120601f850160051c810160208610156121fb5750805b601f850160051c820191505b8181101561221a57828155600101612207565b5050505b505050565b815167ffffffffffffffff81111561223d5761223d611ca1565b6122518161224b8454612169565b846121d4565b602080601f8311600181146122a4576000841561226e5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561221a565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156122f1578886015182559484019460019091019084016122d2565b508582101561232d57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea164736f6c634300080f000a", + "key": "0xf5362f8385f6b0d71628d5c3bdf042baa255948d041600fd7dea8d0e13f1b41a" + }, + "0x5fbdb2315678afecb367f032d93f642f64180aa3": { + "balance": "0", + "nonce": 1, + "root": "0x07b0f866c231f8f9a48f53b74cc80ddaa975fa0067f422e859caeedc9344a0b0", + "codeHash": "0x9c14dd76b22c050f1d2a71196a5bcbb303572eba1d6a5e0c3622f64fa657d52f", + "code": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046105fd565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610215565b005b3480156100ec57600080fd5b506100de6100fb366004610621565b610229565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de61013936600461071e565b6102b7565b34801561014a57600080fd5b506100de610159366004610621565b610380565b34801561016a57600080fd5b506100de6101793660046105fd565b6103dc565b34801561018a57600080fd5b506100a06101993660046105fd565b610498565b60008173ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020f91906107c3565b92915050565b61021d6104e5565b6102276000610566565b565b6102316104e5565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b15801561029b57600080fd5b505af11580156102af573d6000803e3d6000fd5b505050505050565b6102bf6104e5565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef286903490610315908690869060040161080c565b60006040518083038185885af1158015610333573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261037a919081019061087a565b50505050565b6103886104e5565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe690602401610281565b6103e46104e5565b73ffffffffffffffffffffffffffffffffffffffff811661048c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61049581610566565b50565b60008173ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101eb573d6000803e3d6000fd5b60005473ffffffffffffffffffffffffffffffffffffffff163314610227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610483565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff8116811461049557600080fd5b60006020828403121561060f57600080fd5b813561061a816105db565b9392505050565b6000806040838503121561063457600080fd5b823561063f816105db565b9150602083013561064f816105db565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156106d0576106d061065a565b604052919050565b600067ffffffffffffffff8211156106f2576106f261065a565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60008060006060848603121561073357600080fd5b833561073e816105db565b9250602084013561074e816105db565b9150604084013567ffffffffffffffff81111561076a57600080fd5b8401601f8101861361077b57600080fd5b803561078e610789826106d8565b610689565b8181528760208385010111156107a357600080fd5b816020840160208301376000602083830101528093505050509250925092565b6000602082840312156107d557600080fd5b815161061a816105db565b60005b838110156107fb5781810151838201526020016107e3565b8381111561037a5750506000910152565b73ffffffffffffffffffffffffffffffffffffffff8316815260406020820152600082518060408401526108478160608501602087016107e0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016060019392505050565b60006020828403121561088c57600080fd5b815167ffffffffffffffff8111156108a357600080fd5b8201601f810184136108b457600080fd5b80516108c2610789826106d8565b8181528560208385010111156108d757600080fd5b6108e88260208301602086016107e0565b9594505050505056fea164736f6c634300080f000a", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "f39fd6e51aad88f6f4ce6ab8827279cfffb92266" + }, + "key": "0x44e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911b" + }, + "0x5fc8d32690cc91d4c39d9d3abcbd16989f875707": { + "balance": "0", + "nonce": 1, + "root": "0x5c3db50cf1505aab82dc3c1ee6a630dd323884783a1075e304b6512b041afa30", + "codeHash": "0x1f958654ab06a152993e7a0ae7b6dbb0d4b19265cc9337b8789fe1353bd9dc35", + "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106d9565b610224565b6100a86100a33660046106f4565b610296565b6040516100b59190610777565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106d9565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ea565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060b565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006106357fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038390556040805173ffffffffffffffffffffffffffffffffffffffff8084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d457600080fd5b919050565b6000602082840312156106eb57600080fd5b610412826106b0565b60008060006040848603121561070957600080fd5b610712846106b0565b9250602084013567ffffffffffffffff8082111561072f57600080fd5b818601915086601f83011261074357600080fd5b81358181111561075257600080fd5b87602082850101111561076457600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a457858101830151858201604001528201610788565b818111156107b6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "01", + "0x0000000000000000000000000000000000000000000000000000000000000066": "dead", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "9a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "5fbdb2315678afecb367f032d93f642f64180aa3" + }, + "key": "0x0d61055ea920808012c78dfc3fd2714d5ce59f19b79b6147d59d69a3888a84f5" + }, + "0x610178da211fef7d417bc0e6fed39f05609ad788": { + "balance": "0", + "nonce": 1, + "root": "0xf1bfa3a9df2c93843fc9016cc92662cc5ef4a4aca7df90af07b27eaddbcf19a4", + "codeHash": "0x1f958654ab06a152993e7a0ae7b6dbb0d4b19265cc9337b8789fe1353bd9dc35", + "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106d9565b610224565b6100a86100a33660046106f4565b610296565b6040516100b59190610777565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106d9565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ea565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060b565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006106357fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038390556040805173ffffffffffffffffffffffffffffffffffffffff8084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d457600080fd5b919050565b6000602082840312156106eb57600080fd5b610412826106b0565b60008060006040848603121561070957600080fd5b610712846106b0565b9250602084013567ffffffffffffffff8082111561072f57600080fd5b818601915086601f83011261074357600080fd5b81358181111561075257600080fd5b87602082850101111561076457600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a457858101830151858201604001528201610788565b818111156107b6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "01", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "c3e53f4d16ae77db1c982e75a937b9f60fe63690", + "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "03", + "0xa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49": "03", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "5fbdb2315678afecb367f032d93f642f64180aa3", + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "03", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "03" + }, + "key": "0xc6ca7521443eb53bb835320d8045532cc699c3564097dc83c2afa5aa02120e72" + }, + "0x67d269191c92caf3cd7723f116c85e6e9bf55933": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x2f7afdb50552fbca3ca9d69a4a82087f4c7eed669185752c634b490c3c763752", + "code": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c80634292dc3e1461003b57806354fd4d5014610063575b600080fd5b61004e610049366004615979565b610078565b60405190151581526020015b60405180910390f35b61006b6104c7565b60405161005a9190615a1d565b6000610082615816565b8484600081811061009557610095615a6e565b9050602002013570ffffffffffffffffffffffffffffffffff16816000600681106100c2576100c2615a6e565b60200201526088858560018181106100dc576100dc615a6e565b90506020020135600116901b6088868660008181106100fd576100fd615a6e565b90506020020135901c6101109190615acc565b60208201528484600281811061012857610128615a6e565b9050602002013570ffffffffffffffffffffffffffffffffff168160026006811061015557610155615a6e565b602002015260888585600381811061016f5761016f615a6e565b90506020020135600116901b60888686600281811061019057610190615a6e565b90506020020135901c6101a39190615acc565b606080830191909152608084811c908301526fffffffffffffffffffffffffffffffff841660a08301526040805160028082529281019091526000918291829182918291816020015b60408051808201909152600080825260208201528152602001906001900390816101ec5750506040805160028082526060820190925291925060009190602082015b610236615834565b81526020019060019003908161022e5790505090506102568d8d8961056a565b855193995090975090955093508690839060009061027657610276615a6e565b60200260200101516000018181525050838260008151811061029a5761029a615a6e565b6020026020010151602001818152505084826001815181106102be576102be615a6e565b6020026020010151600001818152505082826001815181106102e2576102e2615a6e565b602002602001015160200181815250506102fa614ad2565b8160008151811061030d5761030d615a6e565b6020026020010181905250610320614b7d565b8160018151811061033357610333615a6e565b60200260200101819052506103488282614c24565b61035c5760009750505050505050506104be565b8a8a600081811061036f5761036f615a6e565b905060200201358260008151811061038957610389615a6e565b6020908102919091010151528a8a60018181106103a8576103a8615a6e565b90506020020135826000815181106103c2576103c2615a6e565b602002602001015160200181815250508a8a60028181106103e5576103e5615a6e565b90506020020135826001815181106103ff576103ff615a6e565b6020908102919091010151528a8a600381811061041e5761041e615a6e565b905060200201358260018151811061043857610438615a6e565b60200260200101516020018181525050610450614ad2565b8160008151811061046357610463615a6e565b6020026020010181905250610476614b7d565b8160018151811061048957610489615a6e565b602002602001018190525061049e8282614c24565b6104b25760009750505050505050506104be565b60019750505050505050505b95945050505050565b60606104f27f0000000000000000000000000000000000000000000000000000000000000000614ef8565b61051b7f0000000000000000000000000000000000000000000000000000000000000001614ef8565b6105447f0000000000000000000000000000000000000000000000000000000000000004614ef8565b60405160200161055693929190615b13565b604051602081830303815290604052905090565b600080600080610578615859565b610580615878565b6000806105d57f2754b04f3f510d0e86a0d0e811f0fc16f92b722514e1729066d2abf90811d6f27f1816b0f9909a5a979bd34c559e57b4096bee5cce7eb668bc0a9805677f40dc858b845b6020020151614fb6565b909250905061062f7f174fa57071f8f6e53fcb31a5ecc33274ec76e4e186eeb0b64255d2f314cd50b27f1c399365e85e4de2761ebcf350da85ff4518cc82f7cef64a477a7a5fd11d4a448b60015b6020020151858561501c565b90925090506106817f259a4d5cd83279b6dc9ca2008b669f82e91f23804e2524c5087a2452d52c33bd7f303abddb7ae0f35e3a6bd39314b347c3c3a433f72833dda1998ad2176258baa38b6002610623565b90925090506106d37f252b158900f31a7c0c00b924e7d3c8d61a60c5e9fd2b83251ba73d1dc0b680f57f29c8c2b3f0d74267bc2b0f9f3568838cdb0eee4719391790d93d0015c00ce5af8b6003610623565b90925090506107257f0c25f9f3c38b6a128d7d38c5625a3976d389b5f9f33098bb419968e4d18e150e7f21fb777462c7f4af71940423babc7f882f0c97be9620ef84f6f11974ee0edb8e8b6004610623565b90925090506107777f2280a0fd7dbf95c450830906ffc607a373d5b9b56b9101138e925ad557eb355a7f0697ab7e9a5377e2759ab6d1283301ccae9c72bad14946a9513ee19be1ec825e8b6005610623565b602086015284526107aa7f1545b1bf82c58ee35648bd877da9c5010193e82b036b16bf382acf31bc2ab576846000615068565b835160208501516107be91908560026150b4565b600091505b6004821161085c5761084a8b8b6107db856002615b89565b6107e6906000615acc565b8181106107f5576107f5615a6e565b905060200201358c8c85600261080b9190615b89565b610816906001615acc565b81811061082557610825615a6e565b905060200201358585600361083a9190615b89565b610845906005615acc565b6150b4565b8161085481615bc6565b9250506107c3565b610867836014615124565b6040850152600091505b600d8211610905576108f38b8b610889856002615b89565b61089490600a615acc565b8181106108a3576108a3615a6e565b905060200201358c8c8560026108b99190615b89565b6108c490600b615acc565b8181106108d3576108d3615a6e565b90506020020135858560036108e89190615b89565b610845906001615acc565b816108fd81615bc6565b925050610871565b61091083602b615124565b6060850152610920836001615124565b6080850152600091505b6009821161098f5761097d8b8b610942856002615b89565b61094d906026615acc565b81811061095c5761095c615a6e565b905060200201358c8c8560026109729190615b89565b6108c4906027615acc565b8161098781615bc6565b92505061092a565b61099a83601f615124565b60a0850152600091505b60038211610a09576109f78b8b6109bc856002615b89565b6109c790603a615acc565b8181106109d6576109d6615a6e565b905060200201358c8c8560026109ec9190615b89565b6108c490603b615acc565b81610a0181615bc6565b9250506109a4565b610a1483600d615124565b60c0850152600091505b60468211610a8757610a758b8b610a36856001615b89565b610a41906042615acc565b818110610a5057610a50615a6e565b9050602002013584846002610a659190615b89565b610a70906001615acc565b615068565b81610a7f81615bc6565b925050610a1e565b610a9283608f615124565b60e0850152600091505b60038211610b0157610aef8b8b610ab4856002615b89565b610abf906089615acc565b818110610ace57610ace615a6e565b905060200201358c8c856002610ae49190615b89565b6108c490608a615acc565b81610af981615bc6565b925050610a9c565b610b0c83600d615124565b61010085015260c0840151600080516020615cd4833981519152907f1dba8b5bdd64ef6ce29a9039aca3c0e524395c43b9227b96c75090cc6cc7ec97900961012085015260c0840151600080516020615cd4833981519152907f24a1fcd63e9f03b27281db85fe631ec8e5c466f8178a4ee94d4942b7ccd90e1c900961014085015260c0840151600080516020615cd4833981519152907f20bab6e5f766b4edf82399e9c5ff0e40d4b6875321a3d8020e18521d8f5c7241900961016085015260c0840151610bdf906304000000615186565b610180850152600080516020615cd4833981519152610bff600182615bfe565b610180860151086101a08501819052600080516020615cd4833981519152907f30644e66c81e03716be83b486d6feabcc7ddd0fe6cbf5e72d585d142f7829b05096101c0850152600080516020615cd4833981519152610c60600182615bfe565b60c0860151089150610c7a84600e5b6020020151836151ed565b6101c08501526101a0840151600080516020615cd4833981519152907f07baaa5b7af9cf52cd226bc56865f0f99ef8fcd4219060f09f43e9a148b5ab68096101e0850152600080516020615cd4833981519152610cf77f20bab6e5f766b4edf82399e9c5ff0e40d4b6875321a3d8020e18521d8f5c724182615bfe565b60c0860151089150610d0a84600f610c6f565b6101e08501526101a0840151600080516020615cd4833981519152907f1c699f652457365bf2fc4fa2c5c63d6c4349b03cb46d633d7a2655c5da4b900a09610200850152600080516020615cd4833981519152610d877f19277f31ecb5bfe8604677099c09556812b0b5c50cceb2b584098183a5a6c5c882615bfe565b60c0860151089150610d9a846010610c6f565b6102008501526101a0840151600080516020615cd4833981519152907f205cdbaf03903a5c23e60eef0df90673bc65a25762694c501e3281153b4e588a09610220850152600080516020615cd4833981519152610e177f082a7bd4c0a7e4352229d332c27a160da18f0d7c651f3047df41b80345532f6e82615bfe565b60c0860151089150610e2a846011610c6f565b6102208501526101a0840151600080516020615cd4833981519152907f27db73b1a831278e143aab90091db38afdea3294c4ba05d1c697a392eb09cc7909610240850152600080516020615cd4833981519152610ea77f26501ebfe559ea5826f023d3e76e4b66f170cd940408eb5590a4075c80b498d682615bfe565b60c0860151089150610eba846012610c6f565b6102408501526101a0840151600080516020615cd4833981519152907f0204822d629ab653697f028f5fa17d23ac2ba08c60c7112d98ebd28f325f0af609610260850152600080516020615cd4833981519152610f377f0d5eb4c216db2c3262de3f6a2ef71a9be95ff21a7a1a50ed069d6131e7d54e5f82615bfe565b60c0860151089150610f4a846013610c6f565b6102608501526101a0840151600080516020615cd4833981519152907f2622622a60c0d9327ccf066a0f1fce13c48601b976affd1f41c2a72a9f77da6409610280850152600080516020615cd4833981519152610fc77f24a1fcd63e9f03b27281db85fe631ec8e5c466f8178a4ee94d4942b7ccd90e1c82615bfe565b60c0860151089150610fda846014610c6f565b6102808501526102008401516101e0850151600080516020615cd48339815191529190089150600080516020615cd4833981519152846011602002015183089150600080516020615cd4833981519152846012602002015183089150600080516020615cd4833981519152846013602002015183086101e08501526110ab8b8b604a81811061106b5761106b615a6e565b905060200201358c8c604881811061108557611085615a6e565b905060200201358d8d604981811061109f5761109f615a6e565b9050602002013561521d565b91506110ea8b8b604b8181106110c3576110c3615a6e565b905060200201358c8c60438181106110dd576110dd615a6e565b905060200201358461521d565b915061111c8b8b604c81811061110257611102615a6e565b905060200201358c8c60448181106110dd576110dd615a6e565b915061114e8b8b604d81811061113457611134615a6e565b905060200201358c8c60458181106110dd576110dd615a6e565b91506111808b8b604e81811061116657611166615a6e565b905060200201358c8c60468181106110dd576110dd615a6e565b91506111b28b8b604f81811061119857611198615a6e565b905060200201358c8c60478181106110dd576110dd615a6e565b610200850152600080516020615cd48339815191528b8b60448181106111da576111da615a6e565b905060200201358c8c60438181106111f4576111f4615a6e565b905060200201350991506112398b8b605081811061121457611214615a6e565b90506020020135838660106054811061122f5761122f615a6e565b602002015161521d565b610200850152600080516020615cd48339815191528b8b604681811061126157611261615a6e565b905060200201358c8c604581811061127b5761127b615a6e565b9050602002013509915061129b8b8b605181811061121457611214615a6e565b610200850152600080516020615cd48339815191528b8b60618181106112c3576112c3615a6e565b90506020020135600080516020615cd48339815191526112e39190615bfe565b6001089150600080516020615cd48339815191528285600e602002015109610220850152600080516020615cd48339815191528b8b606481811061132957611329615a6e565b905060200201358c8c606481811061134357611343615a6e565b90506020020135099150600080516020615cd48339815191528b8b606481811061136f5761136f615a6e565b90506020020135600080516020615cd483398151915261138f9190615bfe565b83089150600080516020615cd483398151915282856014602002015109610240850152600080516020615cd48339815191528b8b60638181106113d4576113d4615a6e565b90506020020135600080516020615cd48339815191526113f49190615bfe565b8c8c606481811061140757611407615a6e565b90506020020135089150600080516020615cd483398151915284600e6020020151830961026085015260c08401516060850151600080516020615cd48339815191529190096102a08501526101e0840151610280850151600080516020615cd48339815191529190089150600080516020615cd483398151915261149983600080516020615cd4833981519152615bfe565b6001086101e08501526080840151600080516020615cd4833981519152908c8c60438181106114ca576114ca615a6e565b90506020020135086102c08501526115158b8b605b8181106114ee576114ee615a6e565b905060200201358560036054811061150857611508615a6e565b602002015186601661122f565b9150600080516020615cd48339815191528b8b606281811061153957611539615a6e565b9050602002013583096102e08501526102a08401516102c0850151600080516020615cd48339815191529190089150600080516020615cd48339815191528b8b606181811061158a5761158a615a6e565b9050602002013583096102c08501526102a0840151600080516020615cd4833981519152907f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a2096103008501526080840151600080516020615cd4833981519152908c8c60448181106115ff576115ff615a6e565b905060200201350861032085015261164a8b8b605c81811061162357611623615a6e565b905060200201358560036054811061163d5761163d615a6e565b602002015186601961122f565b9150600080516020615cd4833981519152846017602002015183096102e0850152610300840151610320850151600080516020615cd48339815191529190089150600080516020615cd4833981519152846016602002015183096102c0850152610300840151600080516020615cd4833981519152907f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a2096103008501526080840151600080516020615cd4833981519152908c8c604581811061171057611710615a6e565b90506020020135086103208501526117348b8b605d81811061162357611623615a6e565b9150600080516020615cd4833981519152846017602002015183096102e0850152610300840151610320850151600080516020615cd48339815191529190089150600080516020615cd4833981519152846016602002015183096102c0850152610300840151600080516020615cd4833981519152907f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a2096103008501526102c0840151600080516020615cd4833981519152906117f29082615bfe565b6102e0860151089150600080516020615cd483398151915284600f602002015183096102c08501526102a0840151600080516020615cd4833981519152907f18afdf23e9bd9302673fc1e076a492d4d65bd18ebc4d854ed189139bab313e5290096102a08501526080840151600080516020615cd4833981519152908c8c604681811061188157611881615a6e565b90506020020135086102e08501526118cc8b8b605e8181106118a5576118a5615a6e565b90506020020135856003605481106118bf576118bf615a6e565b602002015186601761122f565b9150600080516020615cd48339815191528b8b60658181106118f0576118f0615a6e565b9050602002013583096103008501526102a08401516102e0850151600080516020615cd48339815191529190089150600080516020615cd48339815191528b8b606481811061194157611941615a6e565b9050602002013583096102e08501526102a0840151600080516020615cd4833981519152907f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a2096102a08501526080840151600080516020615cd4833981519152908c8c60478181106119b6576119b6615a6e565b90506020020135086103208501526119da8b8b605f81811061162357611623615a6e565b9150600080516020615cd4833981519152846018602002015183096103008501526102a0840151610320850151600080516020615cd48339815191529190089150600080516020615cd4833981519152846017602002015183096102e08501526102a0840151600080516020615cd4833981519152907f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a2096102a08501526080840151600080516020615cd4833981519152908c8c6042818110611aa057611aa0615a6e565b9050602002013508610320850152611ac48b8b606081811061162357611623615a6e565b9150600080516020615cd4833981519152846018602002015183096103008501526102a0840151610320850151600080516020615cd48339815191529190089150600080516020615cd4833981519152846017602002015183096102e08501526102a0840151600080516020615cd4833981519152907f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a2096102a08501526102e0840151600080516020615cd483398151915290611b829082615bfe565b610300860151089150600080516020615cd483398151915284600f602002015183096102a08501526060840151600080516020615cd4833981519152908c8c6068818110611bd257611bd2615a6e565b90506020020135089150600080516020615cd4833981519152828c8c6067818110611bff57611bff615a6e565b90506020020135096102e08501526080840151600080516020615cd4833981519152908c8c606a818110611c3557611c35615a6e565b90506020020135089150600080516020615cd4833981519152828560176020020151096102e0850152600080516020615cd48339815191528b8b6052818110611c8057611c80615a6e565b905060200201358c8c6043818110611c9a57611c9a615a6e565b90506020020135096103008501526040840151600080516020615cd48339815191529060000960408501819052610300850151600080516020615cd48339815191529108610300850152600080516020615cd48339815191528b8b6053818110611d0657611d06615a6e565b9050602002013585600260548110611d2057611d20615a6e565b602002015108610320850152600080516020615cd48339815191528b8b606a818110611d4e57611d4e615a6e565b90506020020135600080516020615cd4833981519152611d6e9190615bfe565b8c8c6068818110611d8157611d81615a6e565b9050602002013508610340850152600080516020615cd48339815191528b8b6066818110611db157611db1615a6e565b90506020020135600080516020615cd4833981519152611dd19190615bfe565b6001089150600080516020615cd48339815191528285600e602002015109610360850152600080516020615cd48339815191528b8b6066818110611e1757611e17615a6e565b905060200201358c8c6066818110611e3157611e31615a6e565b90506020020135099150600080516020615cd48339815191528b8b6066818110611e5d57611e5d615a6e565b90506020020135600080516020615cd4833981519152611e7d9190615bfe565b83089150600080516020615cd4833981519152828560146020020151096103808501526060840151610300850151600080516020615cd48339815191529190089150600080516020615cd4833981519152828c8c6066818110611ee257611ee2615a6e565b90506020020135096103008501526080840151610320850151600080516020615cd48339815191529190086103208501819052610300850151600080516020615cd48339815191529190099150600080516020615cd4833981519152611f5683600080516020615cd4833981519152615bfe565b6102e0860151089150600080516020615cd483398151915284600f602002015183096102e08501526103408401516101c0850151600080516020615cd4833981519152919009610300850152600080516020615cd48339815191528b8b6069818110611fc457611fc4615a6e565b90506020020135600080516020615cd4833981519152611fe49190615bfe565b8c8c6068818110611ff757611ff7615a6e565b90506020020135089150600080516020615cd48339815191528285601a6020020151099150600080516020615cd483398151915284600f602002015183096103408501526060840151600080516020615cd4833981519152908c8c606d81811061206357612063615a6e565b90506020020135089150600080516020615cd4833981519152828c8c606c81811061209057612090615a6e565b90506020020135096103a08501526080840151600080516020615cd4833981519152908c8c606f8181106120c6576120c6615a6e565b90506020020135089150600080516020615cd48339815191528285601d6020020151096103a08501526121398b8b605281811061210557612105615a6e565b905060200201358c8c604481811061211f5761211f615a6e565b905060200201358660026054811061122f5761122f615a6e565b6103c0850152600080516020615cd48339815191528b8b606f81811061216157612161615a6e565b90506020020135600080516020615cd48339815191526121819190615bfe565b8c8c606d81811061219457612194615a6e565b90506020020135086103e0850152600080516020615cd48339815191528b8b606b8181106121c4576121c4615a6e565b90506020020135600080516020615cd48339815191526121e49190615bfe565b6001089150600080516020615cd48339815191528285600e602002015109610400850152600080516020615cd48339815191528b8b606b81811061222a5761222a615a6e565b905060200201358c8c606b81811061224457612244615a6e565b90506020020135099150600080516020615cd48339815191528b8b606b81811061227057612270615a6e565b90506020020135600080516020615cd48339815191526122909190615bfe565b83089150600080516020615cd48339815191528285601460200201510961042085015260608401516103c0850151600080516020615cd48339815191529190089150600080516020615cd4833981519152828c8c606b8181106122f5576122f5615a6e565b90506020020135099150600080516020615cd4833981519152846019602002015183099150600080516020615cd483398151915261234183600080516020615cd4833981519152615bfe565b6103a0860151089150600080516020615cd483398151915284600f602002015183096103a08501526103e08401516101c0850151600080516020615cd48339815191529190096103c0850152600080516020615cd48339815191528b8b606e8181106123af576123af615a6e565b90506020020135600080516020615cd48339815191526123cf9190615bfe565b8c8c606d8181106123e2576123e2615a6e565b90506020020135089150600080516020615cd48339815191528285601f6020020151099150600080516020615cd483398151915284600f602002015183096103e08501526060840151600080516020615cd4833981519152908c8c607281811061244e5761244e615a6e565b90506020020135089150600080516020615cd4833981519152828c8c607181811061247b5761247b615a6e565b90506020020135096104408501526080840151600080516020615cd4833981519152908c8c60748181106124b1576124b1615a6e565b90506020020135089150600080516020615cd48339815191528285602260200201510961044085015261250a8b8b60528181106124f0576124f0615a6e565b905060200201358c8c604581811061211f5761211f615a6e565b610460850152600080516020615cd48339815191528b8b607481811061253257612532615a6e565b90506020020135600080516020615cd48339815191526125529190615bfe565b8c8c607281811061256557612565615a6e565b9050602002013508610480850152600080516020615cd48339815191528b8b607081811061259557612595615a6e565b90506020020135600080516020615cd48339815191526125b59190615bfe565b6001089150600080516020615cd48339815191528285600e6020020151096104a0850152600080516020615cd48339815191528b8b60708181106125fb576125fb615a6e565b905060200201358c8c607081811061261557612615615a6e565b90506020020135099150600080516020615cd48339815191528b8b607081811061264157612641615a6e565b90506020020135600080516020615cd48339815191526126619190615bfe565b83089150600080516020615cd4833981519152828560146020020151096104c08501526060840151610460850151600080516020615cd48339815191529190089150600080516020615cd4833981519152828c8c60708181106126c6576126c6615a6e565b90506020020135099150600080516020615cd4833981519152846019602002015183099150600080516020615cd483398151915261271283600080516020615cd4833981519152615bfe565b610440860151089150600080516020615cd483398151915284600f602002015183096104408501526104808401516101c0850151600080516020615cd4833981519152919009610460850152600080516020615cd48339815191528b8b607381811061278057612780615a6e565b90506020020135600080516020615cd48339815191526127a09190615bfe565b8c8c60728181106127b3576127b3615a6e565b90506020020135089150600080516020615cd4833981519152828560246020020151099150600080516020615cd483398151915284600f602002015183096104808501526060840151600080516020615cd4833981519152908c8c607781811061281f5761281f615a6e565b90506020020135089150600080516020615cd4833981519152828c8c607681811061284c5761284c615a6e565b90506020020135096104e08501526080840151600080516020615cd4833981519152908c8c607981811061288257612882615a6e565b90506020020135089150600080516020615cd4833981519152828560276020020151096104e08501526128db8b8b60528181106128c1576128c1615a6e565b905060200201358c8c604681811061211f5761211f615a6e565b610500850152600080516020615cd48339815191528b8b607981811061290357612903615a6e565b90506020020135600080516020615cd48339815191526129239190615bfe565b8c8c607781811061293657612936615a6e565b9050602002013508610520850152600080516020615cd48339815191528b8b607581811061296657612966615a6e565b90506020020135600080516020615cd48339815191526129869190615bfe565b6001089150600080516020615cd48339815191528285600e602002015109610540850152600080516020615cd48339815191528b8b60758181106129cc576129cc615a6e565b905060200201358c8c60758181106129e6576129e6615a6e565b90506020020135099150600080516020615cd48339815191528b8b6075818110612a1257612a12615a6e565b90506020020135600080516020615cd4833981519152612a329190615bfe565b83089150600080516020615cd4833981519152828560146020020151096105608501526060840151610500850151600080516020615cd48339815191529190089150600080516020615cd4833981519152828c8c6075818110612a9757612a97615a6e565b90506020020135099150600080516020615cd4833981519152846019602002015183099150600080516020615cd4833981519152612ae383600080516020615cd4833981519152615bfe565b6104e0860151089150600080516020615cd483398151915284600f602002015183096103208501526105208401516101c0850151600080516020615cd48339815191529190096104e0850152600080516020615cd48339815191528b8b6078818110612b5157612b51615a6e565b90506020020135600080516020615cd4833981519152612b719190615bfe565b8c8c6077818110612b8457612b84615a6e565b90506020020135089150600080516020615cd4833981519152828560296020020151099150600080516020615cd483398151915284600f602002015183096105008501526060840151600080516020615cd4833981519152908c8c607c818110612bf057612bf0615a6e565b90506020020135089150600080516020615cd4833981519152828c8c607b818110612c1d57612c1d615a6e565b90506020020135096105208501526080840151600080516020615cd4833981519152908c8c607e818110612c5357612c53615a6e565b90506020020135089150600080516020615cd483398151915282856029602002015109610520850152612cac8b8b6054818110612c9257612c92615a6e565b905060200201358c8c604381811061211f5761211f615a6e565b610580850152600080516020615cd48339815191528b8b6055818110612cd457612cd4615a6e565b9050602002013585600260548110612cee57612cee615a6e565b6020020151086105a0850152600080516020615cd48339815191528b8b607e818110612d1c57612d1c615a6e565b90506020020135600080516020615cd4833981519152612d3c9190615bfe565b8c8c607c818110612d4f57612d4f615a6e565b90506020020135086105c0850152600080516020615cd48339815191528b8b607a818110612d7f57612d7f615a6e565b90506020020135600080516020615cd4833981519152612d9f9190615bfe565b6001089150600080516020615cd48339815191528285600e6020020151096105e0850152600080516020615cd48339815191528b8b607a818110612de557612de5615a6e565b905060200201358c8c607a818110612dff57612dff615a6e565b90506020020135099150600080516020615cd48339815191528b8b607a818110612e2b57612e2b615a6e565b90506020020135600080516020615cd4833981519152612e4b9190615bfe565b83089150600080516020615cd4833981519152828560146020020151096106008501526060840151610580850151600080516020615cd48339815191529190089150600080516020615cd4833981519152828c8c607a818110612eb057612eb0615a6e565b905060200201350961058085015260808401516105a0850151600080516020615cd48339815191529190089150600080516020615cd48339815191528285602c6020020151099150600080516020615cd4833981519152612f1f83600080516020615cd4833981519152615bfe565b610520860151089150600080516020615cd483398151915284600f602002015183096105208501526105c08401516101c0850151600080516020615cd4833981519152919009610580850152600080516020615cd48339815191528b8b607d818110612f8d57612f8d615a6e565b90506020020135600080516020615cd4833981519152612fad9190615bfe565b8c8c607c818110612fc057612fc0615a6e565b90506020020135089150600080516020615cd48339815191528285602e6020020151099150600080516020615cd483398151915284600f602002015183096105a08501526060840151600080516020615cd4833981519152908c8c608181811061302c5761302c615a6e565b90506020020135089150600080516020615cd4833981519152828c8c608081811061305957613059615a6e565b90506020020135096105c08501526080840151600080516020615cd4833981519152908c8c608381811061308f5761308f615a6e565b90506020020135089150600080516020615cd48339815191528285602e6020020151096105c08501526130ce8b8b6056818110612c9257612c92615a6e565b610620850152600080516020615cd48339815191528b8b60578181106130f6576130f6615a6e565b905060200201358560026054811061311057613110615a6e565b602002015108610640850152600080516020615cd48339815191528b8b608381811061313e5761313e615a6e565b90506020020135600080516020615cd483398151915261315e9190615bfe565b8c8c608181811061317157613171615a6e565b9050602002013508610660850152600080516020615cd48339815191528b8b607f8181106131a1576131a1615a6e565b90506020020135600080516020615cd48339815191526131c19190615bfe565b6001089150600080516020615cd48339815191528285600e602002015109610680850152600080516020615cd48339815191528b8b607f81811061320757613207615a6e565b905060200201358c8c607f81811061322157613221615a6e565b90506020020135099150600080516020615cd48339815191528b8b607f81811061324d5761324d615a6e565b90506020020135600080516020615cd483398151915261326d9190615bfe565b83089150600080516020615cd4833981519152828560146020020151096106a08501526060840151610620850151600080516020615cd48339815191529190089150600080516020615cd4833981519152828c8c607f8181106132d2576132d2615a6e565b90506020020135096106208501526080840151610640850151600080516020615cd48339815191529190089150600080516020615cd4833981519152828560316020020151099150600080516020615cd483398151915261334183600080516020615cd4833981519152615bfe565b6105c0860151089150600080516020615cd483398151915284600f602002015183096105c08501526106608401516101c0850151600080516020615cd4833981519152919009610620850152600080516020615cd48339815191528b8b60828181106133af576133af615a6e565b90506020020135600080516020615cd48339815191526133cf9190615bfe565b8c8c60818181106133e2576133e2615a6e565b90506020020135089150600080516020615cd4833981519152828560336020020151099150600080516020615cd483398151915284600f602002015183096106408501526060840151600080516020615cd4833981519152908c8c608681811061344e5761344e615a6e565b90506020020135089150600080516020615cd4833981519152828c8c608581811061347b5761347b615a6e565b90506020020135096106608501526080840151600080516020615cd4833981519152908c8c60888181106134b1576134b1615a6e565b90506020020135089150600080516020615cd4833981519152828560336020020151096106608501526134f08b8b6058818110612c9257612c92615a6e565b6106c0850152600080516020615cd48339815191528b8b605981811061351857613518615a6e565b905060200201358560026054811061353257613532615a6e565b6020020151086040850152600080516020615cd48339815191528b8b608881811061355f5761355f615a6e565b90506020020135600080516020615cd483398151915261357f9190615bfe565b8c8c608681811061359257613592615a6e565b90506020020135086106e0850152600080516020615cd48339815191528b8b60848181106135c2576135c2615a6e565b90506020020135600080516020615cd48339815191526135e29190615bfe565b6001089150600080516020615cd48339815191528285600e602002015109610700850152600080516020615cd48339815191528b8b608481811061362857613628615a6e565b905060200201358c8c608481811061364257613642615a6e565b90506020020135099150600080516020615cd48339815191528b8b608481811061366e5761366e615a6e565b90506020020135600080516020615cd483398151915261368e9190615bfe565b83089150600080516020615cd48339815191528285601460200201510961028085015260608401516106c0850151600080516020615cd48339815191529190089150600080516020615cd4833981519152828c8c60848181106136f3576136f3615a6e565b9050602002013509606085015260808401516040850151600080516020615cd48339815191529190089150600080516020615cd4833981519152828560036020020151099150600080516020615cd483398151915261376083600080516020615cd4833981519152615bfe565b610660860151089150600080516020615cd483398151915284600f6020020151830960408501526106e08401516101c0850151600080516020615cd48339815191529190096060850152600080516020615cd48339815191528b8b60878181106137cc576137cc615a6e565b90506020020135600080516020615cd48339815191526137ec9190615bfe565b8c8c60868181106137ff576137ff615a6e565b90506020020135089150600080516020615cd4833981519152828560376020020151099150600080516020615cd483398151915284600f60200201518309608085015260a084015161385590600086601061122f565b915061388a8480600560200201517f35342d2c29302f2827192b2a24232226251f1e1d21201a18171c1b15161312118561524a565b91506138a884806005602002015168ff040302143832312e8561524a565b91506138bb8285600d60200201516151ed565b6040850152610100840151600080516020615cd483398151915290800960608501819052610100850151600080516020615cd4833981519152910960808501526139458b8b608f81811061391157613911615a6e565b905060200201358c8c609081811061392b5761392b615a6e565b90506020020135866004605481106105cb576105cb615a6e565b909250905061395e848c8c65ffff088b038d86866152cd565b90925090506139a182828d8d608981811061397b5761397b615a6e565b905060200201358e8e608a81811061399557613995615a6e565b905060200201356153d5565b6101e08601526101c08501526101608401516080850151600080516020615cd483398151915291900960a085015260e08401516080850151600080516020615cd4833981519152919009610160850181905260e0850151600080516020615cd483398151915291096101a0850181905260e0850151600080516020615cd48339815191529109610200850181905260e0850151600080516020615cd48339815191529109610220850181905260e0850151600080516020615cd48339815191529109610240850181905260e0850151600080516020615cd48339815191529109610260850152600080516020615cd48339815191528b8b6087818110613aa957613aa9615a6e565b9050602002013585601360548110613ac357613ac3615a6e565b6020020151099150613ae4848c8c6bffff0b6e0d731078117d128286615443565b9150613b218b8b6069818110613afc57613afc615a6e565b9050602002013585600460548110613b1657613b16615a6e565b60200201518461521d565b6102808501526101408401516060850151600080516020615cd4833981519152919009610140850152613b878b8b6063818110613b6057613b60615a6e565b9050602002013585600360548110613b7a57613b7a615a6e565b602002015186601461122f565b610280850152610120840151610100850151600080516020615cd483398151915291900961012085015260e0840151610100850151600080516020615cd48339815191529190096102a0850152600091505b6008821015613c8857600080516020615cd483398151915284613bfd846000615b89565b613c08906007615acc565b60548110613c1857613c18615a6e565b602002015185613c29856001615b89565b613c34906015615acc565b60548110613c4457613c44615a6e565b60200201510984613c56846001615b89565b613c61906016615acc565b60548110613c7157613c71615a6e565b602002015281613c8081615bc6565b925050613bd9565b600080516020615cd48339815191528b8b6085818110613caa57613caa615a6e565b9050602002013585601d60548110613cc457613cc4615a6e565b6020020151099150613ced848c8c73ffff0848156216651767186c19711a761b7b1c8086615443565b9150600080516020615cd4833981519152828560146020020151086102808501526102a08401516060850151600080516020615cd4833981519152919008606085015260e0840151600080516020615cd48339815191529080096102a0850181905260e0850151600080516020615cd483398151915291096103c0850152600091505b6032821015613e1f57600080516020615cd483398151915284613d94846000615b89565b613d9f906007615acc565b60548110613daf57613daf615a6e565b602002015185613dc0856001615b89565b613dcb90601e615acc565b60548110613ddb57613ddb615a6e565b60200201510984613ded846001615b89565b613df890601f615acc565b60548110613e0857613e08615a6e565b602002015281613e1781615bc6565b925050613d70565b600080516020615cd48339815191528b8b605a818110613e4157613e41615a6e565b9050602002013585605060548110613e5b57613e5b615a6e565b602002015109610a208501526101808401516109e0850151600080516020615cd4833981519152919009610a408501819052610180850151600080516020615cd48339815191529109610a608501819052610180850151600080516020615cd483398151915291096101808501526109e08401516040850151613ee1919086605161122f565b9150613f10848c8c7f3f50405141524253435444554556465747584859495b4a5c4b5d4c5e4d5f4e6086615443565b9150613f3f848c8c7f2f7a307c317e327f338134833584368637883849394a3a4b3b4c3c4d3d4e3e4f86615443565b9150613f6e848c8c7f1f4620472161226423662468256a266b276d286f29702a722b742c752d772e7986615443565b9150613f85848c8c67ffff074315441e4586615443565b9150600080516020615cd48339815191528b8b6042818110613fa957613fa9615a6e565b9050602002013583089150600080516020615cd48339815191528285601460200201510860408501526106c0840151610260850151600080516020615cd48339815191529190086102608501526106a08401516103a0850151600080516020615cd4833981519152919008610280850152610660840151610240850151600080516020615cd4833981519152919008610240850152610640840151610380850151600080516020615cd4833981519152919008610380850152610600840151610220850151600080516020615cd48339815191529190086102208501526105e0840151610360850151600080516020615cd48339815191529190086103608501526105a0840151610200850151600080516020615cd4833981519152919008610200850152610580840151610340850151600080516020615cd48339815191529190086103408501526105408401516101a0850151600080516020615cd48339815191529190086101a0850152610520840151610320850151600080516020615cd48339815191529190086103208501526104e0840151610160850151600080516020615cd48339815191529190086101608501526104c0840151610300850151600080516020615cd48339815191529190086103008501526104808401516080850151600080516020615cd483398151915291900860808501526104608401516102e0850151600080516020615cd48339815191529190086102e08501526104408401516102c0850151600080516020615cd48339815191529190086102c08501526104208401516060850151600080516020615cd48339815191529190086060850152610400840151610100850151600080516020615cd483398151915291900861010085015261427c8b8b608f81811061424857614248615a6e565b905060200201358c8c609081811061426257614262615a6e565b90506020020135866005605481106105cb576105cb615a6e565b90925090506142af848c8c7f182c192e1a301b321c341436098b03260a8d040a0b0e0d121016111a121e132286866152cd565b90925090506142d6848c8c73ffff4f3a523c533e0c405038068908081628172a86866152cd565b90925090506143287f0c7334a3b9a24f18780f368cf4e581f3ee206c995efcf2ad1d591075f34800d67f07c9c852e7cdf6ec7b0d7a9c71343fcc823836563a1eafe2964a7db347c644b486604e610623565b909250905061437a7f303399d69867569f44829166dbc811aec4050eb4351f07ce94137b2ea62615b77f21affd1d03a9a9e428842d8ef3da673c25888eba270e2de56fc7598de155776f86604d610623565b90925090506143cc7f0f8286c37689450e1171ff5f25b1fc58521cf3470ae9ea771918ecbee2094d847f1d371d5b9d97c37a0f1b8f3492dda158aa2dad81c52f7f2a512f63e59c705bed86604c610623565b909250905061441e7f139f3c97001d2d25928cab388bfe3f941f47bb46ef39095d1b0bc055185fa57f7f24d470b72fd0eecea0f5c65668c33110a005984460d7304582d1fcdd211df76886604b610623565b90925090506144707f1f9f5ab677532016ef9475fd5d43659678db3a699ad3d52e85c3f6ef2b3098c17f2cd62bc191e831701421d97bd158995f0f23e8645c14aa050602e958dd503b4786604a610623565b90925090506144c27f244e8af4f5d8644cfe7df55d0735c26e229afa7c7b92a39020bd02d8c8677b037f15a6dd332a6f0e9a9b643e86173dc6f99f4dc4bc18b215e0ac6a22e941fd9972866049610623565b90925090506145147f2bf75d9dd944249cd720ee71585980774cb83905b860feb5af3da42ca043b1157f07b4ff44a8e4250bf3ce16c06e8430b585a7a1e85243febe565a7929db37cc9f866048610623565b90925090506145667f20353da49405dca58c00c961510a2838b2bdeb06a053b8ed5931b8490967135b7f1ba4067d380f1db72eed4990fed1eb78d22addd5044bbea7d480f4e058d2fd08866047610623565b90925090506145b87f25d344a083be7e69cb907b8705b3bab3417d4a23f06d43ca7b287028a88ec5837f2c03f591ec6858cdff27cadaac1a67a1dc9ab7877f898686efe7033e7fd02a16866046610623565b909250905061460a7f19d9668da068ddb43d2e3d2c31214fefc028b0df0501ff8604575dafda6f1ae77f155edc361fbe4a694d9c6e3124a1c13d3180f39ab1af7521b35b6e2bb653b3da866045610623565b909250905061465c7f2bf75d9dd944249cd720ee71585980774cb83905b860feb5af3da42ca043b1157f07b4ff44a8e4250bf3ce16c06e8430b585a7a1e85243febe565a7929db37cc9f866044610623565b90925090506146ae7f1936a9539ed59e0f2c4665a13ee2bdf544ee1359b2a47f4f8d3666540d5be89e7f15efeffb7af6c45498a8d4779c0a2ca3a116a96348e8e51392ef924d6ab7dbfd866043610623565b90925090506147007f2fd08ae291ca0c95ada3f562b9f9be896737fd57493c4cefa087979abda4d2d67f04a6506069e2d39e944abcc54e70e881ccdd429ed4c1017fbe1099efeb70465f866042610623565b90925090506147527f0141bcf8e5540e9f5aa60645bf265946a71874beb52ddca1a0df8df6bbc0e0fa7f14e8506ee1911816df221897db48964bf861b4abecdb9da24afbcf9b0c4d18b8866041610623565b90925090506147a47f2ea5cb6082a4df4a36091fef8188e8e0f8d4b6e1e37707746707d99f548aef427f1766582f9e1ec20bed2f0d93154ae653f3089c934fca9f7b87192ed78b760c8d866040610623565b90925090506147f67f136635b335232ad0bb9ec1dd165740fb1f32464fd47c68a84fa6844059faf5217f090e5e51625ce01fec4c2647771bd32f228b8ea580c498822ee58d2a607b892186603f610623565b90925090506148487f143877d82d6f4d6a6e18301f05defdfa526f0d95977cec3c32e231b1aa0a81567f1906928f9c2d199d9062ece64e8dbff97e27ab2d8326b40e7ea77a950b21ddd986603e610623565b909250905061489a7f27ebdd749900c0af821c3d7bfee6f6216c2a101d247a8dd93db6590692d1689a7f2da8ee70127f67344aded9134ceff263c69790b3d020786c616f76349b19aef386603d610623565b90925090506148ec7f148ff3c1217e5849d79a5ad4e55e1f66e553e0c24a335730306b58c35f0be7647f29d393499e332436f2578d1e95f1aa58d1539c3bd0820157a6e9ed12a906301586603c610623565b909250905061493e7f1d0246b7158fd8adee20544a12a9c7037653efa8e5ca0da702f29744a3cc595d7f0d1c5bd48350de3282920c3453c6da531a1fd6fce81bacfd5e5289123458d67586603b610623565b90925090506149907f0a690884507cd616b1598e45913a0478135225c4a1ed39eb4d22552feff5f3b07f119e66501b5ff7f5a2d09bce4b7b1fe0e078c6764867222ed23ba35f317f200086603a610623565b90925090506149e27f18cfb2048fda3eb8a660efd7855014c0500be2531cbcd7e163455fe2b1972ce37f0e835d2d22b6c1e675e76f544bb7aea2e74b04659f91ecf97eccca4024c49326866039610623565b9092509050614a347f15ae1a8e3b993dd9aadc8f9086d1ea239d4cd5c09cfa445f337e1b60d7b3eb877f2c702ede24f9db8c8c9a439975facd3872a888c5f84f58b3b5f5a5623bac945a866038610623565b9092509050614a5f848c8c77ffff070015021e041f06250c28102b142e18311c3420372486866152cd565b85516020870151929450909250614a7991849184916153d5565b60208601528452614a8e6001600286816105cb565b85516020870151929450909250614aa69184846154e5565b602086018190528186526101c08601516101e090960151959d959c50909a509850929650505050505050565b614ada615834565b80517f186282957db913abd99f91db59fe69922e95040603ef44c0bd7aa3adeef8f5ac905280517f17944351223333f260ddc3b4af45191b856689eda9eab5cbcddbbe570ce860d2602091820152810180517f298adc7396bd3865cbf6d6df91bae406694e6d2215baa893bdeadb63052895f49052517f297772d34bc9aa8ae56162486363ffe417b02dc7e8c207fc2cc20203e67a02ad9060015b602002015290565b614b85615834565b80517f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2905280517f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed602091820152810180517f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec9052517f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d906001614b75565b60008083516006614c359190615b89565b905060008167ffffffffffffffff811115614c5257614c52615ae4565b604051908082528060200260200182016040528015614c7b578160200160208202803683370190505b509050614c86615897565b60008551875114614c9657600080fd5b60005b8751811015614ecf57878181518110614cb457614cb4615a6e565b60200260200101516000015184826006614cce9190615b89565b614cd9906000615acc565b81518110614ce957614ce9615a6e565b602002602001018181525050878181518110614d0757614d07615a6e565b60200260200101516020015184826006614d219190615b89565b614d2c906001615acc565b81518110614d3c57614d3c615a6e565b602002602001018181525050868181518110614d5a57614d5a615a6e565b6020908102919091010151515184614d73836006615b89565b614d7e906002615acc565b81518110614d8e57614d8e615a6e565b602002602001018181525050868181518110614dac57614dac615a6e565b60209081029190910181015151015184614dc7836006615b89565b614dd2906003615acc565b81518110614de257614de2615a6e565b602002602001018181525050868181518110614e0057614e00615a6e565b602002602001015160200151600060028110614e1e57614e1e615a6e565b602002015184614e2f836006615b89565b614e3a906004615acc565b81518110614e4a57614e4a615a6e565b602002602001018181525050868181518110614e6857614e68615a6e565b602002602001015160200151600160028110614e8657614e86615a6e565b602002015184614e97836006615b89565b614ea2906005615acc565b81518110614eb257614eb2615a6e565b602090810291909101015280614ec781615bc6565b915050614c99565b50602082602086026020860160085afa905080614eeb57600080fd5b5051151595945050505050565b60606000614f058361552a565b600101905060008167ffffffffffffffff811115614f2557614f25615ae4565b6040519080825280601f01601f191660200182016040528015614f4f576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084614f5957509392505050565b600080614fc16158b5565b6000614fe0604051806040016040528060008152602001600081525090565b8783526020830187905260408084018790528160608560075afa91508161500657600080fd5b8051602090910151909890975095505050505050565b6000806150276158d3565b8781526020810187905260408101869052606081018590526080810184905261504f8161560d565b6060810151608090910151909890975095505050505050565b6002828261507581615bc6565b93506090811061508757615087615a6e565b602002015282828261509881615bc6565b9350609081106150aa576150aa615a6e565b6020020152505050565b600182826150c181615bc6565b9350609081106150d3576150d3615a6e565b60200201528382826150e481615bc6565b9350609081106150f6576150f6615a6e565b602002015282828261510781615bc6565b93506090811061511957615119615a6e565b602002015250505050565b600080838363ffffffff166090811061513f5761513f615a6e565b60200201818152505060006151718484602061515b9190615c15565b615166906001615c41565b63ffffffff16615648565b51905061517d8161567e565b93525090919050565b6000615190615816565b615198615897565b6020808352828101819052604083018190526060830186905260808301859052600080516020615cd483398151915260a08401526000908260c08560055afa9050806151e357600080fd5b5051949350505050565b6000816000036151fc57600080fd5b600080516020615cd4833981519152615214836157f2565b84099392505050565b6000600080516020615cd483398151915282600080516020615cd483398151915285870908949350505050565b6000805b60208110156152c35760ff8085169081146152aa5760089490941c93600080516020615cd483398151915287826054811061528b5761528b615a6e565b6020020151600080516020615cd48339815191528689090893506152b0565b506152c3565b506152bc600182615acc565b905061524e565b5090949350505050565b6000806152d86158d3565b606081018590526080810184905260005b60208110156153ba5760ff8088169081146153a157601088901c9760081c60ff168a8a8381811061531c5761531c615a6e565b905060200201358460006005811061533657615336615a6e565b60200201528a8a615348846001615acc565b81811061535757615357615a6e565b905060200201358460016005811061537157615371615a6e565b60200201528b816054811061538857615388615a6e565b6020020151604085015261539b8461560d565b506153a7565b506153ba565b506153b3600282615acc565b90506152e9565b50606081015160809091015190999098509650505050505050565b60008060006153f7604051806040016040528060008152602001600081525090565b6153ff6158f1565b888152602081018890526040808201889052606082018790528260808360065afa92508261542c57600080fd5b508051602090910151909890975095505050505050565b6000805b60208110156154da5760ff8085169081146154c157601085901c9460081c60ff16600080516020615cd483398151915285600080516020615cd48339815191528b846054811061549957615499615a6e565b60200201518b8b878181106154b0576154b0615a6e565b9050602002013509089450506154c7565b506154da565b506154d3600282615acc565b9050615447565b509095945050505050565b60008061551d868686615518877f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47615bfe565b6153d5565b9150915094509492505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310615573577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061559f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106155bd57662386f26fc10000830492506010015b6305f5e10083106155d5576305f5e100830492506008015b61271083106155e957612710830492506004015b606483106155fb576064830492506002015b600a8310615607576001015b92915050565b600060406020830160608460075afa90508061562857600080fd5b60406060830160806020850160065afa90508061564457600080fd5b5050565b615650615897565b6000602082848660026107d05a03fa9050808061566957fe5b508061567757615677615c69565b5092915050565b6000816157d18160008190506008817eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff16901b6008827fff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff0016901c1790506010817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff16901b6010827fffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff000016901c1790506020817bffffffff00000000ffffffff00000000ffffffff00000000ffffffff16901b6020827fffffffff00000000ffffffff00000000ffffffff00000000ffffffff0000000016901c17905060408177ffffffffffffffff0000000000000000ffffffffffffffff16901b6040827fffffffffffffffff0000000000000000ffffffffffffffff000000000000000016901c179050608081901b608082901c179050919050565b90506157eb600080516020615cd483398151915282615c98565b9392505050565b6000615607826158116002600080516020615cd4833981519152615bfe565b615186565b6040518060c001604052806006906020820280368337509192915050565b604051806040016040528061584761590f565b815260200161585461590f565b905290565b60405180610a8001604052806054906020820280368337509192915050565b6040518061120001604052806090906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b6040518060a001604052806005906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b60008083601f84011261593f57600080fd5b50813567ffffffffffffffff81111561595757600080fd5b6020830191508360208260051b850101111561597257600080fd5b9250929050565b60008060008060006060868803121561599157600080fd5b853567ffffffffffffffff808211156159a957600080fd5b6159b589838a0161592d565b909750955060208801359150808211156159ce57600080fd5b506159db8882890161592d565b96999598509660400135949350505050565b60005b83811015615a085781810151838201526020016159f0565b83811115615a17576000848401525b50505050565b6020815260008251806020840152615a3c8160408501602087016159ed565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115615adf57615adf615a9d565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008451615b258184602089016159ed565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551615b61816001850160208a016159ed565b60019201918201528351615b7c8160028401602088016159ed565b0160020195945050505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615bc157615bc1615a9d565b500290565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615bf757615bf7615a9d565b5060010190565b600082821015615c1057615c10615a9d565b500390565b600063ffffffff80831681851681830481118215151615615c3857615c38615a9d565b02949350505050565b600063ffffffff808316818516808303821115615c6057615c60615a9d565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082615cce577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50069056fe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a164736f6c634300080f000a", + "key": "0x783e0404bdc19206cfb81beed0844473471141076bd03986d5bc87bc38ba4739" + }, + "0x8a791620dd6260079bf849dc5567adc3f2fdc318": { + "balance": "0", + "nonce": 1, + "root": "0xdb8c5f14d9f9e21db7341b36bd47859d7fe837a377b5ebf8650aa9f3242724f1", + "codeHash": "0x1f958654ab06a152993e7a0ae7b6dbb0d4b19265cc9337b8789fe1353bd9dc35", + "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106d9565b610224565b6100a86100a33660046106f4565b610296565b6040516100b59190610777565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106d9565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ea565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060b565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006106357fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038390556040805173ffffffffffffffffffffffffffffffffffffffff8084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d457600080fd5b919050565b6000602082840312156106eb57600080fd5b610412826106b0565b60008060006040848603121561070957600080fd5b610712846106b0565b9250602084013567ffffffffffffffff8082111561072f57600080fd5b818601915086601f83011261074357600080fd5b81358181111561075257600080fd5b87602082850101111561076457600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a457858101830151858201604001528201610788565b818111156107b6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", + "storage": { + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "67d269191c92caf3cd7723f116c85e6e9bf55933", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "5fbdb2315678afecb367f032d93f642f64180aa3" + }, + "key": "0x52f57297d97a84de7bdf53a239d5f1c446e6ff8e4e0d175868a241ddff7729d8" + }, + "0x8f86403a4de0bb5791fa46b8e795c547942fe4cf": { + "balance": "0", + "nonce": 1, + "root": "0x01f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507b", + "codeHash": "0x06c06cf54d334a8e7c702bf23dd1f1991ba75234b23569bdab7d525118830ef3", + "code": "0x60806040526004361061030c5760003560e01c80637b3c71d31161019a578063c01f9e37116100e1578063ea0217cf1161008a578063f23a6e6111610064578063f23a6e6114610a6d578063f8ce560a14610ab2578063fc0c546a14610ad257600080fd5b8063ea0217cf14610a0d578063eb9019d414610a2d578063ece40cc114610a4d57600080fd5b8063d33219b4116100bb578063d33219b414610974578063dd4e2ba514610993578063deaaa7cc146109d957600080fd5b8063c01f9e3714610907578063c28bc2fa14610941578063c59057e41461095457600080fd5b80639a802a6d11610143578063ab58fb8e1161011d578063ab58fb8e1461088d578063b58131b0146108ad578063bc197c81146108c257600080fd5b80639a802a6d14610838578063a7713a7014610858578063a890c9101461086d57600080fd5b806386489ba91161017457806386489ba9146107d857806391ddadf4146107f857806397c3d3341461082457600080fd5b80637b3c71d3146107705780637d5e81e21461079057806384b0196e146107b057600080fd5b80633932abb11161025e578063544ffc9c116102075780635f398a14116101e15780635f398a141461071057806360c4247f1461073057806370b0f6601461075057600080fd5b8063544ffc9c1461068557806354fd4d50146106db57806356781388146106f057600080fd5b806343859632116102385780634385963214610605578063452115d6146106505780634bf5d7e91461067057600080fd5b80633932abb1146105a35780633bccf4fd146105b85780633e4f49e6146105d857600080fd5b8063143489d0116102c05780632656227d1161029a5780632656227d146105255780632d63f693146105385780632fe3e2611461056f57600080fd5b8063143489d014610436578063150b7a0214610490578063160cbed71461050557600080fd5b806303420181116102f157806303420181146103d457806306f3f9e6146103f457806306fdde031461041457600080fd5b806301ffc9a71461037c57806302a251a3146103b157600080fd5b36610377573061031a610af3565b6001600160a01b0316146103755760405162461bcd60e51b815260206004820152601f60248201527f476f7665726e6f723a206d7573742073656e6420746f206578656375746f720060448201526064015b60405180910390fd5b005b600080fd5b34801561038857600080fd5b5061039c610397366004614bba565b610b0d565b60405190151581526020015b60405180910390f35b3480156103bd57600080fd5b506103c6610b1e565b6040519081526020016103a8565b3480156103e057600080fd5b506103c66103ef366004614d3c565b610b2a565b34801561040057600080fd5b5061037561040f366004614de3565b610c22565b34801561042057600080fd5b50610429610cdc565b6040516103a89190614e58565b34801561044257600080fd5b50610478610451366004614de3565b600090815260fe60205260409020546801000000000000000090046001600160a01b031690565b6040516001600160a01b0390911681526020016103a8565b34801561049c57600080fd5b506104d46104ab366004614e80565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016103a8565b34801561051157600080fd5b506103c661052036600461505a565b610d6e565b6103c661053336600461505a565b611014565b34801561054457600080fd5b506103c6610553366004614de3565b600090815260fe602052604090205467ffffffffffffffff1690565b34801561057b57600080fd5b506103c67fb3b3f3b703cd84ce352197dcff232b1b5d3cfb2025ce47cf04742d0651f1af8881565b3480156105af57600080fd5b506103c661117a565b3480156105c457600080fd5b506103c66105d33660046150ea565b611186565b3480156105e457600080fd5b506105f86105f3366004614de3565b6111fc565b6040516103a89190615167565b34801561061157600080fd5b5061039c6106203660046151a8565b6000828152610161602090815260408083206001600160a01b038516845260030190915290205460ff1692915050565b34801561065c57600080fd5b506103c661066b36600461505a565b611207565b34801561067c57600080fd5b50610429611338565b34801561069157600080fd5b506106c06106a0366004614de3565b600090815261016160205260409020805460018201546002909201549092565b604080519384526020840192909252908201526060016103a8565b3480156106e757600080fd5b506104296113fe565b3480156106fc57600080fd5b506103c661070b3660046151d8565b611408565b34801561071c57600080fd5b506103c661072b366004615204565b611431565b34801561073c57600080fd5b506103c661074b366004614de3565b61147b565b34801561075c57600080fd5b5061037561076b366004614de3565b611570565b34801561077c57600080fd5b506103c661078b366004615288565b611627565b34801561079c57600080fd5b506103c66107ab3660046152e2565b61166f565b3480156107bc57600080fd5b506107c5611686565b6040516103a897969594939291906153d2565b3480156107e457600080fd5b506103756107f336600461544e565b611748565b34801561080457600080fd5b5061080d61192a565b60405165ffffffffffff90911681526020016103a8565b34801561083057600080fd5b5060646103c6565b34801561084457600080fd5b506103c66108533660046154a7565b6119b7565b34801561086457600080fd5b506103c66119ce565b34801561087957600080fd5b50610375610888366004615500565b611a10565b34801561089957600080fd5b506103c66108a8366004614de3565b611ac7565b3480156108b957600080fd5b506103c6611b7c565b3480156108ce57600080fd5b506104d46108dd36600461551d565b7fbc197c810000000000000000000000000000000000000000000000000000000095945050505050565b34801561091357600080fd5b506103c6610922366004614de3565b600090815260fe602052604090206001015467ffffffffffffffff1690565b61037561094f3660046155b1565b611b88565b34801561096057600080fd5b506103c661096f36600461505a565b611cbe565b34801561098057600080fd5b506101f8546001600160a01b0316610478565b34801561099f57600080fd5b506040805180820190915260208082527f737570706f72743d627261766f2671756f72756d3d666f722c6162737461696e90820152610429565b3480156109e557600080fd5b506103c67f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f81565b348015610a1957600080fd5b50610375610a28366004614de3565b611cf8565b348015610a3957600080fd5b506103c6610a483660046155f5565b611daf565b348015610a5957600080fd5b50610375610a68366004614de3565b611dd0565b348015610a7957600080fd5b506104d4610a88366004615621565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b348015610abe57600080fd5b506103c6610acd366004614de3565b611e87565b348015610ade57600080fd5b5061019354610478906001600160a01b031681565b6000610b086101f8546001600160a01b031690565b905090565b6000610b1882611e92565b92915050565b6000610b086101305490565b600080610bce610bc67fb3b3f3b703cd84ce352197dcff232b1b5d3cfb2025ce47cf04742d0651f1af888c8c8c8c604051610b6692919061568a565b60405180910390208b80519060200120604051602001610bab959493929190948552602085019390935260ff9190911660408401526060830152608082015260a00190565b60405160208183030381529060405280519060200120611ee8565b868686611f30565b9050610c148a828b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d9250611f4e915050565b9a9950505050505050505050565b610c2a610af3565b6001600160a01b0316336001600160a01b031614610c8a5760405162461bcd60e51b815260206004820152601860248201527f476f7665726e6f723a206f6e6c79476f7665726e616e63650000000000000000604482015260640161036c565b30610c93610af3565b6001600160a01b031614610cd05760008036604051610cb392919061568a565b604051809103902090505b80610cc960ff6120be565b03610cbe57505b610cd98161217b565b50565b606060fd8054610ceb9061569a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d179061569a565b8015610d645780601f10610d3957610100808354040283529160200191610d64565b820191906000526020600020905b815481529060010190602001808311610d4757829003601f168201915b5050505050905090565b600080610d7d86868686611cbe565b90506004610d8a826111fc565b6007811115610d9b57610d9b615138565b14610e0e5760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a2070726f706f73616c206e6f742073756363657373667560448201527f6c00000000000000000000000000000000000000000000000000000000000000606482015260840161036c565b6101f854604080517ff27a0c9200000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163f27a0c929160048083019260209291908290030181865afa158015610e72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9691906156ed565b6101f8546040517fb1c5f4270000000000000000000000000000000000000000000000000000000081529192506001600160a01b03169063b1c5f42790610eea908a908a908a906000908b90600401615794565b602060405180830381865afa158015610f07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2b91906156ed565b60008381526101f96020526040808220929092556101f85491517f8f2a0bb00000000000000000000000000000000000000000000000000000000081526001600160a01b0390921691638f2a0bb091610f91918b918b918b91908b9089906004016157e2565b600060405180830381600087803b158015610fab57600080fd5b505af1158015610fbf573d6000803e3d6000fd5b505050507f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda2892828242610ff19190615869565b604080519283526020830191909152015b60405180910390a15095945050505050565b60008061102386868686611cbe565b90506000611030826111fc565b9050600481600781111561104657611046615138565b14806110635750600581600781111561106157611061615138565b145b6110d55760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a2070726f706f73616c206e6f742073756363657373667560448201527f6c00000000000000000000000000000000000000000000000000000000000000606482015260840161036c565b600082815260fe60205260409081902060020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f906111419084815260200190565b60405180910390a1611156828888888861231c565b61116382888888886123be565b61117082888888886123cb565b5095945050505050565b6000610b0861012f5490565b604080517f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f602082015290810186905260ff8516606082015260009081906111d490610bc690608001610bab565b90506111f187828860405180602001604052806000815250612411565b979650505050505050565b6000610b1882612434565b60008061121686868686611cbe565b90506000611223826111fc565b600781111561123457611234615138565b146112815760405162461bcd60e51b815260206004820152601c60248201527f476f7665726e6f723a20746f6f206c61746520746f2063616e63656c00000000604482015260640161036c565b600081815260fe60205260409020546801000000000000000090046001600160a01b0316336001600160a01b0316146113225760405162461bcd60e51b815260206004820152602260248201527f476f7665726e6f723a206f6e6c792070726f706f7365722063616e2063616e6360448201527f656c000000000000000000000000000000000000000000000000000000000000606482015260840161036c565b61132e868686866125b3565b9695505050505050565b61019354604080517f4bf5d7e900000000000000000000000000000000000000000000000000000000815290516060926001600160a01b031691634bf5d7e99160048083019260009291908290030181865afa9250505080156113bd57506040513d6000823e601f3d908101601f191682016040526113ba9190810190615881565b60015b6113f9575060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b919050565b6060610b086125c1565b60008033905061142984828560405180602001604052806000815250612411565b949350505050565b6000803390506111f187828888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250611f4e915050565b6101c7546000908082036114945750506101c654919050565b60006101c76114a46001846158ef565b815481106114b4576114b4615906565b60009182526020918290206040805180820190915291015463ffffffff81168083526401000000009091047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16928201929092529150841061153557602001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169392505050565b61154a61154185612664565b6101c7906126e4565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16949350505050565b611578610af3565b6001600160a01b0316336001600160a01b0316146115d85760405162461bcd60e51b815260206004820152601860248201527f476f7665726e6f723a206f6e6c79476f7665726e616e63650000000000000000604482015260640161036c565b306115e1610af3565b6001600160a01b03161461161e576000803660405161160192919061568a565b604051809103902090505b8061161760ff6120be565b0361160c57505b610cd9816127ad565b60008033905061132e86828787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061241192505050565b600061167d858585856127f0565b95945050505050565b6000606080600080600060606065546000801b1480156116a65750606654155b6116f25760405162461bcd60e51b815260206004820152601560248201527f4549503731323a20556e696e697469616c697a65640000000000000000000000604482015260640161036c565b6116fa612d25565b611702612d34565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b600054610100900460ff16158080156117685750600054600160ff909116105b806117825750303b158015611782575060005460ff166001145b6117f45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161036c565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561185257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6118906040518060400160405280600f81526020017f55706772616465476f7665726e6f720000000000000000000000000000000000815250612d43565b61189b858585612dda565b6118a3612e67565b6118ac87612ee6565b6118b582612f6c565b6118be86612ff2565b801561192157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b61019354604080517f91ddadf400000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916391ddadf49160048083019260209291908290030181865afa9250505080156119aa575060408051601f3d908101601f191682019092526119a791810190615935565b60015b6113f957610b0843613078565b60006119c48484846130f6565b90505b9392505050565b6101c75460009015611a08576119e56101c7613186565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16905090565b506101c65490565b611a18610af3565b6001600160a01b0316336001600160a01b031614611a785760405162461bcd60e51b815260206004820152601860248201527f476f7665726e6f723a206f6e6c79476f7665726e616e63650000000000000000604482015260640161036c565b30611a81610af3565b6001600160a01b031614611abe5760008036604051611aa192919061568a565b604051809103902090505b80611ab760ff6120be565b03611aac57505b610cd9816131cc565b6101f85460008281526101f960205260408082205490517fd45c44350000000000000000000000000000000000000000000000000000000081526004810191909152909182916001600160a01b039091169063d45c443590602401602060405180830381865afa158015611b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6391906156ed565b905080600114611b7357806119c7565b60009392505050565b6000610b086101315490565b611b90610af3565b6001600160a01b0316336001600160a01b031614611bf05760405162461bcd60e51b815260206004820152601860248201527f476f7665726e6f723a206f6e6c79476f7665726e616e63650000000000000000604482015260640161036c565b30611bf9610af3565b6001600160a01b031614611c365760008036604051611c1992919061568a565b604051809103902090505b80611c2f60ff6120be565b03611c2457505b600080856001600160a01b0316858585604051611c5492919061568a565b60006040518083038185875af1925050503d8060008114611c91576040519150601f19603f3d011682016040523d82523d6000602084013e611c96565b606091505b50915091506119218282604051806060016040528060288152602001615d306028913961324f565b600084848484604051602001611cd7949392919061595d565b60408051601f19818403018152919052805160209091012095945050505050565b611d00610af3565b6001600160a01b0316336001600160a01b031614611d605760405162461bcd60e51b815260206004820152601860248201527f476f7665726e6f723a206f6e6c79476f7665726e616e63650000000000000000604482015260640161036c565b30611d69610af3565b6001600160a01b031614611da65760008036604051611d8992919061568a565b604051809103902090505b80611d9f60ff6120be565b03611d9457505b610cd981613268565b60006119c78383611dcb60408051602081019091526000815290565b6130f6565b611dd8610af3565b6001600160a01b0316336001600160a01b031614611e385760405162461bcd60e51b815260206004820152601860248201527f476f7665726e6f723a206f6e6c79476f7665726e616e63650000000000000000604482015260640161036c565b30611e41610af3565b6001600160a01b031614611e7e5760008036604051611e6192919061568a565b604051809103902090505b80611e7760ff6120be565b03611e6c57505b610cd981613321565b6000610b1882613364565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f6e665ced000000000000000000000000000000000000000000000000000000001480610b185750610b188261340c565b6000610b18611ef56135b6565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000611f41878787876135c0565b9150915061117081613684565b600085815260fe602052604081206001611f67886111fc565b6007811115611f7857611f78615138565b14611feb5760405162461bcd60e51b815260206004820152602360248201527f476f7665726e6f723a20766f7465206e6f742063757272656e746c792061637460448201527f6976650000000000000000000000000000000000000000000000000000000000606482015260840161036c565b805460009061200690889067ffffffffffffffff16866130f6565b905061201588888884886137e9565b835160000361206a57866001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda48988848960405161205d94939291906159a8565b60405180910390a26111f1565b866001600160a01b03167fe2babfbac5889a709b63bb7f598b324e08bc5a4fb9ec647fb3cbc9ec07eb871289888489896040516120ab9594939291906159d0565b60405180910390a2979650505050505050565b60006120e68254600f81810b700100000000000000000000000000000000909204900b131590565b1561211d576040517f3db2a12a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b508054600f0b6000818152600180840160205260408220805492905583547fffffffffffffffffffffffffffffffff000000000000000000000000000000001692016fffffffffffffffffffffffffffffffff169190911790915590565b60648111156122185760405162461bcd60e51b815260206004820152604360248201527f476f7665726e6f72566f74657351756f72756d4672616374696f6e3a2071756f60448201527f72756d4e756d657261746f72206f7665722071756f72756d44656e6f6d696e6160648201527f746f720000000000000000000000000000000000000000000000000000000000608482015260a40161036c565b60006122226119ce565b9050801580159061223457506101c754155b156122af5760408051808201909152600081526101c79060208101612258846139be565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b6122dd6122ca6122bd61192a565b65ffffffffffff16612664565b6122d3846139be565b6101c79190613a52565b505060408051828152602081018490527f0553476bf02ef2726e8ce5ced78d63e26e602e4a2257b1f559418e24b4633997910160405180910390a15050565b30612325610af3565b6001600160a01b0316146123b75760005b84518110156123b557306001600160a01b031685828151811061235b5761235b615906565b60200260200101516001600160a01b0316036123a5576123a583828151811061238657612386615906565b60200260200101518051906020012060ff613a6d90919063ffffffff16565b6123ae81615a16565b9050612336565b505b5050505050565b6123b78585858585613abf565b306123d4610af3565b6001600160a01b0316146123b75760ff54600f81810b700100000000000000000000000000000000909204900b13156123b757600060ff556123b7565b600061167d8585858561242f60408051602081019091526000815290565b611f4e565b60008061244083613b4d565b9050600481600781111561245657612456615138565b146124615792915050565b60008381526101f960205260409020548061247d575092915050565b6101f8546040517f2ab0f529000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b0390911690632ab0f52990602401602060405180830381865afa1580156124e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125049190615a30565b15612513575060079392505050565b6101f8546040517f584b153e000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063584b153e90602401602060405180830381865afa158015612576573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259a9190615a30565b156125a9575060059392505050565b5060029392505050565b600061167d85858585613c90565b60606125ec7f0000000000000000000000000000000000000000000000000000000000000001613d5f565b6126157f0000000000000000000000000000000000000000000000000000000000000000613d5f565b61263e7f0000000000000000000000000000000000000000000000000000000000000000613d5f565b60405160200161265093929190615a52565b604051602081830303815290604052905090565b600063ffffffff8211156126e05760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201527f3220626974730000000000000000000000000000000000000000000000000000606482015260840161036c565b5090565b8154600090818160058111156127415760006126ff84613dff565b61270990856158ef565b60008881526020902090915081015463ffffffff90811690871610156127315780915061273f565b61273c816001615869565b92505b505b600061274f87878585613ee7565b905080156127a057612774876127666001846158ef565b600091825260209091200190565b5464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166111f1565b6000979650505050505050565b61012f5460408051918252602082018390527fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a93910160405180910390a161012f55565b6000336127fd8184613f45565b6128495760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a2070726f706f7365722072657374726963746564000000604482015260640161036c565b600061285361192a565b65ffffffffffff169050612865611b7c565b61287483610a486001856158ef565b10156128e85760405162461bcd60e51b815260206004820152603160248201527f476f7665726e6f723a2070726f706f73657220766f7465732062656c6f77207060448201527f726f706f73616c207468726573686f6c64000000000000000000000000000000606482015260840161036c565b60006128fd8888888880519060200120611cbe565b905086518851146129765760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a20696e76616c69642070726f706f73616c206c656e677460448201527f6800000000000000000000000000000000000000000000000000000000000000606482015260840161036c565b85518851146129ed5760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a20696e76616c69642070726f706f73616c206c656e677460448201527f6800000000000000000000000000000000000000000000000000000000000000606482015260840161036c565b6000885111612a3e5760405162461bcd60e51b815260206004820152601860248201527f476f7665726e6f723a20656d7074792070726f706f73616c0000000000000000604482015260640161036c565b600081815260fe602052604090205467ffffffffffffffff1615612aca5760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a2070726f706f73616c20616c726561647920657869737460448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161036c565b6000612ad461117a565b612ade9084615869565b90506000612aea610b1e565b612af49083615869565b90506040518060e00160405280612b0a84614095565b67ffffffffffffffff1681526001600160a01b038716602082015260006040820152606001612b3883614095565b67ffffffffffffffff9081168252600060208084018290526040808501839052606094850183905288835260fe8252918290208551815492870151878501519186167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317680100000000000000006001600160a01b039094168402177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000060e09290921c91909102178155938501516080860151908416921c0217600183015560a08301516002909201805460c0909401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009094169215157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1692909217610100931515939093029290921790558a517f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e091859188918e918e91811115612cc257612cc2614c56565b604051908082528060200260200182016040528015612cf557816020015b6060815260200190600190039081612ce05790505b508d88888f604051612d0f99989796959493929190615ac8565b60405180910390a1509098975050505050505050565b606060678054610ceb9061569a565b606060688054610ceb9061569a565b600054610100900460ff16612dc05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b612dd181612dcc6113fe565b614115565b610cd9816141ba565b600054610100900460ff16612e575760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b612e62838383614247565b505050565b600054610100900460ff16612ee45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b565b600054610100900460ff16612f635760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b610cd9816142df565b600054610100900460ff16612fe95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b610cd981614397565b600054610100900460ff1661306f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b610cd981614414565b600065ffffffffffff8211156126e05760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201527f3820626974730000000000000000000000000000000000000000000000000000606482015260840161036c565b610193546040517f3a46b1a80000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482018590526000921690633a46b1a890604401602060405180830381865afa158015613162573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c491906156ed565b80546000908015611b73576131a0836127666001846158ef565b5464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166119c7565b6101f854604080516001600160a01b03928316815291831660208301527f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401910160405180910390a16101f880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060831561325e5750816119c7565b6119c78383614491565b600081116132de5760405162461bcd60e51b815260206004820152602760248201527f476f7665726e6f7253657474696e67733a20766f74696e6720706572696f642060448201527f746f6f206c6f7700000000000000000000000000000000000000000000000000606482015260840161036c565b6101305460408051918252602082018390527f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e8828910160405180910390a161013055565b6101315460408051918252602082018390527fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc05461910160405180910390a161013155565b600060646133718361147b565b610193546040517f8e539e8c000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b0390911690638e539e8c90602401602060405180830381865afa1580156133d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f891906156ed565b6134029190615ba0565b610b189190615bee565b60007f51159c06000000000000000000000000000000000000000000000000000000007fc6fba1f8000000000000000000000000000000000000000000000000000000007fbf26d897000000000000000000000000000000000000000000000000000000007f79dd796f000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000086168214806134e657507fffffffff00000000000000000000000000000000000000000000000000000000868116908216145b8061351557507fffffffff00000000000000000000000000000000000000000000000000000000868116908516145b8061356157507fffffffff0000000000000000000000000000000000000000000000000000000086167f4e2312e000000000000000000000000000000000000000000000000000000000145b8061132e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008716149695505050505050565b6000610b086144bb565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156135f7575060009050600361367b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561364b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166136745760006001925092505061367b565b9150600090505b94509492505050565b600081600481111561369857613698615138565b036136a05750565b60018160048111156136b4576136b4615138565b036137015760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161036c565b600281600481111561371557613715615138565b036137625760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161036c565b600381600481111561377657613776615138565b03610cd95760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161036c565b6000858152610161602090815260408083206001600160a01b0388168452600381019092529091205460ff16156138885760405162461bcd60e51b815260206004820152602760248201527f476f7665726e6f72566f74696e6753696d706c653a20766f746520616c72656160448201527f6479206361737400000000000000000000000000000000000000000000000000606482015260840161036c565b6001600160a01b0385166000908152600382016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560ff84166138f257828160000160008282546138e79190615869565b909155506123b59050565b60001960ff85160161391257828160010160008282546138e79190615869565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff85160161395057828160020160008282546138e79190615869565b60405162461bcd60e51b815260206004820152603560248201527f476f7665726e6f72566f74696e6753696d706c653a20696e76616c696420766160448201527f6c756520666f7220656e756d20566f7465547970650000000000000000000000606482015260840161036c565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8211156126e05760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203260448201527f3234206269747300000000000000000000000000000000000000000000000000606482015260840161036c565b600080613a6085858561452f565b915091505b935093915050565b815470010000000000000000000000000000000090819004600f0b6000818152600180860160205260409091209390935583546fffffffffffffffffffffffffffffffff908116939091011602179055565b6101f8546040517fe38335e50000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063e38335e5903490613b14908890889088906000908990600401615794565b6000604051808303818588803b158015613b2d57600080fd5b505af1158015613b41573d6000803e3d6000fd5b50505050505050505050565b600081815260fe60205260408120600281015460ff1615613b715750600792915050565b6002810154610100900460ff1615613b8c5750600292915050565b600083815260fe602052604081205467ffffffffffffffff1690819003613bf55760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a20756e6b6e6f776e2070726f706f73616c206964000000604482015260640161036c565b6000613bff61192a565b65ffffffffffff169050808210613c1b57506000949350505050565b600085815260fe602052604090206001015467ffffffffffffffff16818110613c4a5750600195945050505050565b613c5386614726565b8015613c7357506000868152610161602052604090208054600190910154115b15613c845750600495945050505050565b50600395945050505050565b600080613c9f86868686614774565b60008181526101f960205260409020549091501561167d576101f85460008281526101f96020526040908190205490517fc4d252f50000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163c4d252f591613d149160040190815260200190565b600060405180830381600087803b158015613d2e57600080fd5b505af1158015613d42573d6000803e3d6000fd5b50505060008281526101f960205260408120555095945050505050565b60606000613d6c8361489d565b600101905060008167ffffffffffffffff811115613d8c57613d8c614c56565b6040519080825280601f01601f191660200182016040528015613db6576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084613dc057509392505050565b600081600003613e1157506000919050565b60006001613e1e8461497f565b901c6001901b90506001818481613e3757613e37615bbf565b048201901c90506001818481613e4f57613e4f615bbf565b048201901c90506001818481613e6757613e67615bbf565b048201901c90506001818481613e7f57613e7f615bbf565b048201901c90506001818481613e9757613e97615bbf565b048201901c90506001818481613eaf57613eaf615bbf565b048201901c90506001818481613ec757613ec7615bbf565b048201901c90506119c781828581613ee157613ee1615bbf565b04614a13565b60005b81831015613f3d576000613efe8484614a29565b60008781526020902090915063ffffffff86169082015463ffffffff161115613f2957809250613f37565b613f34816001615869565b93505b50613eea565b509392505050565b80516000906034811015613f5d576001915050610b18565b8281017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec01517fffffffffffffffffffffffff000000000000000000000000000000000000000081167f2370726f706f7365723d3078000000000000000000000000000000000000000014613fd757600192505050610b18565b600080613fe56028856158ef565b90505b838110156140745760008061403488848151811061400857614008615906565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016614a44565b915091508161404c5760019650505050505050610b18565b8060ff166004856001600160a01b0316901b17935050508061406d90615a16565b9050613fe8565b50856001600160a01b0316816001600160a01b031614935050505092915050565b600067ffffffffffffffff8211156126e05760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201527f3420626974730000000000000000000000000000000000000000000000000000606482015260840161036c565b600054610100900460ff166141925760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b606761419e8382615c6f565b5060686141ab8282615c6f565b50506000606581905560665550565b600054610100900460ff166142375760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b60fd6142438282615c6f565b5050565b600054610100900460ff166142c45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b6142cd836127ad565b6142d682613268565b612e6281613321565b600054610100900460ff1661435c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b61019380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600054610100900460ff16610cd05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b600054610100900460ff16611abe5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161036c565b8151156144a15781518083602001fd5b8060405162461bcd60e51b815260040161036c9190614e58565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6144e6614b30565b6144ee614b89565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8254600090819080156146b757600061454d876127666001856158ef565b60408051808201909152905463ffffffff8082168084526401000000009092047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16602084015291925090871610156145e45760405162461bcd60e51b815260206004820152601b60248201527f436865636b706f696e743a2064656372656173696e67206b6579730000000000604482015260640161036c565b805163ffffffff8088169116036146425784614605886127666001866158ef565b80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092166401000000000263ffffffff9092169190911790556146a7565b6040805180820190915263ffffffff80881682527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff80881660208085019182528b54600181018d5560008d81529190912094519151909216640100000000029216919091179101555b602001519250839150613a659050565b50506040805180820190915263ffffffff80851682527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff80851660208085019182528854600181018a5560008a815291822095519251909316640100000000029190931617920191909155905081613a65565b600081815261016160205260408120600281015460018201546147499190615869565b600084815260fe602052604090205461476b9067ffffffffffffffff16611e87565b11159392505050565b60008061478386868686611cbe565b90506000614790826111fc565b905060028160078111156147a6576147a6615138565b141580156147c6575060068160078111156147c3576147c3615138565b14155b80156147e4575060078160078111156147e1576147e1615138565b14155b6148305760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a2070726f706f73616c206e6f7420616374697665000000604482015260640161036c565b600082815260fe60205260409081902060020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055517f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c906110029084815260200190565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106148e6577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310614912576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061493057662386f26fc10000830492506010015b6305f5e1008310614948576305f5e100830492506008015b612710831061495c57612710830492506004015b6064831061496e576064830492506002015b600a8310610b185760010192915050565b600080608083901c1561499457608092831c92015b604083901c156149a657604092831c92015b602083901c156149b857602092831c92015b601083901c156149ca57601092831c92015b600883901c156149dc57600892831c92015b600483901c156149ee57600492831c92015b600283901c15614a0057600292831c92015b600183901c15610b185760010192915050565b6000818310614a2257816119c7565b5090919050565b6000614a386002848418615bee565b6119c790848416615869565b60008060f883901c602f81118015614a5f5750603a8160ff16105b15614a92576001947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd09091019350915050565b8060ff166040108015614aa8575060478160ff16105b15614adb576001947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc99091019350915050565b8060ff166060108015614af1575060678160ff16105b15614b24576001947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa99091019350915050565b50600093849350915050565b600080614b3b612d25565b805190915015614b52578051602090910120919050565b6065548015614b615792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b600080614b94612d34565b805190915015614bab578051602090910120919050565b6066548015614b615792915050565b600060208284031215614bcc57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146119c757600080fd5b803560ff811681146113f957600080fd5b60008083601f840112614c1f57600080fd5b50813567ffffffffffffffff811115614c3757600080fd5b602083019150836020828501011115614c4f57600080fd5b9250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614cae57614cae614c56565b604052919050565b600067ffffffffffffffff821115614cd057614cd0614c56565b50601f01601f191660200190565b6000614cf1614cec84614cb6565b614c85565b9050828152838383011115614d0557600080fd5b828260208301376000602084830101529392505050565b600082601f830112614d2d57600080fd5b6119c783833560208501614cde565b60008060008060008060008060e0898b031215614d5857600080fd5b88359750614d6860208a01614bfc565b9650604089013567ffffffffffffffff80821115614d8557600080fd5b614d918c838d01614c0d565b909850965060608b0135915080821115614daa57600080fd5b50614db78b828c01614d1c565b945050614dc660808a01614bfc565b925060a0890135915060c089013590509295985092959890939650565b600060208284031215614df557600080fd5b5035919050565b60005b83811015614e17578181015183820152602001614dff565b83811115614e26576000848401525b50505050565b60008151808452614e44816020860160208601614dfc565b601f01601f19169290920160200192915050565b6020815260006119c76020830184614e2c565b6001600160a01b0381168114610cd957600080fd5b60008060008060808587031215614e9657600080fd5b8435614ea181614e6b565b93506020850135614eb181614e6b565b925060408501359150606085013567ffffffffffffffff811115614ed457600080fd5b614ee087828801614d1c565b91505092959194509250565b600067ffffffffffffffff821115614f0657614f06614c56565b5060051b60200190565b600082601f830112614f2157600080fd5b81356020614f31614cec83614eec565b82815260059290921b84018101918181019086841115614f5057600080fd5b8286015b84811015614f74578035614f6781614e6b565b8352918301918301614f54565b509695505050505050565b600082601f830112614f9057600080fd5b81356020614fa0614cec83614eec565b82815260059290921b84018101918181019086841115614fbf57600080fd5b8286015b84811015614f745780358352918301918301614fc3565b600082601f830112614feb57600080fd5b81356020614ffb614cec83614eec565b82815260059290921b8401810191818101908684111561501a57600080fd5b8286015b84811015614f7457803567ffffffffffffffff81111561503e5760008081fd5b61504c8986838b0101614d1c565b84525091830191830161501e565b6000806000806080858703121561507057600080fd5b843567ffffffffffffffff8082111561508857600080fd5b61509488838901614f10565b955060208701359150808211156150aa57600080fd5b6150b688838901614f7f565b945060408701359150808211156150cc57600080fd5b506150d987828801614fda565b949793965093946060013593505050565b600080600080600060a0868803121561510257600080fd5b8535945061511260208701614bfc565b935061512060408701614bfc565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600883106151a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600080604083850312156151bb57600080fd5b8235915060208301356151cd81614e6b565b809150509250929050565b600080604083850312156151eb57600080fd5b823591506151fb60208401614bfc565b90509250929050565b60008060008060006080868803121561521c57600080fd5b8535945061522c60208701614bfc565b9350604086013567ffffffffffffffff8082111561524957600080fd5b61525589838a01614c0d565b9095509350606088013591508082111561526e57600080fd5b5061527b88828901614d1c565b9150509295509295909350565b6000806000806060858703121561529e57600080fd5b843593506152ae60208601614bfc565b9250604085013567ffffffffffffffff8111156152ca57600080fd5b6152d687828801614c0d565b95989497509550505050565b600080600080608085870312156152f857600080fd5b843567ffffffffffffffff8082111561531057600080fd5b61531c88838901614f10565b9550602087013591508082111561533257600080fd5b61533e88838901614f7f565b9450604087013591508082111561535457600080fd5b61536088838901614fda565b9350606087013591508082111561537657600080fd5b508501601f8101871361538857600080fd5b614ee087823560208401614cde565b600081518084526020808501945080840160005b838110156153c7578151875295820195908201906001016153ab565b509495945050505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e06020820152600061540d60e0830189614e2c565b828103604084015261541f8189614e2c565b90508660608401526001600160a01b03861660808401528460a084015282810360c0840152610c148185615397565b60008060008060008060c0878903121561546757600080fd5b863561547281614e6b565b9550602087013561548281614e6b565b95989597505050506040840135936060810135936080820135935060a0909101359150565b6000806000606084860312156154bc57600080fd5b83356154c781614e6b565b925060208401359150604084013567ffffffffffffffff8111156154ea57600080fd5b6154f686828701614d1c565b9150509250925092565b60006020828403121561551257600080fd5b81356119c781614e6b565b600080600080600060a0868803121561553557600080fd5b853561554081614e6b565b9450602086013561555081614e6b565b9350604086013567ffffffffffffffff8082111561556d57600080fd5b61557989838a01614f7f565b9450606088013591508082111561558f57600080fd5b61559b89838a01614f7f565b9350608088013591508082111561526e57600080fd5b600080600080606085870312156155c757600080fd5b84356155d281614e6b565b935060208501359250604085013567ffffffffffffffff8111156152ca57600080fd5b6000806040838503121561560857600080fd5b823561561381614e6b565b946020939093013593505050565b600080600080600060a0868803121561563957600080fd5b853561564481614e6b565b9450602086013561565481614e6b565b93506040860135925060608601359150608086013567ffffffffffffffff81111561567e57600080fd5b61527b88828901614d1c565b8183823760009101908152919050565b600181811c908216806156ae57607f821691505b6020821081036156e7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156156ff57600080fd5b5051919050565b600081518084526020808501945080840160005b838110156153c75781516001600160a01b03168752958201959082019060010161571a565b600081518084526020808501808196508360051b8101915082860160005b85811015615787578284038952615775848351614e2c565b9885019893509084019060010161575d565b5091979650505050505050565b60a0815260006157a760a0830188615706565b82810360208401526157b98188615397565b905082810360408401526157cd818761573f565b60608401959095525050608001529392505050565b60c0815260006157f560c0830189615706565b82810360208401526158078189615397565b9050828103604084015261581b818861573f565b60608401969096525050608081019290925260a0909101529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561587c5761587c61583a565b500190565b60006020828403121561589357600080fd5b815167ffffffffffffffff8111156158aa57600080fd5b8201601f810184136158bb57600080fd5b80516158c9614cec82614cb6565b8181528560208385010111156158de57600080fd5b61167d826020830160208601614dfc565b6000828210156159015761590161583a565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561594757600080fd5b815165ffffffffffff811681146119c757600080fd5b6080815260006159706080830187615706565b82810360208401526159828187615397565b90508281036040840152615996818661573f565b91505082606083015295945050505050565b84815260ff8416602082015282604082015260806060820152600061132e6080830184614e2c565b85815260ff8516602082015283604082015260a0606082015260006159f860a0830185614e2c565b8281036080840152615a0a8185614e2c565b98975050505050505050565b60006000198203615a2957615a2961583a565b5060010190565b600060208284031215615a4257600080fd5b815180151581146119c757600080fd5b60008451615a64818460208901614dfc565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551615aa0816001850160208a01614dfc565b60019201918201528351615abb816002840160208801614dfc565b0160020195945050505050565b60006101208b835260206001600160a01b038c1681850152816040850152615af28285018c615706565b91508382036060850152615b06828b615397565b915083820360808501528189518084528284019150828160051b850101838c0160005b83811015615b5757601f19878403018552615b45838351614e2c565b94860194925090850190600101615b29565b505086810360a0880152615b6b818c61573f565b9450505050508560c08401528460e0840152828103610100840152615b908185614e2c565b9c9b505050505050505050505050565b6000816000190483118215151615615bba57615bba61583a565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615c24577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b601f821115612e6257600081815260208120601f850160051c81016020861015615c505750805b601f850160051c820191505b818110156123b557828155600101615c5c565b815167ffffffffffffffff811115615c8957615c89614c56565b615c9d81615c97845461569a565b84615c29565b602080601f831160018114615cd25760008415615cba5750858301515b600019600386901b1c1916600185901b1785556123b5565b600085815260208120601f198616915b82811015615d0157888601518255948401946001909101908401615ce2565b5085821015615d1f5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe476f7665726e6f723a2072656c617920726576657274656420776974686f7574206d657373616765a164736f6c634300080f000a", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "ff" + }, + "key": "0x34aa4e0650a1aba101d77c9fada710ca3c47daa0685afb73e974afd9dadfa187" + }, + "0x959922be3caee4b8cd9a407cc3ac1c251c2007b1": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x3bc2430cf882220272199488869834ed1ebb7684fb14afb0fbcfd40f5505edf7", + "code": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c806312e64a7214610046578063c423b1e81461006e578063dc8b50381461008f575b600080fd5b6100596100543660046117b2565b6100db565b60405190151581526020015b60405180910390f35b61008161007c366004611827565b6101a6565b6040516100659291906118f1565b6100b67f0000000000000000000000000b306bf915c4d645ff596e518faf3f9669b9701681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610065565b6040517fc423b1e800000000000000000000000000000000000000000000000000000000815260009081908190309063c423b1e890610122908a908990899060040161190c565b600060405180830381865afa15801561013f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610185919081019061199c565b9150915081801561019b575061019b868261074b565b979650505050505050565b600060606002845110156102275760405162461bcd60e51b815260206004820152602960248201527f5a4b4d65726b6c65547269653a2070726f76696465642070726f6f662069732060448201527f746f6f2073686f7274000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61027e84600186516102399190611a5d565b8151811061024957610249611a74565b602002602001015180516020909101207f950654da67865a81bc70e45f3230f5179f08e29c66184bf746f71050f117b3b81490565b6102f05760405162461bcd60e51b815260206004820152602d60248201527f5a4b4d65726b6c65547269653a20746865206c617374206974656d206973206e60448201527f6f74206d61676963206861736800000000000000000000000000000000000000606482015260840161021e565b60006102fb86610767565b9050600061030886610846565b90506103526040805161010081019091528060008152600060208201819052604082018190526060808301829052608083015260a0820181905260c0820181905260e09091015290565b60408051602081019091526000808252835190918291829190829061037990600290611a5d565b90505b86818151811061038e5761038e611a74565b6020026020010151602001519550600060038111156103af576103af611aa3565b865160038111156103c2576103c2611aa3565b036104a05760006103d38983610939565b90508015610433578660200151861461042e5760405162461bcd60e51b815260206004820152601b60248201527f5a4b4d65726b6c65547269653a20696e76616c6964206b6579204c0000000000604482015260640161021e565b610486565b866040015186146104865760405162461bcd60e51b815260206004820152601b60248201527f5a4b4d65726b6c65547269653a20696e76616c6964206b657920520000000000604482015260640161021e565b61049887602001518860400151610996565b9550506106b5565b6001865160038111156104b5576104b5611aa3565b0361061857831580156104c6575082155b6105385760405162461bcd60e51b815260206004820152602660248201527f5a4b4d65726b6c65547269653a206475706c696361746564207465726d696e6160448201527f6c206e6f64650000000000000000000000000000000000000000000000000000606482015260840161021e565b87866060015114935083156107385761056b600160001b87606001516105668960a001518a60800151610a63565b610bff565b6080870151805160208102825260e0890151929750909350839115610611578e8860e00151148061059f5750898860e00151145b6106115760405162461bcd60e51b815260206004820152602260248201527f5a4b4d65726b6c65547269653a20696e76616c6964206b657920707265696d6160448201527f6765000000000000000000000000000000000000000000000000000000000000606482015260840161021e565b50506106b5565b60028651600381111561062d5761062d611aa3565b036106b5578315801561063e575082155b6106b05760405162461bcd60e51b815260206004820152602660248201527f5a4b4d65726b6c65547269653a206475706c696361746564207465726d696e6160448201527f6c206e6f64650000000000000000000000000000000000000000000000000000606482015260840161021e565b600192505b80600003610711578a851461070c5760405162461bcd60e51b815260206004820152601960248201527f5a4b4d65726b65547269653a20696e76616c696420726f6f7400000000000000604482015260640161021e565b610738565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0161037c565b50919b919a509098505050505050505050565b6000818051906020012083805190602001201490505b92915050565b600080600061077584610d77565b6040805180820182528381526020810183905290517f299e566000000000000000000000000000000000000000000000000000000000815292945090925073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000b306bf915c4d645ff596e518faf3f9669b97016169163299e5660916107fd91600401611ad2565b602060405180830381865afa15801561081a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083e9190611b03565b949350505050565b805160609060008167ffffffffffffffff811115610866576108666115f9565b60405190808252806020026020018201604052801561089f57816020015b61088c61159a565b8152602001906001900390816108845790505b50905060005b6108b0600184611a5d565b8110156109315760006108db8683815181106108ce576108ce611a74565b6020026020010151610d9f565b905060405180604001604052808784815181106108fa576108fa611a74565b602002602001015181526020018281525083838151811061091d5761091d611a74565b6020908102919091010152506001016108a5565b509392505050565b6000610100821061098c5760405162461bcd60e51b815260206004820152601c60248201527f5a4b4d65726b6c65547269653a20746f6f206c6f6e6720646570746800000000604482015260640161021e565b506001901b161590565b6040805180820182528381526020810183905290517f299e566000000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000b306bf915c4d645ff596e518faf3f9669b97016169163299e566091610a1b91600401611ad2565b602060405180830381865afa158015610a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5c9190611b03565b9392505050565b6000600182511015610add5760405162461bcd60e51b815260206004820152602b60248201527f5a4b547269654861736865723a20746f6f206665772076616c75657320666f7260448201527f205f76616c756548617368000000000000000000000000000000000000000000606482015260840161021e565b6000825167ffffffffffffffff811115610af957610af96115f9565b604051908082528060200260200182016040528015610b22578160200160208202803683370190505b50905060005b8351811015610bc8576001811b851663ffffffff1615610b8757610b64848281518110610b5757610b57611a74565b6020026020010151610767565b828281518110610b7657610b76611a74565b602002602001018181525050610bc0565b838181518110610b9957610b99611a74565b6020026020010151828281518110610bb357610bb3611a74565b6020026020010181815250505b600101610b28565b50600283511015610bf65780600081518110610be657610be6611a74565b6020026020010151915050610761565b61083e81611122565b6040805180820182528481526020810184905290517f299e56600000000000000000000000000000000000000000000000000000000081526000917f0000000000000000000000000b306bf915c4d645ff596e518faf3f9669b970169173ffffffffffffffffffffffffffffffffffffffff83169163299e566091610c879190600401611ad2565b602060405180830381865afa158015610ca4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc89190611b03565b6040805180820182528281526020810186905290517f299e566000000000000000000000000000000000000000000000000000000000815291965073ffffffffffffffffffffffffffffffffffffffff83169163299e566091610d2d91600401611ad2565b602060405180830381865afa158015610d4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6e9190611b03565b95945050505050565b60008082608081901b610d8a8260801c90565b610d948260801c90565b935093505050915091565b60408051610100810182526000808252602082018190529181018290526060808201839052608082015260a0810182905260c0810182905260e081019190915260408051610100810182526000808252602082018190529181018290526060808201839052608082015260a0810182905260c0810182905260e08101919091526000610e53846040805180820182526060815260006020918201528151808301909252828101825291519181019190915290565b90506000610e608261130c565b60ff16905080610e8b57610e7382611393565b6020840152610e8182611393565b60408401526110de565b6001810361101857610e9c82611393565b6060840152600080610ead84611431565b60ff16915091508163ffffffff166001148015610eca5750806001145b80610ee657508163ffffffff166004148015610ee65750806004145b610f585760405162461bcd60e51b815260206004820152602360248201527f4e6f64655265616465723a20696e76616c696420636f6d70726573736564466c60448201527f6167730000000000000000000000000000000000000000000000000000000000606482015260840161021e565b63ffffffff821660a08601528067ffffffffffffffff811115610f7d57610f7d6115f9565b604051908082528060200260200182016040528015610fa6578160200160208202803683370190505b50608086015260005b81811015610fe957610fc085611393565b86608001518281518110610fd657610fd6611a74565b6020908102919091010152600101610faf565b506000610ff58561130c565b60ff16905080156110105761100a85826114cb565b60e08701525b5050506110de565b600281146110de57600381036110965760405162461bcd60e51b815260206004820152602560248201527f4e6f64655265616465723a20756e657870656374656420726f6f74206e6f646560448201527f2074797065000000000000000000000000000000000000000000000000000000606482015260840161021e565b60405162461bcd60e51b815260206004820152601d60248201527f4e6f64655265616465723a20696e76616c6964206e6f64652074797065000000604482015260640161021e565b8060038111156110f0576110f0611aa3565b8390600381111561110357611103611aa3565b9081600381111561111657611116611aa3565b90525091949350505050565b600060048251101561119c5760405162461bcd60e51b815260206004820152602b60248201527f5a4b547269654861736865723a20746f6f206665772076616c75657320666f7260448201527f205f68617368456c656d73000000000000000000000000000000000000000000606482015260840161021e565b81517f0000000000000000000000000b306bf915c4d645ff596e518faf3f9669b970169060009081906001906002905b808310156112e457600094505b808510156112d6578285019350808410156112cd578573ffffffffffffffffffffffffffffffffffffffff1663299e566060405180604001604052808b898151811061122757611227611a74565b602002602001015181526020018b888151811061124657611246611a74565b60200260200101518152506040518263ffffffff1660e01b815260040161126d9190611ad2565b602060405180830381865afa15801561128a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ae9190611b03565b8886815181106112c0576112c0611a74565b6020026020010181815250505b938101936111d9565b909150600182901b906111cc565b876000815181106112f7576112f7611a74565b60200260200101519650505050505050919050565b60006001826020015110156113635760405162461bcd60e51b815260206004820152601f60248201527f4e6f64655265616465723a20746f6f2073686f727420666f722075696e743800604482015260640161021e565b81518051600180830180865260208601805191949360f81c9291611388908390611a5d565b905250949350505050565b60006020826020015110156114105760405162461bcd60e51b815260206004820152602160248201527f4e6f64655265616465723a20746f6f2073686f727420666f722062797465733360448201527f3200000000000000000000000000000000000000000000000000000000000000606482015260840161021e565b81518051602080830180865281860180519194939291611388908390611a5d565b6000806004836020015110156114895760405162461bcd60e51b815260206004820181905260248201527f4e6f64655265616465723a20746f6f2073686f727420666f722075696e743332604482015260640161021e565b8251805160048083018087526020870180519194939260f084901c9260f885901c92906114b7908390611a5d565b90525060ff90911697909650945050505050565b600081836020015110156115475760405162461bcd60e51b815260206004820152602160248201527f4e6f64655265616465723a20746f6f2073686f727420666f72206e206279746560448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161021e565b825160609060008061155a866008611b1c565b61156690610100611a5d565b8351848801808a5260208a01805191975091831c9450919250879161158c908390611a5d565b905250909695505050505050565b6040518060400160405280606081526020016115f46040805161010081019091528060008152600060208201819052604082018190526060808301829052608083015260a0820181905260c0820181905260e09091015290565b905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561166f5761166f6115f9565b604052919050565b600067ffffffffffffffff821115611691576116916115f9565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126116ce57600080fd5b81356116e16116dc82611677565b611628565b8181528460208386010111156116f657600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261172457600080fd5b8135602067ffffffffffffffff80831115611741576117416115f9565b8260051b611750838201611628565b938452858101830193838101908886111561176a57600080fd5b84880192505b858310156117a6578235848111156117885760008081fd5b6117968a87838c01016116bd565b8352509184019190840190611770565b98975050505050505050565b600080600080608085870312156117c857600080fd5b84359350602085013567ffffffffffffffff808211156117e757600080fd5b6117f3888389016116bd565b9450604087013591508082111561180957600080fd5b5061181687828801611713565b949793965093946060013593505050565b60008060006060848603121561183c57600080fd5b83359250602084013567ffffffffffffffff81111561185a57600080fd5b61186686828701611713565b925050604084013590509250925092565b60005b8381101561189257818101518382015260200161187a565b838111156118a1576000848401525b50505050565b600081518084526118bf816020860160208601611877565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b821515815260406020820152600061083e60408301846118a7565b600060608201858352602060608185015281865180845260808601915060808160051b870101935082880160005b82811015611986577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808887030184526119748683516118a7565b9550928401929084019060010161193a565b5050505050604092909201929092529392505050565b600080604083850312156119af57600080fd5b825180151581146119bf57600080fd5b602084015190925067ffffffffffffffff8111156119dc57600080fd5b8301601f810185136119ed57600080fd5b80516119fb6116dc82611677565b818152866020838501011115611a1057600080fd5b611a21826020830160208601611877565b8093505050509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611a6f57611a6f611a2e565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60408101818360005b6002811015611afa578151835260209283019290910190600101611adb565b50505092915050565b600060208284031215611b1557600080fd5b5051919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611b5457611b54611a2e565b50029056fea164736f6c634300080f000a", + "key": "0x7cb5c2b5a0b80e4fad4cf89bdd73a61db77d1c6dc957bae688b8b7bba3f76422" + }, + "0x99bba657f2bbc93c02d617f8ba121cb8fc104acf": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x3efea1de1405ae6254e994ff8169229858d86a12cf2e586bc8ee4e63e475e3d0", + "code": "0x6080604052600436106101d15760003560e01c80638065657f116100f7578063bc197c8111610095578063d547741f11610064578063d547741f14610656578063e38335e514610676578063f23a6e6114610689578063f27a0c92146106ce57600080fd5b8063bc197c81146105a4578063c4c4c7b3146105e9578063c4d252f514610609578063d45c44351461062957600080fd5b806391d14854116100d157806391d14854146104e8578063a217fddf1461053b578063b08e51c014610550578063b1c5f4271461058457600080fd5b80638065657f146104745780638f2a0bb0146104945780638f61f4f5146104b457600080fd5b8063248a9ca31161016f57806336568abe1161013e57806336568abe146103f257806354fd4d5014610412578063584b153e1461043457806364d623531461045457600080fd5b8063248a9ca3146103525780632ab0f529146103825780632f2ff15d146103b257806331d50750146103d257600080fd5b80630d3cf6fc116101ab5780630d3cf6fc14610276578063134008d3146102aa57806313bc9f20146102bd578063150b7a02146102dd57600080fd5b806301d5062a146101dd57806301ffc9a7146101ff57806307bd02651461023457600080fd5b366101d857005b600080fd5b3480156101e957600080fd5b506101fd6101f8366004612228565b6106e3565b005b34801561020b57600080fd5b5061021f61021a36600461229d565b6107b9565b60405190151581526020015b60405180910390f35b34801561024057600080fd5b506102687fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6381565b60405190815260200161022b565b34801561028257600080fd5b506102687f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca581565b6101fd6102b83660046122df565b610815565b3480156102c957600080fd5b5061021f6102d836600461234b565b61090d565b3480156102e957600080fd5b506103216102f8366004612470565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161022b565b34801561035e57600080fd5b5061026861036d36600461234b565b60009081526065602052604090206001015490565b34801561038e57600080fd5b5061021f61039d36600461234b565b60009081526097602052604090205460011490565b3480156103be57600080fd5b506101fd6103cd3660046124d8565b610933565b3480156103de57600080fd5b5061021f6103ed36600461234b565b61095d565b3480156103fe57600080fd5b506101fd61040d3660046124d8565b610976565b34801561041e57600080fd5b50610427610a14565b60405161022b9190612530565b34801561044057600080fd5b5061021f61044f36600461234b565b610ab7565b34801561046057600080fd5b506101fd61046f36600461234b565b610ace565b34801561048057600080fd5b5061026861048f3660046122df565b610b84565b3480156104a057600080fd5b506101fd6104af3660046125c6565b610bc3565b3480156104c057600080fd5b506102687fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc181565b3480156104f457600080fd5b5061021f6105033660046124d8565b600091825260656020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b34801561054757600080fd5b50610268600081565b34801561055c57600080fd5b506102687ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f78381565b34801561059057600080fd5b5061026861059f366004612678565b610e02565b3480156105b057600080fd5b506103216105bf3660046127b0565b7fbc197c810000000000000000000000000000000000000000000000000000000095945050505050565b3480156105f557600080fd5b506101fd6106043660046128bc565b610e47565b34801561061557600080fd5b506101fd61062436600461234b565b610fc7565b34801561063557600080fd5b5061026861064436600461234b565b60009081526097602052604090205490565b34801561066257600080fd5b506101fd6106713660046124d8565b6110a8565b6101fd610684366004612678565b6110cd565b34801561069557600080fd5b506103216106a436600461293a565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b3480156106da57600080fd5b50609854610268565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc161070d81611346565b600061071d898989898989610b84565b90506107298184611353565b6000817f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8b8b8b8b8b8a604051610765969594939291906129e8565b60405180910390a383156107ae57807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d0387856040516107a591815260200190565b60405180910390a25b505050505050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000148061080f575061080f82611467565b92915050565b600080527f7dc9f88e569f94faad6fa0d44dd44858caf3f34f1bd1c985800aedf5793aad8b6020527fa01e231ca478cf51f663e103939e98de36fa76d3e4e0b1de673dc711acc3a01b547fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e639060ff166108925761089281336114fe565b60006108a2888888888888610b84565b90506108ae818561159e565b6108ba888888886116a6565b6000817fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b588a8a8a8a6040516108f29493929190612a33565b60405180910390a361090381611789565b5050505050505050565b60008181526097602052604081205460018111801561092c5750428111155b9392505050565b60008281526065602052604090206001015461094e81611346565b6109588383611818565b505050565b60008181526097602052604081205481905b1192915050565b73ffffffffffffffffffffffffffffffffffffffff81163314610a065760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b610a10828261190c565b5050565b6060610a3f7f00000000000000000000000000000000000000000000000000000000000000016119c7565b610a687f00000000000000000000000000000000000000000000000000000000000000006119c7565b610a917f00000000000000000000000000000000000000000000000000000000000000006119c7565b604051602001610aa393929190612a73565b604051602081830303815290604052905090565b60008181526097602052604081205460019061096f565b333014610b435760405162461bcd60e51b815260206004820152602b60248201527f54696d656c6f636b436f6e74726f6c6c65723a2063616c6c6572206d7573742060448201527f62652074696d656c6f636b00000000000000000000000000000000000000000060648201526084016109fd565b60985460408051918252602082018390527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a1609855565b6000868686868686604051602001610ba1969594939291906129e8565b6040516020818303038152906040528051906020012090509695505050505050565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1610bed81611346565b888714610c625760405162461bcd60e51b815260206004820152602360248201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d6160448201527f746368000000000000000000000000000000000000000000000000000000000060648201526084016109fd565b888514610cd75760405162461bcd60e51b815260206004820152602360248201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d6160448201527f746368000000000000000000000000000000000000000000000000000000000060648201526084016109fd565b6000610ce98b8b8b8b8b8b8b8b610e02565b9050610cf58184611353565b60005b8a811015610db35780827f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8e8e85818110610d3557610d35612ae9565b9050602002016020810190610d4a9190612b18565b8d8d86818110610d5c57610d5c612ae9565b905060200201358c8c87818110610d7557610d75612ae9565b9050602002810190610d879190612b33565b8c8b604051610d9b969594939291906129e8565b60405180910390a3610dac81612bc7565b9050610cf8565b508315610df557807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d038785604051610dec91815260200190565b60405180910390a25b5050505050505050505050565b60008888888888888888604051602001610e23989796959493929190612caf565b60405160208183030381529060405280519060200120905098975050505050505050565b600054610100900460ff1615808015610e675750600054600160ff909116105b80610e815750303b158015610e81575060005460ff166001145b610ef35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109fd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610f5157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610f5d85858585611a85565b8015610fc057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783610ff181611346565b610ffa82610ab7565b61106c5760405162461bcd60e51b815260206004820152603160248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20636160448201527f6e6e6f742062652063616e63656c6c656400000000000000000000000000000060648201526084016109fd565b6000828152609760205260408082208290555183917fbaa1eb22f2a492ba1a5fea61b8df4d27c6c8b5f3971e63bb58fa14ff72eedb7091a25050565b6000828152606560205260409020600101546110c381611346565b610958838361190c565b600080527f7dc9f88e569f94faad6fa0d44dd44858caf3f34f1bd1c985800aedf5793aad8b6020527fa01e231ca478cf51f663e103939e98de36fa76d3e4e0b1de673dc711acc3a01b547fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e639060ff1661114a5761114a81336114fe565b8786146111bf5760405162461bcd60e51b815260206004820152602360248201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d6160448201527f746368000000000000000000000000000000000000000000000000000000000060648201526084016109fd565b8784146112345760405162461bcd60e51b815260206004820152602360248201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d6160448201527f746368000000000000000000000000000000000000000000000000000000000060648201526084016109fd565b60006112468a8a8a8a8a8a8a8a610e02565b9050611252818561159e565b60005b898110156113305760008b8b8381811061127157611271612ae9565b90506020020160208101906112869190612b18565b905060008a8a8481811061129c5761129c612ae9565b9050602002013590503660008a8a868181106112ba576112ba612ae9565b90506020028101906112cc9190612b33565b915091506112dc848484846116a6565b84867fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b58868686866040516113139493929190612a33565b60405180910390a3505050508061132990612bc7565b9050611255565b5061133a81611789565b50505050505050505050565b61135081336114fe565b50565b61135c8261095d565b156113cf5760405162461bcd60e51b815260206004820152602f60248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20616c60448201527f7265616479207363686564756c6564000000000000000000000000000000000060648201526084016109fd565b6098548110156114475760405162461bcd60e51b815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a20696e73756666696369656e7460448201527f2064656c6179000000000000000000000000000000000000000000000000000060648201526084016109fd565b6114518142612d80565b6000928352609760205260409092209190915550565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061080f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461080f565b600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610a105761153e81611b14565b611549836020611b33565b60405160200161155a929190612d98565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262461bcd60e51b82526109fd91600401612530565b6115a78261090d565b6116195760405162461bcd60e51b815260206004820152602a60248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20697360448201527f206e6f742072656164790000000000000000000000000000000000000000000060648201526084016109fd565b80158061163457506000818152609760205260409020546001145b610a105760405162461bcd60e51b815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a206d697373696e67206465706560448201527f6e64656e6379000000000000000000000000000000000000000000000000000060648201526084016109fd565b60008473ffffffffffffffffffffffffffffffffffffffff168484846040516116d0929190612e19565b60006040518083038185875af1925050503d806000811461170d576040519150601f19603f3d011682016040523d82523d6000602084013e611712565b606091505b5050905080610fc05760405162461bcd60e51b815260206004820152603360248201527f54696d656c6f636b436f6e74726f6c6c65723a20756e6465726c79696e67207460448201527f72616e73616374696f6e2072657665727465640000000000000000000000000060648201526084016109fd565b6117928161090d565b6118045760405162461bcd60e51b815260206004820152602a60248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20697360448201527f206e6f742072656164790000000000000000000000000000000000000000000060648201526084016109fd565b600090815260976020526040902060019055565b600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610a1057600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118ae3390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1615610a1057600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b606060006119d483611d5c565b600101905060008167ffffffffffffffff8111156119f4576119f4612364565b6040519080825280601f01601f191660200182016040528015611a1e576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084611a2857509392505050565b600054610100900460ff16611b025760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109fd565b611b0e84848484611e3e565b50505050565b606061080f73ffffffffffffffffffffffffffffffffffffffff831660145b60606000611b42836002612e29565b611b4d906002612d80565b67ffffffffffffffff811115611b6557611b65612364565b6040519080825280601f01601f191660200182016040528015611b8f576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611bc657611bc6612ae9565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611c2957611c29612ae9565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000611c65846002612e29565b611c70906001612d80565b90505b6001811115611d0d577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110611cb157611cb1612ae9565b1a60f81b828281518110611cc757611cc7612ae9565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93611d0681612e66565b9050611c73565b50831561092c5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016109fd565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611da5577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611dd1576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611def57662386f26fc10000830492506010015b6305f5e1008310611e07576305f5e100830492506008015b6127108310611e1b57612710830492506004015b60648310611e2d576064830492506002015b600a831061080f5760010192915050565b600054610100900460ff16611ebb5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109fd565b611ee57f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca580612161565b611f2f7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc17f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5612161565b611f797fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e637f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5612161565b611fc37ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f7837f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5612161565b611fed7f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5306121ac565b73ffffffffffffffffffffffffffffffffffffffff811615612033576120337f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5826121ac565b60005b83518110156120c8576120827fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc185838151811061207557612075612ae9565b60200260200101516121ac565b6120b87ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f78385838151811061207557612075612ae9565b6120c181612bc7565b9050612036565b5060005b825181101561211b5761210b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6384838151811061207557612075612ae9565b61211481612bc7565b90506120cc565b5060988490556040805160008152602081018690527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a150505050565b600082815260656020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b610a108282611818565b803573ffffffffffffffffffffffffffffffffffffffff811681146121da57600080fd5b919050565b60008083601f8401126121f157600080fd5b50813567ffffffffffffffff81111561220957600080fd5b60208301915083602082850101111561222157600080fd5b9250929050565b600080600080600080600060c0888a03121561224357600080fd5b61224c886121b6565b965060208801359550604088013567ffffffffffffffff81111561226f57600080fd5b61227b8a828b016121df565b989b979a50986060810135976080820135975060a09091013595509350505050565b6000602082840312156122af57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461092c57600080fd5b60008060008060008060a087890312156122f857600080fd5b612301876121b6565b955060208701359450604087013567ffffffffffffffff81111561232457600080fd5b61233089828a016121df565b979a9699509760608101359660809091013595509350505050565b60006020828403121561235d57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156123da576123da612364565b604052919050565b600082601f8301126123f357600080fd5b813567ffffffffffffffff81111561240d5761240d612364565b61243e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612393565b81815284602083860101111561245357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561248657600080fd5b61248f856121b6565b935061249d602086016121b6565b925060408501359150606085013567ffffffffffffffff8111156124c057600080fd5b6124cc878288016123e2565b91505092959194509250565b600080604083850312156124eb57600080fd5b823591506124fb602084016121b6565b90509250929050565b60005b8381101561251f578181015183820152602001612507565b83811115611b0e5750506000910152565b602081526000825180602084015261254f816040850160208701612504565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008083601f84011261259357600080fd5b50813567ffffffffffffffff8111156125ab57600080fd5b6020830191508360208260051b850101111561222157600080fd5b600080600080600080600080600060c08a8c0312156125e457600080fd5b893567ffffffffffffffff808211156125fc57600080fd5b6126088d838e01612581565b909b50995060208c013591508082111561262157600080fd5b61262d8d838e01612581565b909950975060408c013591508082111561264657600080fd5b506126538c828d01612581565b9a9d999c50979a969997986060880135976080810135975060a0013595509350505050565b60008060008060008060008060a0898b03121561269457600080fd5b883567ffffffffffffffff808211156126ac57600080fd5b6126b88c838d01612581565b909a50985060208b01359150808211156126d157600080fd5b6126dd8c838d01612581565b909850965060408b01359150808211156126f657600080fd5b506127038b828c01612581565b999c989b509699959896976060870135966080013595509350505050565b600067ffffffffffffffff82111561273b5761273b612364565b5060051b60200190565b600082601f83011261275657600080fd5b8135602061276b61276683612721565b612393565b82815260059290921b8401810191818101908684111561278a57600080fd5b8286015b848110156127a5578035835291830191830161278e565b509695505050505050565b600080600080600060a086880312156127c857600080fd5b6127d1866121b6565b94506127df602087016121b6565b9350604086013567ffffffffffffffff808211156127fc57600080fd5b61280889838a01612745565b9450606088013591508082111561281e57600080fd5b61282a89838a01612745565b9350608088013591508082111561284057600080fd5b5061284d888289016123e2565b9150509295509295909350565b600082601f83011261286b57600080fd5b8135602061287b61276683612721565b82815260059290921b8401810191818101908684111561289a57600080fd5b8286015b848110156127a5576128af816121b6565b835291830191830161289e565b600080600080608085870312156128d257600080fd5b84359350602085013567ffffffffffffffff808211156128f157600080fd5b6128fd8883890161285a565b9450604087013591508082111561291357600080fd5b506129208782880161285a565b92505061292f606086016121b6565b905092959194509250565b600080600080600060a0868803121561295257600080fd5b61295b866121b6565b9450612969602087016121b6565b93506040860135925060608601359150608086013567ffffffffffffffff81111561299357600080fd5b61284d888289016123e2565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8716815285602082015260a060408201526000612a1e60a08301868861299f565b60608301949094525060800152949350505050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000612a6960608301848661299f565b9695505050505050565b60008451612a85818460208901612504565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612ac1816001850160208a01612504565b60019201918201528351612adc816002840160208801612504565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215612b2a57600080fd5b61092c826121b6565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612b6857600080fd5b83018035915067ffffffffffffffff821115612b8357600080fd5b60200191503681900382131561222157600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612bf857612bf8612b98565b5060010190565b81835260006020808501808196508560051b810191508460005b87811015612ca257828403895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112612c5857600080fd5b8701858101903567ffffffffffffffff811115612c7457600080fd5b803603821315612c8357600080fd5b612c8e86828461299f565b9a87019a9550505090840190600101612c19565b5091979650505050505050565b60a0808252810188905260008960c08301825b8b811015612cfd5773ffffffffffffffffffffffffffffffffffffffff612ce8846121b6565b16825260209283019290910190600101612cc2565b5083810360208501528881527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff891115612d3657600080fd5b8860051b9150818a602083013781810191505060208101600081526020848303016040850152612d6781888a612bff565b6060850196909652505050608001529695505050505050565b60008219821115612d9357612d93612b98565b500190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612dd0816017850160208801612504565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351612e0d816028840160208801612504565b01602801949350505050565b8183823760009101908152919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612e6157612e61612b98565b500290565b600081612e7557612e75612b98565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea164736f6c634300080f000a", + "key": "0x6c6309347ce858a4a9cd95110ae4be03e0018a688c8235b691e0b3391e72b9d6" + }, + "0x9a676e781a523b5d0c0e43731313a708cb607508": { + "balance": "0", + "nonce": 1, + "root": "0x5ae3a6205828fcab1020625833a527d307aef7937bc945432c1e69abb01d3569", + "codeHash": "0x1f958654ab06a152993e7a0ae7b6dbb0d4b19265cc9337b8789fe1353bd9dc35", + "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106d9565b610224565b6100a86100a33660046106f4565b610296565b6040516100b59190610777565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106d9565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ea565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060b565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006106357fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038390556040805173ffffffffffffffffffffffffffffffffffffffff8084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d457600080fd5b919050565b6000602082840312156106eb57600080fd5b610412826106b0565b60008060006040848603121561070957600080fd5b610712846106b0565b9250602084013567ffffffffffffffff8082111561072f57600080fd5b818601915086601f83011261074357600080fd5b81358181111561075257600080fd5b87602082850101111561076457600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a457858101830151858201604001528201610788565b818111156107b6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "01", + "0x0000000000000000000000000000000000000000000000000000000000000067": "55706772616465476f7665726e6f72000000000000000000000000000000001e", + "0x0000000000000000000000000000000000000000000000000000000000000068": "312e302e3000000000000000000000000000000000000000000000000000000a", + "0x00000000000000000000000000000000000000000000000000000000000000fd": "55706772616465476f7665726e6f72000000000000000000000000000000001e", + "0x0000000000000000000000000000000000000000000000000000000000000130": "64", + "0x0000000000000000000000000000000000000000000000000000000000000131": "01", + "0x0000000000000000000000000000000000000000000000000000000000000193": "a51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0", + "0x00000000000000000000000000000000000000000000000000000000000001c7": "01", + "0x00000000000000000000000000000000000000000000000000000000000001f8": "0dcd1bf9a1b36ce34237eeafef220932846bcd82", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "8f86403a4de0bb5791fa46b8e795c547942fe4cf", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "5fbdb2315678afecb367f032d93f642f64180aa3", + "0xff6df30967a6a678f565c59a19e91e5c0dbb20cfe9f9bf26d7da6dea0fffa24c": "3300000031" + }, + "key": "0x77cfca9fde84ccd54b40d754f2f3d4f4ebb6c53bf6f9bc52d4168b4bc026e898" + }, + "0x9a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae": { + "balance": "0", + "nonce": 1, + "root": "0xb45fafbc41242521fb222c114d80647c0858e2a27d7574ef837788f7a78cdaaa", + "codeHash": "0xbabf3bd8ffe7cc6e77417aec3287aa8cad9d6a0620879fda8df0b0ebb14ceabe", + "code": "0x60806040526004361061015f5760003560e01c80636e296e45116100c0578063a4e7f8bd11610074578063b28ade2511610059578063b28ade251461039e578063d764ad0b146103be578063ecc70428146103d157600080fd5b8063a4e7f8bd1461033e578063b1b1b2091461036e57600080fd5b806383a74074116100a557806383a74074146102f35780638cbeeef2146102575780639fce812c1461030a57600080fd5b80636e296e45146102c95780638129fc1c146102de57600080fd5b80633f827a5a1161011757806354fd4d50116100fc57806354fd4d501461026d5780635644cfdf1461028f5780635c975abb146102a557600080fd5b80633f827a5a1461022f5780634c1d6a691461025757600080fd5b80630ff754ea116101485780630ff754ea146101ac5780632828d7e8146102055780633dbb202b1461021a57600080fd5b8063028f85f7146101645780630c56849814610197575b600080fd5b34801561017057600080fd5b50610179601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101a357600080fd5b50610179603f81565b3480156101b857600080fd5b506101e07f0000000000000000000000009fe46736679d2d9a65f0992f2272de9f3c7fa6e081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161018e565b34801561021157600080fd5b50610179604081565b61022d610228366004611772565b61040f565b005b34801561023b57600080fd5b50610244600081565b60405161ffff909116815260200161018e565b34801561026357600080fd5b50610179619c4081565b34801561027957600080fd5b506102826105fd565b60405161018e9190611853565b34801561029b57600080fd5b5061017961138881565b3480156102b157600080fd5b5060335460ff165b604051901515815260200161018e565b3480156102d557600080fd5b506101e06106a0565b3480156102ea57600080fd5b5061022d61078c565b3480156102ff57600080fd5b5061017962030d4081565b34801561031657600080fd5b506101e07f000000000000000000000000420000000000000000000000000000000000000481565b34801561034a57600080fd5b506102b961035936600461186d565b60686020526000908152604090205460ff1681565b34801561037a57600080fd5b506102b961038936600461186d565b60656020526000908152604090205460ff1681565b3480156103aa57600080fd5b506101796103b9366004611886565b61091e565b61022d6103cc3660046118da565b61098c565b3480156103dd57600080fd5b506067547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660405190815260200161018e565b6105277f000000000000000000000000420000000000000000000000000000000000000461043e85858561091e565b347fd764ad0b000000000000000000000000000000000000000000000000000000006104896067547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b338a34898c8c6040516024016104a597969594939291906119a9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261113f565b3373ffffffffffffffffffffffffffffffffffffffff85167fdd28cef75ff18fb538e43317144469f339702f973eace2bc808f2acc37db310e34868661058c6067547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b8760405161059e959493929190611a08565b60405180910390a35050606780547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60606106287f00000000000000000000000000000000000000000000000000000000000000016111f4565b6106517f00000000000000000000000000000000000000000000000000000000000000006111f4565b61067a7f00000000000000000000000000000000000000000000000000000000000000006111f4565b60405160200161068c93929190611a40565b604051602081830303815290604052905090565b60665460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21530161076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084015b60405180910390fd5b5060665473ffffffffffffffffffffffffffffffffffffffff1690565b600054610100900460ff16158080156107ac5750600054600160ff909116105b806107c65750303b1580156107c6575060005460ff166001145b610852576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610766565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156108b057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6108b86112b2565b801561091b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6000611388619c4080603f61093a604063ffffffff8816611ae5565b6109449190611b15565b61094f601088611ae5565b61095c9062030d40611b63565b6109669190611b63565b6109709190611b63565b61097a9190611b63565b6109849190611b63565b949350505050565b60f087901c60018110610a47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206d6573736167657320697320737570706f7274656420617420746860648201527f69732074696d6500000000000000000000000000000000000000000000000000608482015260a401610766565b6000610a8d898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061137792505050565b9050610a9761139a565b15610acf57853414610aab57610aab611b8f565b60008181526068602052604090205460ff1615610aca57610aca611b8f565b610c21565b3415610b83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610766565b60008181526068602052604090205460ff16610c21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610766565b610c2a876114be565b15610cdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610766565b60008181526065602052604090205460ff1615610d7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610766565b610d9d85610d8e611388619c40611b63565b67ffffffffffffffff16611535565b1580610dc3575060665473ffffffffffffffffffffffffffffffffffffffff1661dead14155b15610edc5760008181526068602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201610ed5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610766565b5050611115565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a161790556000610f6d88619c405a610f309190611bbe565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061155392505050565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156110045760008281526065602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2611111565b60008281526068602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610766565b5050505b50505050505050565b905090565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000009fe46736679d2d9a65f0992f2272de9f3c7fa6e0169063e9e05c429084906111bc908890839089906000908990600401611bd5565b6000604051808303818588803b1580156111d557600080fd5b505af11580156111e9573d6000803e3d6000fd5b505050505050505050565b606060006112018361156d565b600101905060008167ffffffffffffffff81111561122157611221611c2d565b6040519080825280601f01601f19166020018201604052801561124b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461125557509392505050565b600054610100900460ff16611349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610766565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055565b600061138787878787878761164f565b8051906020012090509695505050505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000009fe46736679d2d9a65f0992f2272de9f3c7fa6e01614801561111e57507f000000000000000000000000420000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff167f0000000000000000000000009fe46736679d2d9a65f0992f2272de9f3c7fa6e073ffffffffffffffffffffffffffffffffffffffff16639bf62d826040518163ffffffff1660e01b8152600401602060405180830381865afa15801561147e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a29190611c5c565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff821630148061152f57507f0000000000000000000000009fe46736679d2d9a65f0992f2272de9f3c7fa6e073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115b6577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115e2576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061160057662386f26fc10000830492506010015b6305f5e1008310611618576305f5e100830492506008015b612710831061162c57612710830492506004015b6064831061163e576064830492506002015b600a831061152f5760010192915050565b606086868686868660405160240161166c96959493929190611c79565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461091b57600080fd5b60008083601f84011261172257600080fd5b50813567ffffffffffffffff81111561173a57600080fd5b60208301915083602082850101111561175257600080fd5b9250929050565b803563ffffffff8116811461176d57600080fd5b919050565b6000806000806060858703121561178857600080fd5b8435611793816116ee565b9350602085013567ffffffffffffffff8111156117af57600080fd5b6117bb87828801611710565b90945092506117ce905060408601611759565b905092959194509250565b60005b838110156117f45781810151838201526020016117dc565b83811115611803576000848401525b50505050565b600081518084526118218160208601602086016117d9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006118666020830184611809565b9392505050565b60006020828403121561187f57600080fd5b5035919050565b60008060006040848603121561189b57600080fd5b833567ffffffffffffffff8111156118b257600080fd5b6118be86828701611710565b90945092506118d1905060208501611759565b90509250925092565b600080600080600080600060c0888a0312156118f557600080fd5b873596506020880135611907816116ee565b95506040880135611917816116ee565b9450606088013593506080880135925060a088013567ffffffffffffffff81111561194157600080fd5b61194d8a828b01611710565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a08301526119fb60c083018486611960565b9998505050505050505050565b858152608060208201526000611a22608083018688611960565b905083604083015263ffffffff831660608301529695505050505050565b60008451611a528184602089016117d9565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611a8e816001850160208a016117d9565b60019201918201528351611aa98160028401602088016117d9565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611b0c57611b0c611ab6565b02949350505050565b600067ffffffffffffffff80841680611b57577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611b8657611b86611ab6565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611bd057611bd0611ab6565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a060808201526000611c2260a0830184611809565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215611c6e57600080fd5b8151611866816116ee565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611cc460c0830184611809565b9897505050505050505056fea164736f6c634300080f000a", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "01", + "0x0000000000000000000000000000000000000000000000000000000000000066": "dead" + }, + "key": "0x17c85ecbaedd35be311ad177fb8cd266d4d6ca50961076aa5df5287d787e84b3" + }, + "0x9e545e3c0baab3e08cdfd552c960a1050f373042": { + "balance": "0", + "nonce": 1, + "root": "0x80d0baaa3a739f917eff6760cb69c0405cb3d6e433e7a9aa8345a0762447f195", + "codeHash": "0xe2c2a7f13f52c8301239426379cfc7a484ed46a75617f4aa1d927270da7c5ee6", + "code": "0x6080604052600436106101475760003560e01c80638c3152e9116100c0578063cff0ab9611610074578063e965084c11610059578063e965084c14610481578063e9e05c421461050d578063f04987501461052057600080fd5b8063cff0ab96146103c0578063d53a822f1461046157600080fd5b8063a14238e7116100a5578063a14238e71461033c578063b98debbf1461036c578063c30af388146103a057600080fd5b80638c3152e9146102ef5780639bf62d821461030f57600080fd5b80635865b607116101175780636dbffb78116100fc5780636dbffb7814610286578063724c184c146102a65780638456cb59146102da57600080fd5b80635865b607146102285780635c975abb1461025c57600080fd5b80621c2ff6146101735780630757b244146101d15780633f4ba83a146101f157806354fd4d501461020657600080fd5b3661016e5761016c3334620186a0600060405180602001604052806000815250610554565b005b600080fd5b34801561017f57600080fd5b506101a77f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101dd57600080fd5b5061016c6101ec366004612c17565b61073a565b3480156101fd57600080fd5b5061016c610d3e565b34801561021257600080fd5b5061021b610e47565b6040516101c89190612d6e565b34801561023457600080fd5b506101a77f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b181565b34801561026857600080fd5b506035546102769060ff1681565b60405190151581526020016101c8565b34801561029257600080fd5b506102766102a1366004612d81565b610eea565b3480156102b257600080fd5b506101a77f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b3480156102e657600080fd5b5061016c610fc1565b3480156102fb57600080fd5b5061016c61030a366004612d9a565b6110c6565b34801561031b57600080fd5b506032546101a79073ffffffffffffffffffffffffffffffffffffffff1681565b34801561034857600080fd5b50610276610357366004612d81565b60336020526000908152604090205460ff1681565b34801561037857600080fd5b506101a77f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc981565b3480156103ac57600080fd5b5061016c6103bb366004612de7565b611894565b3480156103cc57600080fd5b50600154610428906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101c8565b34801561046d57600080fd5b5061016c61047c366004612e55565b6119f2565b34801561048d57600080fd5b506104df61049c366004612d81565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101c8565b61016c61051b366004612e72565b610554565b34801561052c57600080fd5b506101a77f000000000000000000000000e7f1725e7734ce288f8367e1bb143e90bb3f051281565b8260005a905083156105ef5773ffffffffffffffffffffffffffffffffffffffff8716156105ef5760405162461bcd60e51b815260206004820152603d60248201527f4b726f6d61506f7274616c3a206d7573742073656e6420746f2061646472657360448201527f73283029207768656e206372656174696e67206120636f6e747261637400000060648201526084015b60405180910390fd5b6152088567ffffffffffffffff1610156106715760405162461bcd60e51b815260206004820152603560248201527f4b726f6d61506f7274616c3a20676173206c696d6974206d75737420636f766560448201527f7220696e737472696e7369632067617320636f7374000000000000000000000060648201526084016105e6565b33328114610692575033731111000000000000000000000000000000001111015b600034888888886040516020016106ad959493929190612eef565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161071d9190612d6e565b60405180910390a450506107318282611be1565b50505050505050565b60355460ff161561078d5760405162461bcd60e51b815260206004820152601360248201527f4b726f6d61506f7274616c3a207061757365640000000000000000000000000060448201526064016105e6565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff16036108325760405162461bcd60e51b815260206004820152603c60248201527f4b726f6d61506f7274616c3a20796f752063616e6e6f742073656e64206d657360448201527f736167657320746f2074686520706f7274616c20636f6e74726163740000000060648201526084016105e6565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c973ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401608060405180830381865afa1580156108c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e49190612f74565b6020015190506109016108fc36869003860186612fec565b611ef4565b81146109755760405162461bcd60e51b815260206004820152602660248201527f4b726f6d61506f7274616c3a20696e76616c6964206f757470757420726f6f7460448201527f2070726f6f66000000000000000000000000000000000000000000000000000060648201526084016105e6565b600061098087611f79565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610ab55750805160408083015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201527f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c973ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401608060405180830381865afa158015610a8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aae9190612f74565b6020015114155b610b275760405162461bcd60e51b815260206004820152603460248201527f4b726f6d61506f7274616c3a207769746864726177616c20686173682068617360448201527f20616c7265616479206265656e2070726f76656e00000000000000000000000060648201526084016105e6565b60408051602080820185905260008284015282518083038401815260608301808552815191909201207f12e64a7200000000000000000000000000000000000000000000000000000000909152917f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b173ffffffffffffffffffffffffffffffffffffffff16916312e64a7291610bc99185918b918b918e0135906064016130a5565b602060405180830381865afa158015610be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0a91906131a6565b610c7c5760405162461bcd60e51b815260206004820152602f60248201527f4b726f6d61506f7274616c3a20696e76616c6964207769746864726177616c2060448201527f696e636c7573696f6e2070726f6f66000000000000000000000000000000000060648201526084016105e6565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e1614610de95760405162461bcd60e51b815260206004820152602660248201527f4b726f6d61506f7274616c3a206f6e6c7920677561726469616e2063616e207560448201527f6e7061757365000000000000000000000000000000000000000000000000000060648201526084016105e6565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6060610e727f0000000000000000000000000000000000000000000000000000000000000001611fc6565b610e9b7f0000000000000000000000000000000000000000000000000000000000000000611fc6565b610ec47f0000000000000000000000000000000000000000000000000000000000000000611fc6565b604051602001610ed6939291906131c3565b604051602081830303815290604052905090565b6040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101829052600090610fbb9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9169063a25ae55790602401608060405180830381865afa158015610f7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa09190612f74565b604001516fffffffffffffffffffffffffffffffff16612084565b92915050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e161461106b5760405162461bcd60e51b8152602060048201526024808201527f4b726f6d61506f7274616c3a206f6e6c7920677561726469616e2063616e207060448201527f617573650000000000000000000000000000000000000000000000000000000060648201526084016105e6565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001610e3d565b60355460ff16156111195760405162461bcd60e51b815260206004820152601360248201527f4b726f6d61506f7274616c3a207061757365640000000000000000000000000060448201526064016105e6565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146111a85760405162461bcd60e51b815260206004820152603c60248201527f4b726f6d61506f7274616c3a2063616e206f6e6c792074726967676572206f6e60448201527f65207769746864726177616c20706572207472616e73616374696f6e0000000060648201526084016105e6565b60006111b382611f79565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036112845760405162461bcd60e51b815260206004820152602f60248201527f4b726f6d61506f7274616c3a207769746864726177616c20686173206e6f742060448201527f6265656e2070726f76656e20796574000000000000000000000000000000000060648201526084016105e6565b7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c973ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113139190613239565b81602001516fffffffffffffffffffffffffffffffff1610156113c45760405162461bcd60e51b815260206004820152604860248201527f4b726f6d61506f7274616c3a207769746864726177616c2074696d657374616d60448201527f70206c657373207468616e204c32204f7261636c65207374617274696e67207460648201527f696d657374616d70000000000000000000000000000000000000000000000000608482015260a4016105e6565b6113e381602001516fffffffffffffffffffffffffffffffff16612084565b61147b5760405162461bcd60e51b815260206004820152604260248201527f4b726f6d61506f7274616c3a2070726f76656e207769746864726177616c206660448201527f696e616c697a6174696f6e20706572696f6420686173206e6f7420656c61707360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016105e6565b60408181015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201526000907f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c973ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401608060405180830381865afa158015611520573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115449190612f74565b82516020820151919250146115e75760405162461bcd60e51b815260206004820152604660248201527f4b726f6d61506f7274616c3a206f757470757420726f6f742070726f76656e2060448201527f6973206e6f74207468652073616d652061732063757272656e74206f7574707560648201527f7420726f6f740000000000000000000000000000000000000000000000000000608482015260a4016105e6565b61160681604001516fffffffffffffffffffffffffffffffff16612084565b61169e5760405162461bcd60e51b815260206004820152604260248201527f4b726f6d61506f7274616c3a20636865636b706f696e74206f7574707574206660448201527f696e616c697a6174696f6e20706572696f6420686173206e6f7420656c61707360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016105e6565b60008381526033602052604090205460ff16156117235760405162461bcd60e51b815260206004820152603260248201527f4b726f6d61506f7274616c3a207769746864726177616c2068617320616c726560448201527f616479206265656e2066696e616c697a6564000000000000000000000000000060648201526084016105e6565b600083815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908601516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558501516080860151606087015160a08801516117c593929190612127565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061182a90841515815260200190565b60405180910390a2801580156118405750326001145b1561188d5760405162461bcd60e51b815260206004820152601e60248201527f4b726f6d61506f7274616c3a207769746864726177616c206661696c6564000060448201526064016105e6565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc9161461193f5760405162461bcd60e51b815260206004820152603f60248201527f4b726f6d61506f7274616c3a2066756e6374696f6e2063616e206f6e6c79206260448201527f652063616c6c65642066726f6d207468652056616c696461746f72506f6f6c0060648201526084016105e6565b6040513373111100000000000000000000000000000000111101906000906119739082908190879082908890602001612eef565b604051602081830303815290604052905060008573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516119e39190612d6e565b60405180910390a45050505050565b600054610100900460ff1615808015611a125750600054600160ff909116105b80611a2c5750303b158015611a2c575060005460ff166001145b611a9e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105e6565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611afc57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055603580548315157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909116179055611b5e612185565b8015611bc157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600154600090611c17907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643613281565b90506000611c2361224e565b90506000816020015160ff16826000015163ffffffff16611c4491906132c7565b90508215611d7b57600154600090611c7b908390700100000000000000000000000000000000900467ffffffffffffffff1661332f565b90506000836040015160ff1683611c9291906133a3565b600154611cb29084906fffffffffffffffffffffffffffffffff166133a3565b611cbc91906132c7565b600154909150600090611d0d90611ce69084906fffffffffffffffffffffffffffffffff1661345f565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612314565b90506001861115611d3c57611d39611ce682876040015160ff1660018a611d349190613281565b612331565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090611dae908490700100000000000000000000000000000000900467ffffffffffffffff166134d3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315611e775760405162461bcd60e51b815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d6974000060648201526084016105e6565b600154600090611ea3906fffffffffffffffffffffffffffffffff1667ffffffffffffffff88166134ff565b90506000611eb548633b9aca00612386565b611ebf908361353c565b905060005a611ece9088613281565b905080821115611eea57611eea611ee58284613281565b61239e565b5050505050505050565b8051600090611f0657610fbb826123cc565b60405162461bcd60e51b815260206004820152602a60248201527f48617368696e673a20756e6b6e6f776e206f757470757420726f6f742070726f60448201527f6f662076657273696f6e0000000000000000000000000000000000000000000060648201526084016105e6565b919050565b80516020808301516040808501516060860151608087015160a08801519351600097611fa9979096959101613550565b604051602081830303815290604052805190602001209050919050565b60606000611fd38361240f565b600101905060008167ffffffffffffffff811115611ff357611ff3612a69565b6040519080825280601f01601f19166020018201604052801561201d576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461202757509392505050565b60007f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c973ffffffffffffffffffffffffffffffffffffffff1663f4daa2916040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121159190613239565b61211f90836135a7565b421192915050565b60008060006121378660006124f1565b90508061216d576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600054610100900460ff166122025760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105e6565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091527f000000000000000000000000e7f1725e7734ce288f8367e1bb143e90bb3f051273ffffffffffffffffffffffffffffffffffffffff1663cc731b026040518163ffffffff1660e01b815260040160c060405180830381865afa1580156122eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230f91906135e4565b905090565b6000612329612323858561250f565b8361251e565b949350505050565b6000670de0b6b3a764000061237261234985836132c7565b61235b90670de0b6b3a764000061332f565b61236d85670de0b6b3a76400006133a3565b61252d565b61237c90866133a3565b61232991906132c7565b60008183116123955781612397565b825b9392505050565b6000805a90505b825a6123b19083613281565b10156123c7576123c082613683565b91506123a5565b505050565b80516020808301516040808501516060808701516080808901518551978801989098529386019490945284015282015260a081019190915260009060c001611fa9565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612458577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612484576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106124a257662386f26fc10000830492506010015b6305f5e10083106124ba576305f5e100830492506008015b61271083106124ce57612710830492506004015b606483106124e0576064830492506002015b600a8310610fbb5760010192915050565b600080603f83619c4001026040850201603f5a021015949350505050565b60008183136123955781612397565b60008183126123955781612397565b6000612397670de0b6b3a7640000836125458661255e565b61254f91906133a3565b61255991906132c7565b612788565b60008082136125af5760405162461bcd60e51b815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016105e6565b600060606125bc846129ad565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136127b957506000919050565b680755bf798b4a1bf1e582126128115760405162461bcd60e51b815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016105e6565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60008082116129fe5760405162461bcd60e51b815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016105e6565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81168114612aba57600080fd5b50565b600082601f830112612ace57600080fd5b813567ffffffffffffffff80821115612ae957612ae9612a69565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715612b2f57612b2f612a69565b81604052838152866020858801011115612b4857600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060c08284031215612b7a57600080fd5b60405160c0810167ffffffffffffffff8282108183111715612b9e57612b9e612a69565b816040528293508435835260208501359150612bb982612a98565b81602084015260408501359150612bcf82612a98565b816040840152606085013560608401526080850135608084015260a0850135915080821115612bfd57600080fd5b50612c0a85828601612abd565b60a0830152505092915050565b6000806000806000858703610100811215612c3157600080fd5b863567ffffffffffffffff80821115612c4957600080fd5b612c558a838b01612b68565b97506020890135965060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc084011215612c8e57600080fd5b60408901955060e0890135925080831115612ca857600080fd5b828901925089601f840112612cbc57600080fd5b8235915080821115612ccd57600080fd5b508860208260051b8401011115612ce357600080fd5b959894975092955050506020019190565b60005b83811015612d0f578181015183820152602001612cf7565b83811115612d1e576000848401525b50505050565b60008151808452612d3c816020860160208601612cf4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006123976020830184612d24565b600060208284031215612d9357600080fd5b5035919050565b600060208284031215612dac57600080fd5b813567ffffffffffffffff811115612dc357600080fd5b61232984828501612b68565b803567ffffffffffffffff81168114611f7457600080fd5b600080600060608486031215612dfc57600080fd5b8335612e0781612a98565b9250612e1560208501612dcf565b9150604084013567ffffffffffffffff811115612e3157600080fd5b612e3d86828701612abd565b9150509250925092565b8015158114612aba57600080fd5b600060208284031215612e6757600080fd5b813561239781612e47565b600080600080600060a08688031215612e8a57600080fd5b8535612e9581612a98565b945060208601359350612eaa60408701612dcf565b92506060860135612eba81612e47565b9150608086013567ffffffffffffffff811115612ed657600080fd5b612ee288828901612abd565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251612f43816049850160208701612cf4565b919091016049019695505050505050565b80516fffffffffffffffffffffffffffffffff81168114611f7457600080fd5b600060808284031215612f8657600080fd5b6040516080810181811067ffffffffffffffff82111715612fa957612fa9612a69565b6040528251612fb781612a98565b815260208381015190820152612fcf60408401612f54565b6040820152612fe060608401612f54565b60608201529392505050565b600060a08284031215612ffe57600080fd5b60405160a0810181811067ffffffffffffffff8211171561302157613021612a69565b806040525082358152602083013560208201526040830135604082015260608301356060820152608083013560808201528091505092915050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8481526000602060808184015280608084015260018060a085015260c0840160c060408601528087825260e08601905060e08860051b87010191508860005b8981101561318e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2088850301835281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18c360301811261314557600080fd5b8b01868101903567ffffffffffffffff81111561316157600080fd5b80360382131561317057600080fd5b61317b86828461305c565b95505050918501919085019084016130e4565b50505080935050505082606083015295945050505050565b6000602082840312156131b857600080fd5b815161239781612e47565b600084516131d5818460208901612cf4565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551613211816001850160208a01612cf4565b6001920191820152835161322c816002840160208801612cf4565b0160020195945050505050565b60006020828403121561324b57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561329357613293613252565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826132d6576132d6613298565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561332a5761332a613252565b500590565b6000808312837f80000000000000000000000000000000000000000000000000000000000000000183128115161561336957613369613252565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01831381161561339d5761339d613252565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000841360008413858304851182821616156133e4576133e4613252565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561341f5761341f613252565b6000871292508782058712848416161561343b5761343b613252565b8785058712818416161561345157613451613252565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0384138115161561349957613499613252565b827f80000000000000000000000000000000000000000000000000000000000000000384128116156134cd576134cd613252565b50500190565b600067ffffffffffffffff8083168185168083038211156134f6576134f6613252565b01949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561353757613537613252565b500290565b60008261354b5761354b613298565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261359b60c0830184612d24565b98975050505050505050565b600082198211156135ba576135ba613252565b500190565b805163ffffffff81168114611f7457600080fd5b805160ff81168114611f7457600080fd5b600060c082840312156135f657600080fd5b60405160c0810181811067ffffffffffffffff8211171561361957613619612a69565b604052613625836135bf565b8152613633602084016135d3565b6020820152613644604084016135d3565b6040820152613655606084016135bf565b6060820152613666608084016135bf565b608082015261367760a08401612f54565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036136b4576136b4613252565b506001019056fea164736f6c634300080f000a", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "01", + "0x0000000000000000000000000000000000000000000000000000000000000001": "2500000000000000000000000000000000000000003b9aca00", + "0x0000000000000000000000000000000000000000000000000000000000000032": "dead" + }, + "key": "0xed887ba298276e378c422b1a275e365711e6b29aaa834cebdc8465b204127702" + }, + "0x9fe46736679d2d9a65f0992f2272de9f3c7fa6e0": { + "balance": "0", + "nonce": 1, + "root": "0x310831b1cdcd6cda1d6c87661dc26734a307329aa4deb1d825f8ba5b99970645", + "codeHash": "0x1f958654ab06a152993e7a0ae7b6dbb0d4b19265cc9337b8789fe1353bd9dc35", + "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106d9565b610224565b6100a86100a33660046106f4565b610296565b6040516100b59190610777565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106d9565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ea565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060b565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006106357fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038390556040805173ffffffffffffffffffffffffffffffffffffffff8084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d457600080fd5b919050565b6000602082840312156106eb57600080fd5b610412826106b0565b60008060006040848603121561070957600080fd5b610712846106b0565b9250602084013567ffffffffffffffff8082111561072f57600080fd5b818601915086601f83011261074357600080fd5b81358181111561075257600080fd5b87602082850101111561076457600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a457858101830151858201604001528201610788565b818111156107b6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "01", + "0x0000000000000000000000000000000000000000000000000000000000000001": "2600000000000000000000000000000000000000003b9aca00", + "0x0000000000000000000000000000000000000000000000000000000000000032": "dead", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "9e545e3c0baab3e08cdfd552c960a1050f373042", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "5fbdb2315678afecb367f032d93f642f64180aa3" + }, + "key": "0x08460e45164e07e0e4df7165de40d5863fb7b8ece896a164bf57a134287c68f5" + }, + "0xa513e6e4b8f2a923d98304ec87f64353c4d5c853": { + "balance": "0", + "nonce": 1, + "root": "0x581ae04da8e2ffa203420263bc7eb09d342be7035bff8477f5d7e18b5e33c232", + "codeHash": "0x1f958654ab06a152993e7a0ae7b6dbb0d4b19265cc9337b8789fe1353bd9dc35", + "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106d9565b610224565b6100a86100a33660046106f4565b610296565b6040516100b59190610777565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106d9565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ea565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060b565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006106357fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038390556040805173ffffffffffffffffffffffffffffffffffffffff8084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d457600080fd5b919050565b6000602082840312156106eb57600080fd5b610412826106b0565b60008060006040848603121561070957600080fd5b610712846106b0565b9250602084013567ffffffffffffffff8082111561072f57600080fd5b818601915086601f83011261074357600080fd5b81358181111561075257600080fd5b87602082850101111561076457600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a457858101830151858201604001528201610788565b818111156107b6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", + "storage": { + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "59b670e9fa9d0a427751af201d676719a970857b", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "5fbdb2315678afecb367f032d93f642f64180aa3" + }, + "key": "0x3f005d5c85385294c7a0de617e62ea384bebca06a5b203bd6166371f023de860" + }, + "0xa51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0": { + "balance": "0", + "nonce": 1, + "root": "0x99671105820c3fffd5058012b89ca58dddaa43a16e0a54ab0d5a7723f4c998f2", + "codeHash": "0x1f958654ab06a152993e7a0ae7b6dbb0d4b19265cc9337b8789fe1353bd9dc35", + "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106d9565b610224565b6100a86100a33660046106f4565b610296565b6040516100b59190610777565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106d9565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ea565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060b565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006106357fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038390556040805173ffffffffffffffffffffffffffffffffffffffff8084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d457600080fd5b919050565b6000602082840312156106eb57600080fd5b610412826106b0565b60008060006040848603121561070957600080fd5b610712846106b0565b9250602084013567ffffffffffffffff8082111561072f57600080fd5b818601915086601f83011261074357600080fd5b81358181111561075257600080fd5b87602082850101111561076457600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a457858101830151858201604001528201610788565b818111156107b6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "01", + "0x0000000000000000000000000000000000000000000000000000000000000065": "4b726f6d615365637572697479436f756e63696c000000000000000000000028", + "0x0000000000000000000000000000000000000000000000000000000000000066": "4b53430000000000000000000000000000000000000000000000000000000006", + "0x0000000000000000000000000000000000000000000000000000000000000099": "03", + "0x000000000000000000000000000000000000000000000000000000000000012d": "f39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0x0000000000000000000000000000000000000000000000000000000000000161": "4b726f6d615365637572697479436f756e63696c000000000000000000000028", + "0x0000000000000000000000000000000000000000000000000000000000000162": "3100000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000195": "03", + "0x00000000000000000000000000000000000000000000000000000000000001f7": "03", + "0x00000000000000000000000000000000000000000000000000000000000001f8": "01", + "0x0368ef2524a38b6b115d8ebd4b69ba6955d052f73f6a344b60cd0a0506a9d257": "70997970c51812dc3a010c7d01b50e0d17dc79c8", + "0x057edaae68d51eec754066df75dd2069eb696ff039b09734aba5812253786c27": "01", + "0x1b5420bf53fcfb00d9f99ce9bca9913de940cff08ed8b58c6100c58cdb99dcaf": "02", + "0x2f09a8ecadf9dcffddc0520948687cf84b3134ffe164b9b816be8f223e9e3f0c": "010000002c", + "0x2f7a9cff6166705937132e731d03ca3e5faa143373c7792e6ce15f51d1ab24b7": "01", + "0x34a128ff2438bccb68124de780ea45be60aca78c6fb6ce114324ee2dd88c546d": "fabb0ac9d68b0b445fb7357272ff202c5651694a", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "f5059a5d33d5853360d16c683c16e67980206f36", + "0x54034dca961b61bc2a3147cc0c1986762915b42723ed64155364f17a2e296770": "010000002b", + "0x54034dca961b61bc2a3147cc0c1986762915b42723ed64155364f17a2e296771": "020000002c", + "0x54034dca961b61bc2a3147cc0c1986762915b42723ed64155364f17a2e296772": "030000002d", + "0x5b542b52981c4f2fa9965514d5bb7f37f1b7bc0902a6a4dc6b04dc05be85586b": "01", + "0x6b5af3b1d385c06ee560b099063c98155ccb14d842fd04c7a6955cd2edcd5166": "01", + "0x6bee784efeb983674392298ab585b22866bedf00ebb0eea949d1e66f3f50e71d": "71be63f3384f5fb98995898a86b02fb2426c5788", + "0x72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94979d01": "01", + "0x72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94979d02": "02", + "0x81fe90a866a48a634a12852c1be675b683a22307409932a7443b8029347be756": "312e706e6700000000000000000000000000000000000000000000000000000a", + "0x8cad034229e7b37f8fa1634fc76a99eb0843bd3d554bbf516dc212c13b2f1c76": "332e706e6700000000000000000000000000000000000000000000000000000a", + "0x8cef3c7042a130027243cb2f998ead5342d2a129784eda79676f7704b2ea4f6c": "01", + "0x8df7a434b53c9aea5a5338791875bc3a8969cb613c974168f95eefeae5fd01ae": "01", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "5fbdb2315678afecb367f032d93f642f64180aa3", + "0xb6aab34db6ad98c1b7e7142146804ce9fc6992da8076478d289c62788d5fa80f": "010000002b", + "0xb7daf9b15a61fd1e001a01cae8981f19b5cd917dea1a292fe96bf8ed779c8ac9": "71be63f3384f5fb98995898a86b02fb2426c5788", + "0xc4f77ef82cda0901cfdbeef8591c09692efae33b0f3173d67fb6cd42be529d44": "010000002d", + "0xd4e1ac8b62c3ff1e2c1b7113742533b8310ce5ab8a8767ead9ba8b250c7e3cc9": "70997970c51812dc3a010c7d01b50e0d17dc79c8", + "0xd9841eb47aa407700e14e706cabe283f9effe927976c5e8d4e2a2d8069f76af8": "01", + "0xe7659034bb7a5559d77c81228f78f1269e2e2532abae1c7e5319fa4c1ffcfff7": "fabb0ac9d68b0b445fb7357272ff202c5651694a", + "0xe8490770d22d54fb4d645fe3400077e850a009c5757ff32d576f5c74522c27e2": "01", + "0xec506dfa273b51989632259ed9c63e160e61bff5202e6a55d2c8927ffef177ed": "322e706e6700000000000000000000000000000000000000000000000000000a", + "0xf92510f12505915ee936d1a26b042eea9fe2264e0cd332bcee071a2783d1a3e9": "02" + }, + "key": "0x7b52b82e709191be4bae3bb8544d2a6b51d7440a1d15ba1f09e33bcf049e47a5" + }, + "0xb7f8bc63bbcad18155201308c8f3540b07f84f5e": { + "balance": "0", + "nonce": 1, + "root": "0xa7588fd3df92b339e91971e38708049df6ac910d11069878145bcec1c1d45126", + "codeHash": "0x1f958654ab06a152993e7a0ae7b6dbb0d4b19265cc9337b8789fe1353bd9dc35", + "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106d9565b610224565b6100a86100a33660046106f4565b610296565b6040516100b59190610777565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106d9565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ea565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060b565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006106357fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038390556040805173ffffffffffffffffffffffffffffffffffffffff8084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d457600080fd5b919050565b6000602082840312156106eb57600080fd5b610412826106b0565b60008060006040848603121561070957600080fd5b610712846106b0565b9250602084013567ffffffffffffffff8082111561072f57600080fd5b818601915086601f83011261074357600080fd5b81358181111561075257600080fd5b87602082850101111561076457600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a457858101830151858201604001528201610788565b818111156107b6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", + "storage": { + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "5eb3bc0a489c5a8288765d2336659ebca68fcd00", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "5fbdb2315678afecb367f032d93f642f64180aa3" + }, + "key": "0xad6ff7dc4f5626bc6b49eb92a9bbcd72320506ab7bfa9f543c096f7a28980df6" + }, + "0xc3e53f4d16ae77db1c982e75a937b9f60fe63690": { + "balance": "0", + "nonce": 1, + "root": "0x96b09bf069761b603c14e29618427991191ff25a2df7010e45a8c03fa2e99a92", + "codeHash": "0x86d51f72248949d995eace1f6bf78a204c0bebff14ff5908c602d51cb379e196", + "code": "0x608060405234801561001057600080fd5b50600436106101ad5760003560e01c8063887c560f116100ee578063cfb4474d11610097578063e39a219c11610071578063e39a219c1461050b578063e58932b31461051e578063e9371a2c1461053e578063fc9d84df1461055e57600080fd5b8063cfb4474d14610496578063d2ee3075146104bd578063d5145ebc146104e457600080fd5b8063a41483e3116100c8578063a41483e31461045d578063a6ade11f14610470578063b8b1a27c1461048357600080fd5b8063887c560f146103fc5780638f3a6c881461040f5780639ded39521461043657600080fd5b8063461569b81161015b5780635865b607116101355780635865b6071461039c57806362fc00db146103c35780636fe0e559146103d657806379c2575a146103e957600080fd5b8063461569b81461034d5780635375b8911461036057806354fd4d501461038757600080fd5b80632df27fa51161018c5780632df27fa51461023e57806336086417146102f15780634394c5841461031857600080fd5b80621c2ff6146101b25780631be4e27e146101f65780631db1b67214610229575b600080fd5b6101d97f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c981565b6040516001600160a01b0390911681526020015b60405180910390f35b6102196102043660046148da565b60036020526000908152604090205460ff1681565b60405190151581526020016101ed565b61023c610237366004614908565b610571565b005b6102aa61024c366004614908565b6002602090815260009283526040808420909152908252902080546001820154600383015460049093015460ff83169367ffffffffffffffff610100850416936001600160a01b036901000000000000000000909104811693169186565b6040805160ff909716875267ffffffffffffffff90951660208701526001600160a01b039384169486019490945291166060840152608083015260a082015260c0016101ed565b6101d97f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b61033f7f000000000000000000000000000000000000000000000000000000000000003c81565b6040519081526020016101ed565b61021961035b3660046148da565b61063b565b61033f7f000000000000000000000000000000000000000000000000000000000000006481565b61038f610730565b6040516101ed9190614990565b6101d97f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b181565b61023c6103d13660046149a3565b6107d3565b61023c6103e4366004614ac7565b610b21565b61023c6103f7366004614ba9565b610c9b565b61021961040a366004614908565b61160a565b61033f7f000000000000000000000000000000000000000000000000000000000000012c81565b6101d97f0000000000000000000000008a791620dd6260079bf849dc5567adc3f2fdc31881565b61023c61046b3660046148da565b61163f565b61023c61047e366004614c5a565b61177c565b61033f610491366004614cc4565b611ba0565b61033f7f000000000000000000000000000000000000000000000000000000000000001081565b61033f7f000000000000000000000000000000000000000000000000000000000000003c81565b61033f7fa1235b834d6f1f78f78bc4db856fbc49302cce2c519921347600693021e087f781565b61023c6105193660046148da565b611c1d565b61053161052c366004614908565b611fdf565b6040516101ed9190614ce7565b61055161054c366004614908565b6120ec565b6040516101ed9190614dc6565b61023c61056c366004614e07565b612117565b60008281526002602090815260408083206001600160a01b038516845290915281209061059d82612a7e565b905060038160058111156105b3576105b3614d97565b1461062b5760405162461bcd60e51b815260206004820152603c60248201527f436f6c6f737365756d3a2063616e206f6e6c792062652063616c6c656420696660448201527f20746865206368616c6c656e67657220697320696e2074696d6f75740000000060648201526084015b60405180910390fd5b6106358484612b5b565b50505050565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810182905260009081906001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9169063a25ae55790602401608060405180830381865afa1580156106be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e29190614e6b565b9050427f000000000000000000000000000000000000000000000000000000000000012c82604001516fffffffffffffffffffffffffffffffff166107279190614f12565b10159392505050565b606061075b7f0000000000000000000000000000000000000000000000000000000000000001612f54565b6107847f0000000000000000000000000000000000000000000000000000000000000000612f54565b6107ad7f0000000000000000000000000000000000000000000000000000000000000000612f54565b6040516020016107bf93929190614f2a565b604051602081830303815290604052905090565b336001600160a01b037f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e16146108715760405162461bcd60e51b815260206004820152602d60248201527f436f6c6f737365756d3a2073656e646572206973206e6f74207468652073656360448201527f757269747920636f756e63696c000000000000000000000000000000000000006064820152608401610622565b816108e45760405162461bcd60e51b815260206004820152602e60248201527f436f6c6f737365756d3a2063616e6e6f7420726f6c6c6261636b206f7574707560448201527f7420746f207a65726f20686173680000000000000000000000000000000000006064820152608401610622565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018690526000907f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b03169063a25ae55790602401608060405180830381865afa158015610965573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109899190614e6b565b6020015114610a005760405162461bcd60e51b815260206004820152603b60248201527f436f6c6f737365756d3a206f6e6c792063616e20726f6c6c6261636b2069662060448201527f746865206f757470757420686173206265656e2064656c6574656400000000006064820152608401610622565b6000818152600360205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517fe664672300000000000000000000000000000000000000000000000000000000815260048101869052602481018390526001600160a01b0384811660448301527f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9169063e664672390606401600060405180830381600087803b158015610abe57600080fd5b505af1158015610ad2573d6000803e3d6000fd5b50505050836001600160a01b0316857fdca9fa9b51a5ba03938c6a0cd5489011630370fc481ef2b0cb771ad904a7305342604051610b1291815260200190565b60405180910390a35050505050565b600054610100900460ff1615808015610b415750600054600160ff909116105b80610b5b5750303b158015610b5b575060005460ff166001145b610bcd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610622565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610c2b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610c3482612ff4565b8015610c9757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6040517f33727c4d0000000000000000000000000000000000000000000000000000000081526004810188905287907f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b0316906333727c4d90602401602060405180830381865afa158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f9190614fa0565b15610dd85760405162461bcd60e51b815260206004820152604b60248201527f436f6c6f737365756d3a2063616e6e6f742070726f6772657373206368616c6c60448201527f656e67652070726f636573732061626f757420616c72656164792066696e616c60648201527f697a6564206f7574707574000000000000000000000000000000000000000000608482015260a401610622565b6000888152600260209081526040808320338452909152812090610dfb82612a7e565b6001830154909150610e18908b906001600160a01b031683613184565b15610e24575050611600565b6005816005811115610e3857610e38614d97565b1480610e5557506004816005811115610e5357610e53614d97565b145b610ec75760405162461bcd60e51b815260206004820152603a60248201527f436f6c6f737365756d3a20696d706f737369626c6520746f2070726f7665207460448201527f6865206661756c7420696e2063757272656e74207374617475730000000000006064820152608401610622565b6000610ee0610edb368b90038b018b614fc2565b613515565b90506000610ef9610edb368c90038c0160a08d01614fc2565b9050610f0c8b8584848e60a081016135ea565b610f358a60a08101610f22610140830183615032565b610f306101608f018f615070565b6137a6565b610f67610f466101c08c018c6150a4565b8c61018001358d6101a001358e60a001604001358f60a001602001356138c1565b6000610f8460208c0135610f7f6101408e018e615032565b613a31565b60008181526003602052604090205490915060ff16156110325760405162461bcd60e51b815260206004820152604c60248201527f436f6c6f737365756d3a207075626c696320696e70757420746861742068617360448201527f20616c7265616479206265656e2076616c6964617465642063616e6e6f74206260648201527f65207573656420616761696e0000000000000000000000000000000000000000608482015260a401610622565b6040517f4292dc3e0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000008a791620dd6260079bf849dc5567adc3f2fdc3181690634292dc3e9061109f908d908d908d908d90889060040161515b565b602060405180830381865afa1580156110bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e09190614fa0565b61112c5760405162461bcd60e51b815260206004820152601860248201527f436f6c6f737365756d3a20696e76616c69642070726f6f6600000000000000006044820152606401610622565b60405142815233908e907f0431864ed2609170587bbc7c198abd8caee4c55943dfb16fd42ec6f59c91c5f79060200160405180910390a36040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018e90526000906001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9169063a25ae55790602401608060405180830381865afa1580156111e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112089190614e6b565b905060006362fc00db60e01b8f338960000160099054906101000a90046001600160a01b03168560200151876040516024016112729594939291909485526001600160a01b0393841660208601529190921660408401526060830191909152608082015260a00190565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009095169490941790935291840151606085015192517f080b91ee0000000000000000000000000000000000000000000000000000000081529193506001600160a01b037f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e169263080b91ee926113449291908690600401615195565b600060405180830381600087803b15801561135e57600080fd5b505af1158015611372573d6000803e3d6000fd5b50505050505060016003600083815260200190815260200160002060006101000a81548160ff021916908315150217905550600260008e81526020019081526020016000206000336001600160a01b03166001600160a01b03168152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a81549067ffffffffffffffff02191690556000820160096101000a8154906001600160a01b0302191690556001820160006101000a8154906001600160a01b03021916905560028201600061144e919061485c565b5060006003820181905560049182018190556040517fe66467230000000000000000000000000000000000000000000000000000000081529182018f905260248201523360448201526001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9169063e664672390606401600060405180830381600087803b1580156114e557600080fd5b505af11580156114f9573d6000803e3d6000fd5b505050507f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b031663b98debbf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561155b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157f91906151cf565b6040517fdd215c5d000000000000000000000000000000000000000000000000000000008152600481018f90523360248201526001600160a01b03919091169063dd215c5d90604401600060405180830381600087803b1580156115e257600080fd5b505af11580156115f6573d6000803e3d6000fd5b5050505050505050505b5050505050505050565b60008281526002602090815260408083206001600160a01b0385168452909152812061163581613ae4565b9150505b92915050565b600081815260026020908152604080832033845290915281209061166282612a7e565b9050600081600581111561167857611678614d97565b036116eb5760405162461bcd60e51b815260206004820152602760248201527f436f6c6f737365756d3a20746865206368616c6c656e676520646f6573206e6f60448201527f74206578697374000000000000000000000000000000000000000000000000006064820152608401610622565b60018201546117059084906001600160a01b031683613184565b6117775760405162461bcd60e51b815260206004820152602860248201527f436f6c6f737365756d3a206368616c6c656e67652063616e6e6f74206265206360448201527f616e63656c6c65640000000000000000000000000000000000000000000000006064820152608401610622565b505050565b6040517f33727c4d0000000000000000000000000000000000000000000000000000000081526004810186905285907f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b0316906333727c4d90602401602060405180830381865afa1580156117fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118209190614fa0565b156118b95760405162461bcd60e51b815260206004820152604b60248201527f436f6c6f737365756d3a2063616e6e6f742070726f6772657373206368616c6c60448201527f656e67652070726f636573732061626f757420616c72656164792066696e616c60648201527f697a6564206f7574707574000000000000000000000000000000000000000000608482015260a401610622565b60008681526002602090815260408083206001600160a01b03891684529091528120906118e582612a7e565b60018301549091506119029089906001600160a01b031683613184565b1561190e575050611b98565b6000600182600581111561192457611924614d97565b0361193d575060018201546001600160a01b0316611970565b600282600581111561195157611951614d97565b0361197057508154690100000000000000000090046001600160a01b03165b336001600160a01b038216146119c85760405162461bcd60e51b815260206004820152601860248201527f436f6c6f737365756d3a206e6f7420796f7572207475726e00000000000000006044820152606401610622565b82546000906119db9060ff1660016151ec565b9050611a6681856002018a815481106119f6576119f6615211565b9060005260206000200154866002018b6001611a129190614f12565b81548110611a2257611a22615211565b90600052602060002001548a8a80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613af892505050565b6000611a7185613c9e565b90506000611a7f828b615240565b8660040154611a8e9190614f12565b9050611ad1868a8a80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250869250879150613cca9050565b85547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff8416178655611b0586613cf4565b6040805160ff851681524260208201526001600160a01b038d16918e917fcadef6622777415b0589e491bdbf6baf11242f676f77055fd03bf1658c17a145910160405180910390a3611b5686613ae4565b611b91576040516001600160a01b038c16908d907f5c4528cbb38a169d24837617d3fd3d5c70a47769a4e9af6f384720b359b716c890600090a35b5050505050505b505050505050565b6000600160ff83161015611bf65760405162461bcd60e51b815260206004820152601760248201527f436f6c6f737365756d3a20696e76616c6964207475726e0000000000000000006044820152606401610622565b60016000611c04828561525f565b60ff168152602001908152602001600020549050919050565b336001600160a01b037f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e1614611cbb5760405162461bcd60e51b815260206004820152602d60248201527f436f6c6f737365756d3a2073656e646572206973206e6f74207468652073656360448201527f757269747920636f756e63696c000000000000000000000000000000000000006064820152608401610622565b6040517f33727c4d0000000000000000000000000000000000000000000000000000000081526004810182905281907f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b0316906333727c4d90602401602060405180830381865afa158015611d3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5f9190614fa0565b15611df85760405162461bcd60e51b815260206004820152604b60248201527f436f6c6f737365756d3a2063616e6e6f742070726f6772657373206368616c6c60448201527f656e67652070726f636573732061626f757420616c72656164792066696e616c60648201527f697a6564206f7574707574000000000000000000000000000000000000000000608482015260a401610622565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018390526000907f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b03169063a25ae55790602401608060405180830381865afa158015611e79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9d9190614e6b565b6020810151909150611f175760405162461bcd60e51b815260206004820152602e60248201527f436f6c6f737365756d3a20746865206f75747075742068617320616c7265616460448201527f79206265656e2064656c657465640000000000000000000000000000000000006064820152608401610622565b6040517fe664672300000000000000000000000000000000000000000000000000000000815260048101849052600060248201526001600160a01b037f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e811660448301527f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9169063e6646723906064015b600060405180830381600087803b158015611fc257600080fd5b505af1158015611fd6573d6000803e3d6000fd5b50505050505050565b6040805160e0810182526000808252602082018190529181018290526060808201839052608082015260a0810182905260c081019190915260008381526002602081815260408084206001600160a01b03808816865290835293819020815160e081018352815460ff8116825267ffffffffffffffff610100820416828601526901000000000000000000900486168184015260018201549095166060860152928301805482518185028101850190935280835260808601938301828280156120c757602002820191906000526020600020905b8154815260200190600101908083116120b3575b5050505050815260200160038201548152602001600482015481525050905092915050565b60008281526002602090815260408083206001600160a01b0385168452909152812061163581612a7e565b6040517f33727c4d0000000000000000000000000000000000000000000000000000000081526004810186905285907f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b0316906333727c4d90602401602060405180830381865afa158015612197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bb9190614fa0565b156122545760405162461bcd60e51b815260206004820152604b60248201527f436f6c6f737365756d3a2063616e6e6f742070726f6772657373206368616c6c60448201527f656e67652070726f636573732061626f757420616c72656164792066696e616c60648201527f697a6564206f7574707574000000000000000000000000000000000000000000608482015260a401610622565b600086116122ca5760405162461bcd60e51b815260206004820152603660248201527f436f6c6f737365756d3a206368616c6c656e676520666f722067656e6573697360448201527f206f7574707574206973206e6f7420616c6c6f776564000000000000000000006064820152608401610622565b600086815260026020908152604080832033845290915290208054600160ff909116106123b75760006122fc82612a7e565b9050600381600581111561231257612312614d97565b146123ab5760405162461bcd60e51b815260206004820152604660248201527f436f6c6f737365756d3a20746865206368616c6c656e676520666f722067697660448201527f656e206f757470757420696e64657820697320616c726561647920696e20707260648201527f6f67726573730000000000000000000000000000000000000000000000000000608482015260a401610622565b6123b58833612b5b565b505b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018890526000907f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b03169063a25ae55790602401608060405180830381865afa158015612438573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061245c9190614e6b565b9050427f000000000000000000000000000000000000000000000000000000000000012c82604001516fffffffffffffffffffffffffffffffff166124a19190614f12565b10156125155760405162461bcd60e51b815260206004820152603e60248201527f436f6c6f737365756d3a2063616e6e6f74206372656174652061206368616c6c60448201527f656e676520616674657220746865206372656174696f6e20706572696f6400006064820152608401610622565b602081015161258c5760405162461bcd60e51b815260206004820152603660248201527f436f6c6f737365756d3a206368616c6c656e676520666f722064656c6574656460448201527f206f7574707574206973206e6f7420616c6c6f776564000000000000000000006064820152608401610622565b80516001600160a01b0316330361260b5760405162461bcd60e51b815260206004820152603860248201527f436f6c6f737365756d3a2074686520617373657274657220616e64206368616c60448201527f6c656e676572206d75737420626520646966666572656e7400000000000000006064820152608401610622565b861580159061261a5750854015155b156126bc57868640146126bc5760405162461bcd60e51b8152602060048201526044602482018190527f436f6c6f737365756d3a20626c6f636b206861736820646f6573206e6f74206d908201527f617463682074686520686173682061742074686520657870656374656420686560648201527f6967687400000000000000000000000000000000000000000000000000000000608482015260a401610622565b60006001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c91663a25ae5576126f860018c615282565b6040518263ffffffff1660e01b815260040161271691815260200190565b608060405180830381865afa158015612733573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127579190614e6b565b60208101519091506127c5576127c060018787600081811061277b5761277b615211565b905060200201358460200151898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613af892505050565b61280d565b61280d600182602001518460200151898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613af892505050565b7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b031663b98debbf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561286b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288f91906151cf565b6040517f5a544742000000000000000000000000000000000000000000000000000000008152600481018b90523360248201526001600160a01b039190911690635a54474290604401600060405180830381600087803b1580156128f257600080fd5b505af1158015612906573d6000803e3d6000fd5b505050506129a9838787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050606086015161298391507f0000000000000000000000000000000000000000000000000000000000000010906fffffffffffffffffffffffffffffffff16615282565b7f0000000000000000000000000000000000000000000000000000000000000010613cca565b825482516001600160a01b03166901000000000000000000027fffffff0000000000000000000000000000000000000000ffffffffffffffff009091161760019081178455830180547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055612a2183613cf4565b815160405142815233916001600160a01b0316908b907fd2f7931a802085b3d0234d4c320ce7ee0041da96678ce2bf5c93e8d3d7e65f529060200160405180910390a4505050505050505050565b6001600160a01b03163b151590565b8054600090600160ff9091161015612a9857506000919050565b8154600090612aa99060ff16613d95565b8354909150610100900467ffffffffffffffff16421115612b2f578015612ad35750600392915050565b8254612b1890612b13907f000000000000000000000000000000000000000000000000000000000000003c90610100900467ffffffffffffffff16614f12565b421190565b15612b265750600392915050565b50600492915050565b612b3883613ae4565b612b455750600592915050565b80612b51576002612b54565b60015b9392505050565b60008281526002602081815260408084206001600160a01b0386168552909152822080547fffffff00000000000000000000000000000000000000000000000000000000001681556001810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690559190612bdb9083018261485c565b600382016000905560048201600090555050806001600160a01b0316827fbf4506ef5d06ecb6168f37bc9e69dd473089eb9e3f2675322d01b4d466cff05142604051612c2991815260200190565b60405180910390a36040517f33727c4d000000000000000000000000000000000000000000000000000000008152600481018390527f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b0316906333727c4d90602401602060405180830381865afa158015612caf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd39190614fa0565b15612e59576040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018390526000907f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b03169063a25ae55790602401608060405180830381865afa158015612d59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7d9190614e6b565b90507f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b031663b98debbf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ddd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e0191906151cf565b81516040517f36b83469000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b03858116602483015291821660448201529116906336b8346990606401611fa8565b7f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b031663b98debbf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612edb91906151cf565b6040517fdd215c5d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b038381166024830152919091169063dd215c5d90604401600060405180830381600087803b158015612f4057600080fd5b505af1158015611b98573d6000803e3d6000fd5b60606000612f6183613dac565b600101905060008167ffffffffffffffff811115612f8157612f816149f5565b6040519080825280601f01601f191660200182016040528015612fab576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084612fb557509392505050565b6002815161300291906152c8565b156130755760405162461bcd60e51b815260206004820152603a60248201527f436f6c6f737365756d3a206c656e677468206f66207365676d656e7473206c6560448201527f6e677468732063616e6e6f74206265206f6464206e756d6265720000000000006064820152608401610622565b600160005b82518110156130ee5782818151811061309557613095615211565b6020026020010151600160008381526020019081526020016000208190555060018382815181106130c8576130c8615211565b60200260200101516130da9190615282565b6130e49083615240565b915060010161307a565b507f00000000000000000000000000000000000000000000000000000000000000108114610c975760405162461bcd60e51b815260206004820152602360248201527f436f6c6f737365756d3a20696e76616c6964207365676d656e7473206c656e6760448201527f74687300000000000000000000000000000000000000000000000000000000006064820152608401610622565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810184905260009081906001600160a01b037f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c9169063a25ae55790602401608060405180830381865afa158015613207573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061322b9190614e6b565b6020015190508015613241576000915050612b54565b336001600160a01b038516146132bf5760405162461bcd60e51b815260206004820152602560248201527f436f6c6f737365756d3a2073656e646572206973206e6f742061206368616c6c60448201527f656e6765720000000000000000000000000000000000000000000000000000006064820152608401610622565b60038360058111156132d3576132d3614d97565b03613348576040805162461bcd60e51b81526020600482015260248101919091527f436f6c6f737365756d3a206368616c6c656e67652063616e6e6f74206265206360448201527f616e63656c6c6564206966206368616c6c656e6765722074696d6564206f75746064820152608401610622565b6000858152600260208181526040808420338552909152822080547fffffff00000000000000000000000000000000000000000000000000000000001681556001810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905591906133bf9083018261485c565b50600060038201819055600490910155604051428152339086907f6f3468a095154788e69ed719ee418416c1e338ac2348ccb3531bb97a0ed6ed9d9060200160405180910390a37f000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c96001600160a01b031663b98debbf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613464573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061348891906151cf565b6040517f36b8346900000000000000000000000000000000000000000000000000000000815260048101879052336024820181905260448201526001600160a01b0391909116906336b8346990606401600060405180830381600087803b1580156134f257600080fd5b505af1158015613506573d6000803e3d6000fd5b50600198975050505050505050565b80516000906135775781516020808401516040808601516060808801516080808a0151855180890199909952888601969096529187019290925285015260a0808501929092528051808503909201825260c09093019092528151910120611639565b60405162461bcd60e51b815260206004820152602a60248201527f48617368696e673a20756e6b6e6f776e206f757470757420726f6f742070726f60448201527f6f662076657273696f6e000000000000000000000000000000000000000000006064820152608401610622565b919050565b8385600201878154811061360057613600615211565b90600052602060002001541461367e5760405162461bcd60e51b815260206004820152602d60248201527f436f6c6f737365756d3a2074686520736f75726365207365676d656e74206d7560448201527f7374206265206d617463686564000000000000000000000000000000000000006064820152608401610622565b61368785613ae4565b61372957826002860161369b886001614f12565b815481106136ab576136ab615211565b9060005260206000200154036137295760405162461bcd60e51b815260206004820152603660248201527f436f6c6f737365756d3a207468652064657374696e6174696f6e207365676d6560448201527f6e74206d757374206e6f74206265206d617463686564000000000000000000006064820152608401610622565b8060600135826080013514611b985760405162461bcd60e51b815260206004820152602960248201527f436f6c6f737365756d3a2074686520626c6f636b2068617368206d757374206260448201527f65206d61746368656400000000000000000000000000000000000000000000006064820152608401610622565b82602001358260e00135146138235760405162461bcd60e51b815260206004820152602960248201527f436f6c6f737365756d3a2074686520737461746520726f6f74206d757374206260448201527f65206d61746368656400000000000000000000000000000000000000000000006064820152608401610622565b600061383f6138318461535a565b61383a84615486565b613e8e565b9050808560800135146138ba5760405162461bcd60e51b815260206004820152602960248201527f436f6c6f737365756d3a2074686520626c6f636b2068617368206d757374206260448201527f65206d61746368656400000000000000000000000000000000000000000000006064820152608401610622565b5050505050565b60408051600060208201528082018690526060810185905260808082018590528251808303909101815260a08201928390527f12e64a72000000000000000000000000000000000000000000000000000000009092527f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b16001600160a01b0316906312e64a729061397e907f42000000000000000000000000000000000000030000000000000000000000009085908c908c90899060a401615627565b602060405180830381865afa15801561399b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139bf9190614fa0565b611fd65760405162461bcd60e51b815260206004820152603660248201527f436f6c6f737365756d3a20696e76616c6964204c32546f4c314d65737361676560448201527f50617373657220696e636c7573696f6e2070726f6f66000000000000000000006064820152608401610622565b600060607f0000000000000000000000000000000000000000000000000000000000000064613a646101208501856150a4565b90501015613ad157613ace7fa1235b834d6f1f78f78bc4db856fbc49302cce2c519921347600693021e087f7613a9e6101208601866150a4565b613ac991507f0000000000000000000000000000000000000000000000000000000000000064615282565b613ee5565b90505b61163584613ade8561535a565b83613f71565b60006001613af183613c9e565b1192915050565b805180613b0486611ba0565b14613b775760405162461bcd60e51b815260206004820152602260248201527f436f6c6f737365756d3a20696e76616c6964207365676d656e7473206c656e6760448201527f74680000000000000000000000000000000000000000000000000000000000006064820152608401610622565b81600081518110613b8a57613b8a615211565b60200260200101518414613c065760405162461bcd60e51b815260206004820152602c60248201527f436f6c6f737365756d3a20746865206669727374207365676d656e74206d757360448201527f74206265206d61746368656400000000000000000000000000000000000000006064820152608401610622565b81613c12600183615282565b81518110613c2257613c22615211565b602002602001015183036138ba5760405162461bcd60e51b815260206004820152602f60248201527f436f6c6f737365756d3a20746865206c617374207365676d656e74206d75737460448201527f206e6f74206265206d61746368656400000000000000000000000000000000006064820152608401610622565b805460009060ff166001613cb182611ba0565b613cbb9190615282565b8360030154612b549190615702565b8251613cdf906002860190602086019061487a565b50600484019190915560039092019190915550565b613cfd81613ae4565b613d6857613d2b7f000000000000000000000000000000000000000000000000000000000000003c42614f12565b815467ffffffffffffffff91909116610100027fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff90911617815550565b613d2b7f000000000000000000000000000000000000000000000000000000000000003c42614f12565b50565b6000613da2600283615716565b60ff161592915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613df5577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613e21576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310613e3f57662386f26fc10000830492506010015b6305f5e1008310613e57576305f5e100830492506008015b6127108310613e6b57612710830492506004015b60648310613e7d576064830492506002015b600a83106116395760010192915050565b6040805160108082526102208201909252600091829190816020015b6060815260200190600190039081613eaa579050509050613ecc848483613fe5565b613ed5816142ac565b8051906020012091505092915050565b606060008267ffffffffffffffff811115613f0257613f026149f5565b604051908082528060200260200182016040528015613f2b578160200160208202803683370190505b50905060005b83811015613f695784828281518110613f4c57613f4c615211565b602090810291909101015280613f6181615738565b915050613f31565b509392505050565b6000838360e0015184610100015185600001518660200151876060015188604001518960a001518a608001518b6101200151518c61012001518c604051602001613fc69c9b9a99989796959493929190615785565b6040516020818303038152906040528051906020012090509392505050565b6140138360200151604051602001613fff91815260200190565b6040516020818303038152906040526142f0565b8160008151811061402657614026615211565b602002602001018190525081600001518160018151811061404957614049615211565b602002602001018190525081602001518160028151811061406c5761406c615211565b60200260200101819052506140918360e00151604051602001613fff91815260200190565b816003815181106140a4576140a4615211565b60200260200101819052506140c98360c00151604051602001613fff91815260200190565b816004815181106140dc576140dc615211565b60200260200101819052508160400151816005815181106140ff576140ff615211565b602002602001018190525081606001518160068151811061412257614122615211565b602002602001018190525081608001518160078151811061414557614145615211565b6020026020010181905250614167836060015167ffffffffffffffff1661435f565b8160088151811061417a5761417a615211565b602002602001018190525061419c836080015167ffffffffffffffff1661435f565b816009815181106141af576141af615211565b60200260200101819052508160a0015181600a815181106141d2576141d2615211565b60200260200101819052506141f4836040015167ffffffffffffffff1661435f565b81600b8151811061420757614207615211565b60200260200101819052508160c0015181600c8151811061422a5761422a615211565b60200260200101819052508160e0015181600d8151811061424d5761424d615211565b602002602001018190525081610100015181600e8151811061427157614271615211565b60200260200101819052506142898360a0015161435f565b81600f8151811061429c5761429c615211565b6020026020010181905250505050565b606060006142b983614372565b90506142c7815160c06144aa565b816040516020016142d992919061583e565b604051602081830303815290604052915050919050565b6060808251600114801561431e575060808360008151811061431457614314615211565b016020015160f81c105b1561432a575081611639565b614336835160806144aa565b8360405160200161434892919061583e565b604051602081830303815290604052905092915050565b606061163961436d836146a0565b6142f0565b6060815160000361439157505060408051600081526020810190915290565b6000805b83518110156143d8578381815181106143b0576143b0615211565b602002602001015151826143c49190614f12565b9150806143d081615738565b915050614395565b60008267ffffffffffffffff8111156143f3576143f36149f5565b6040519080825280601f01601f19166020018201604052801561441d576020820181803683370190505b50600092509050602081015b85518310156144a157600086848151811061444657614446615211565b602002602001015190506000602082019050614464838284516147ff565b87858151811061447657614476615211565b6020026020010151518361448a9190614f12565b92505050828061449990615738565b935050614429565b50949350505050565b606080603884101561452957604080516001808252818301909252906020820181803683370190505090506144df83856151ec565b60f81b816000815181106144f5576144f5615211565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612b54565b600060015b6145388187615702565b1561455e578161454781615738565b9250614557905061010082615240565b905061452e565b614569826001614f12565b67ffffffffffffffff811115614581576145816149f5565b6040519080825280601f01601f1916602001820160405280156145ab576020820181803683370190505b5092506145b885836151ec565b6145c39060376151ec565b60f81b836000815181106145d9576145d9615211565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600190505b818111614697576101006146218284615282565b61462d90610100615951565b6146379088615702565b61464191906152c8565b60f81b83828151811061465657614656615211565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508061468f81615738565b91505061460d565b50509392505050565b60606000826040516020016146b791815260200190565b604051602081830303815290604052905060005b6020811015614726578181815181106146e6576146e6615211565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016600003614726578061471e81615738565b9150506146cb565b6000614733826020615282565b67ffffffffffffffff81111561474b5761474b6149f5565b6040519080825280601f01601f191660200182016040528015614775576020820181803683370190505b50905060005b81518110156144a157838361478f81615738565b9450815181106147a1576147a1615211565b602001015160f81c60f81b8282815181106147be576147be615211565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806147f781615738565b91505061477b565b8282825b6020811061483b578151835261481a602084614f12565b9250614827602083614f12565b9150614834602082615282565b9050614803565b905182516020929092036101000a6000190180199091169116179052505050565b5080546000825590600052602060002090810190613d9291906148c5565b8280548282559060005260206000209081019282156148b5579160200282015b828111156148b557825182559160200191906001019061489a565b506148c19291506148c5565b5090565b5b808211156148c157600081556001016148c6565b6000602082840312156148ec57600080fd5b5035919050565b6001600160a01b0381168114613d9257600080fd5b6000806040838503121561491b57600080fd5b82359150602083013561492d816148f3565b809150509250929050565b60005b8381101561495357818101518382015260200161493b565b838111156106355750506000910152565b6000815180845261497c816020860160208601614938565b601f01601f19169290920160200192915050565b602081526000612b546020830184614964565b600080600080600060a086880312156149bb57600080fd5b8535945060208601356149cd816148f3565b935060408601356149dd816148f3565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715614a4857614a486149f5565b60405290565b604051610120810167ffffffffffffffff81118282101715614a4857614a486149f5565b604051601f8201601f1916810167ffffffffffffffff81118282101715614a9b57614a9b6149f5565b604052919050565b600067ffffffffffffffff821115614abd57614abd6149f5565b5060051b60200190565b60006020808385031215614ada57600080fd5b823567ffffffffffffffff811115614af157600080fd5b8301601f81018513614b0257600080fd5b8035614b15614b1082614aa3565b614a72565b81815260059190911b82018301908381019087831115614b3457600080fd5b928401925b82841015614b5257833582529284019290840190614b39565b979650505050505050565b60008083601f840112614b6f57600080fd5b50813567ffffffffffffffff811115614b8757600080fd5b6020830191508360208260051b8501011115614ba257600080fd5b9250929050565b600080600080600080600060a0888a031215614bc457600080fd5b8735965060208801359550604088013567ffffffffffffffff80821115614bea57600080fd5b908901906101e0828c031215614bff57600080fd5b90955060608901359080821115614c1557600080fd5b614c218b838c01614b5d565b909650945060808a0135915080821115614c3a57600080fd5b50614c478a828b01614b5d565b989b979a50959850939692959293505050565b600080600080600060808688031215614c7257600080fd5b853594506020860135614c84816148f3565b935060408601359250606086013567ffffffffffffffff811115614ca757600080fd5b614cb388828901614b5d565b969995985093965092949392505050565b600060208284031215614cd657600080fd5b813560ff81168114612b5457600080fd5b60006020808352610100830160ff8551168285015267ffffffffffffffff8286015116604085015260408501516001600160a01b0380821660608701528060608801511660808701525050608085015160e060a0860152818151808452610120870191508483019350600092505b80831015614d755783518252928401926001929092019190840190614d55565b5060a087015160c087015260c087015160e08701528094505050505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160068310614e01577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600080600080600060808688031215614e1f57600080fd5b853594506020860135935060408601359250606086013567ffffffffffffffff811115614ca757600080fd5b80516fffffffffffffffffffffffffffffffff811681146135e557600080fd5b600060808284031215614e7d57600080fd5b6040516080810181811067ffffffffffffffff82111715614ea057614ea06149f5565b6040528251614eae816148f3565b815260208381015190820152614ec660408401614e4b565b6040820152614ed760608401614e4b565b60608201529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614f2557614f25614ee3565b500190565b60008451614f3c818460208901614938565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551614f78816001850160208a01614938565b60019201918201528351614f93816002840160208801614938565b0160020195945050505050565b600060208284031215614fb257600080fd5b81518015158114612b5457600080fd5b600060a08284031215614fd457600080fd5b60405160a0810181811067ffffffffffffffff82111715614ff757614ff76149f5565b806040525082358152602083013560208201526040830135604082015260608301356060820152608083013560808201528091505092915050565b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec183360301811261506657600080fd5b9190910192915050565b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee183360301811261506657600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126150d957600080fd5b83018035915067ffffffffffffffff8211156150f457600080fd5b6020019150600581901b3603821315614ba257600080fd5b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561513e57600080fd5b8260051b8083602087013760009401602001938452509192915050565b60608152600061516f60608301878961510c565b828103602084015261518281868861510c565b9150508260408301529695505050505050565b8381526fffffffffffffffffffffffffffffffff831660208201526060604082015260006151c66060830184614964565b95945050505050565b6000602082840312156151e157600080fd5b8151612b54816148f3565b600060ff821660ff84168060ff0382111561520957615209614ee3565b019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081600019048311821515161561525a5761525a614ee3565b500290565b600060ff821660ff84168082101561527957615279614ee3565b90039392505050565b60008282101561529457615294614ee3565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826152d7576152d7615299565b500690565b803567ffffffffffffffff811681146135e557600080fd5b600082601f83011261530557600080fd5b81356020615315614b1083614aa3565b82815260059290921b8401810191818101908684111561533457600080fd5b8286015b8481101561534f5780358352918301918301615338565b509695505050505050565b6000610140823603121561536d57600080fd5b615375614a24565b823581526020830135602082015261538f604084016152dc565b60408201526153a0606084016152dc565b60608201526153b1608084016152dc565b608082015260a083013560a082015260c083013560c082015260e083013560e08201526101008084013581830152506101208084013567ffffffffffffffff8111156153fc57600080fd5b615408368287016152f4565b918301919091525092915050565b600082601f83011261542757600080fd5b813567ffffffffffffffff811115615441576154416149f5565b6154546020601f19601f84011601614a72565b81815284602083860101111561546957600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561549957600080fd5b6154a1614a4e565b823567ffffffffffffffff808211156154b957600080fd5b6154c536838701615416565b835260208501359150808211156154db57600080fd5b6154e736838701615416565b6020840152604085013591508082111561550057600080fd5b61550c36838701615416565b6040840152606085013591508082111561552557600080fd5b61553136838701615416565b6060840152608085013591508082111561554a57600080fd5b61555636838701615416565b608084015260a085013591508082111561556f57600080fd5b61557b36838701615416565b60a084015260c085013591508082111561559457600080fd5b6155a036838701615416565b60c084015260e08501359150808211156155b957600080fd5b6155c536838701615416565b60e0840152610100915081850135818111156155e057600080fd5b6155ec36828801615416565b8385015250505080915050919050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b858152600060206080818401526156416080840188614964565b8381036040850152858152818101600587901b820183018860005b898110156156e957601f1985840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18c360301811261569f57600080fd5b8b01868101903567ffffffffffffffff8111156156bb57600080fd5b8036038213156156ca57600080fd5b6156d58582846155fc565b95880195945050509085019060010161565c565b5050809450505050508260608301529695505050505050565b60008261571157615711615299565b500490565b600060ff83168061572957615729615299565b8060ff84160691505092915050565b6000600019820361574b5761574b614ee3565b5060010190565b60008151602080840160005b8381101561577a5781518752958201959082019060010161575e565b509495945050505050565b8c81528b60208201528a604082015289606082015288608082015260007fffffffffffffffff000000000000000000000000000000000000000000000000808a60c01b1660a0840152808960c01b1660a88401528760b0840152808760c01b1660d0840152507fffff0000000000000000000000000000000000000000000000000000000000008560f01b1660d883015261582c61582660da840186615752565b84615752565b9e9d5050505050505050505050505050565b60008351615850818460208801614938565b835190830190615864818360208801614938565b01949350505050565b600181815b808511156158a857816000190482111561588e5761588e614ee3565b8085161561589b57918102915b93841c9390800290615872565b509250929050565b6000826158bf57506001611639565b816158cc57506000611639565b81600181146158e257600281146158ec57615908565b6001915050611639565b60ff8411156158fd576158fd614ee3565b50506001821b611639565b5060208310610133831016604e8410600b841016171561592b575081810a611639565b615935838361586d565b806000190482111561594957615949614ee3565b029392505050565b6000612b5483836158b056fea164736f6c634300080f000a", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "01", + "0x7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b": "03", + "0xa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49": "03", + "0xcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f": "03", + "0xd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f": "03" + }, + "key": "0xe645f3e3dba1eb870eb045c6df181f42832b2ef1c0ba7b9eaac56d015a81bc52" + }, + "0xcf7ed3acca5a467e9e704c703e8d87f634fb0fc9": { + "balance": "0", + "nonce": 1, + "root": "0xff29c40b301f27059233982c149e2af24c6b4d009a58ac450255f06c9501fe91", + "codeHash": "0x1f958654ab06a152993e7a0ae7b6dbb0d4b19265cc9337b8789fe1353bd9dc35", + "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106d9565b610224565b6100a86100a33660046106f4565b610296565b6040516100b59190610777565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106d9565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ea565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060b565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006106357fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038390556040805173ffffffffffffffffffffffffffffffffffffffff8084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d457600080fd5b919050565b6000602082840312156106eb57600080fd5b610412826106b0565b60008060006040848603121561070957600080fd5b610712846106b0565b9250602084013567ffffffffffffffff8082111561072f57600080fd5b818601915086601f83011261074357600080fd5b81358181111561075257600080fd5b87602082850101111561076457600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a457858101830151858201604001528201610788565b818111156107b6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "01", + "0x0000000000000000000000000000000000000000000000000000000000000001": "01", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "4a679253410272dd5232b3ff7cf5dbb88f295319", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "5fbdb2315678afecb367f032d93f642f64180aa3" + }, + "key": "0xfe007bdba68bf70aaeb167af64e1fe093e2da7911c8fdd2ca2cbd15510556466" + }, + "0xdc64a140aa3e981100a9beca4e685f962f0cf6c9": { + "balance": "0", + "nonce": 1, + "root": "0x14f5b00a2efa9e8091040883b5d8bce450f2511f18c0b2c263a7375955bc7fa1", + "codeHash": "0x1f958654ab06a152993e7a0ae7b6dbb0d4b19265cc9337b8789fe1353bd9dc35", + "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106d9565b610224565b6100a86100a33660046106f4565b610296565b6040516100b59190610777565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106d9565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ea565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060b565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006106357fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038390556040805173ffffffffffffffffffffffffffffffffffffffff8084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d457600080fd5b919050565b6000602082840312156106eb57600080fd5b610412826106b0565b60008060006040848603121561070957600080fd5b610712846106b0565b9250602084013567ffffffffffffffff8082111561072f57600080fd5b818601915086601f83011261074357600080fd5b81358181111561075257600080fd5b87602082850101111561076457600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a457858101830151858201604001528201610788565b818111156107b6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "01", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "09635f643e140090a9a8dcd712ed6285858cebef", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "5fbdb2315678afecb367f032d93f642f64180aa3" + }, + "key": "0x5955c038e06073af9c7343aebef817ef3c1a62b10ca675a3d129ce4e4269f7ea" + }, + "0xdef2758258f4d6cf38f933e0a21bfb400d609b03": { + "balance": "115792089237316195423570985008687907853269984665640564039455751956558596828552", + "nonce": 2, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "key": "0xe0807c32c3fe09d63d0a7ecde117c7b812e3e296a910ebba2fb8cb29ce99e74e" + }, + "0xe7f1725e7734ce288f8367e1bb143e90bb3f0512": { + "balance": "0", + "nonce": 1, + "root": "0x275195250374e2e4818498e7cca63294f5a21703a2f0882912b9c8ed2dd35b84", + "codeHash": "0x1f958654ab06a152993e7a0ae7b6dbb0d4b19265cc9337b8789fe1353bd9dc35", + "code": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106d9565b610224565b6100a86100a33660046106f4565b610296565b6040516100b59190610777565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106d9565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ea565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060b565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006106357fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038390556040805173ffffffffffffffffffffffffffffffffffffffff8084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d457600080fd5b919050565b6000602082840312156106eb57600080fd5b610412826106b0565b60008060006040848603121561070957600080fd5b610712846106b0565b9250602084013567ffffffffffffffff8082111561072f57600080fd5b818601915086601f83011261074357600080fd5b81358181111561075257600080fd5b87602082850101111561076457600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a457858101830151858201604001528201610788565b818111156107b6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "01", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0dcd1bf9a1b36ce34237eeafef220932846bcd82", + "0x0000000000000000000000000000000000000000000000000000000000000065": "0834", + "0x0000000000000000000000000000000000000000000000000000000000000066": "0f4240", + "0x0000000000000000000000000000000000000000000000000000000000000067": "3c44cdddb6a900fa2b585dd299e03d12fa4293bc", + "0x0000000000000000000000000000000000000000000000000000000000000068": "01c9c380", + "0x0000000000000000000000000000000000000000000000000000000000000069": "ffffffffffffffffffffffffffffffff000f42403b9aca00080a01312d00", + "0x000000000000000000000000000000000000000000000000000000000000006a": "1388", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "1613beb3b2c4f22ee086b2b38c1476a3ce7f78e8", + "0x65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08": "9965507d1a55bcc2695c58ba16fb37d819b0a4dc", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "5fbdb2315678afecb367f032d93f642f64180aa3" + }, + "key": "0x798c6047767c10f653ca157a7f66a592a1d6ca550cae352912be0b0745336afd" + }, + "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266": { + "balance": "835600820759702950", + "nonce": 48, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "key": "0xe9707d0e6171f728f7473c24cc0432a9b07eaaf1efed6a137a4a8c12c79552d9" + }, + "0xf5059a5d33d5853360d16c683c16e67980206f36": { + "balance": "0", + "nonce": 1, + "root": "0x01f9e62d19297f681ea2208de1fec6c67ed86a26e55dbf4b27a1b0881060507b", + "codeHash": "0x98a0aee2613d040c1d9fd0242fa8fc3665aa8059973290d255baf31d0100d3ed", + "code": "0x608060405234801561001057600080fd5b50600436106102925760003560e01c806370a08231116101605780639ab24eb0116100d8578063c4d66de81161008c578063d204c45e11610071578063d204c45e14610538578063e985e9c51461054b578063f2fde38b1461058757600080fd5b8063c4d66de814610512578063c87b56dd1461052557600080fd5b8063b45a3c0e116100bd578063b45a3c0e146104d9578063b88d4fde146104ec578063c3cda520146104ff57600080fd5b80639ab24eb0146104b3578063a22cb465146104c657600080fd5b806384b0196e1161012f5780638e539e8c116101145780638e539e8c1461047957806391ddadf41461048c57806395d89b41146104ab57600080fd5b806384b0196e1461044c5780638da5cb5b1461046757600080fd5b806370a0823114610416578063715018a6146104295780637ecebe00146104315780638456cb591461044457600080fd5b80633f4ba83a1161020e57806354fd4d50116101c25780635c19a95c116101a75780635c19a95c146103e55780635c975abb146103f85780636352211e1461040357600080fd5b806354fd4d50146103b0578063587cde1e146103b857600080fd5b806342966c68116101f357806342966c68146103825780634bf5d7e9146103955780634f6ccce71461039d57600080fd5b80633f4ba83a1461036757806342842e0e1461036f57600080fd5b806318160ddd116102655780632f745c591161024a5780632f745c59146103395780633644e5151461034c5780633a46b1a81461035457600080fd5b806318160ddd1461031457806323b872dd1461032657600080fd5b806301ffc9a71461029757806306fdde03146102bf578063081812fc146102d4578063095ea7b3146102ff575b600080fd5b6102aa6102a5366004613e5a565b61059a565b60405190151581526020015b60405180910390f35b6102c76105f6565b6040516102b69190613eed565b6102e76102e2366004613f00565b610688565b6040516001600160a01b0390911681526020016102b6565b61031261030d366004613f35565b6106af565b005b6099545b6040519081526020016102b6565b610312610334366004613f5f565b6106fb565b610318610347366004613f35565b610749565b6103186107f6565b610318610362366004613f35565b610805565b6103126108b5565b61031261037d366004613f5f565b6108c7565b610312610390366004613f00565b610910565b6102c7610924565b6103186103ab366004613f00565b6109bc565b6102c7610a60565b6102e76103c6366004613f9b565b6001600160a01b03908116600090815261019360205260409020541690565b6103126103f3366004613f9b565b610b03565b60fb5460ff166102aa565b6102e7610411366004613f00565b610b0e565b610318610424366004613f9b565b610b73565b610312610c0d565b61031861043f366004613f9b565b610c1f565b610312610c3e565b610454610c4e565b6040516102b69796959493929190613fb6565b61012d546001600160a01b03166102e7565b610318610487366004613f00565b610d12565b610494610dab565b60405165ffffffffffff90911681526020016102b6565b6102c7610db6565b6103186104c1366004613f9b565b610dc5565b6103126104d4366004614068565b610de7565b6102aa6104e7366004613f00565b610e2f565b6103126104fa366004614167565b610e89565b61031261050d3660046141e3565b610ed9565b610312610520366004613f9b565b61100f565b6102c7610533366004613f00565b6111d7565b610312610546366004614243565b6111e2565b6102aa6105593660046142a5565b6001600160a01b039182166000908152606a6020908152604080832093909416825291909152205460ff1690565b610312610595366004613f9b565b611225565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fb45a3c0e0000000000000000000000000000000000000000000000000000000014806105f057506105f0826112b2565b92915050565b606060658054610605906142d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610631906142d8565b801561067e5780601f106106535761010080835404028352916020019161067e565b820191906000526020600020905b81548152906001019060200180831161066157829003601f168201915b5050505050905090565b600061069382611308565b506000908152606960205260409020546001600160a01b031690565b6101f85460ff16156106ed576040517fbd291a9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106f7828261136c565b5050565b6101f85460ff1615610739576040517fbd291a9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610744838383611498565b505050565b600061075483610b73565b82106107cd5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e647300000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506001600160a01b03919091166000908152609760209081526040808320938352929052205490565b600061080061151f565b905090565b600061080f610dab565b65ffffffffffff1682106108655760405162461bcd60e51b815260206004820152601460248201527f566f7465733a20667574757265206c6f6f6b757000000000000000000000000060448201526064016107c4565b61089061087183611529565b6001600160a01b038516600090815261019460205260409020906115a9565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169392505050565b6108bd611673565b6108c56116ce565b565b6101f85460ff1615610905576040517fbd291a9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610744838383611720565b610918611673565b6109218161173b565b50565b60604361092f610dab565b65ffffffffffff16146109845760405162461bcd60e51b815260206004820152601860248201527f566f7465733a2062726f6b656e20636c6f636b206d6f6465000000000000000060448201526064016107c4565b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b60006109c760995490565b8210610a3b5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e6473000000000000000000000000000000000000000060648201526084016107c4565b60998281548110610a4e57610a4e614325565b90600052602060002001549050919050565b6060610a8b7f0000000000000000000000000000000000000000000000000000000000000001611744565b610ab47f0000000000000000000000000000000000000000000000000000000000000000611744565b610add7f0000000000000000000000000000000000000000000000000000000000000001611744565b604051602001610aef93929190614354565b604051602081830303815290604052905090565b336106f781836117e5565b6000818152606760205260408120546001600160a01b0316806105f05760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016107c4565b60006001600160a01b038216610bf15760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e6572000000000000000000000000000000000000000000000060648201526084016107c4565b506001600160a01b031660009081526068602052604090205490565b610c15611673565b6108c56000611870565b6001600160a01b038116600090815261019660205260408120546105f0565b610c46611673565b6108c56118db565b60006060806000806000606061015f546000801b148015610c70575061016054155b610cbc5760405162461bcd60e51b815260206004820152601560248201527f4549503731323a20556e696e697469616c697a6564000000000000000000000060448201526064016107c4565b610cc4611918565b610ccc611928565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b6000610d1c610dab565b65ffffffffffff168210610d725760405162461bcd60e51b815260206004820152601460248201527f566f7465733a20667574757265206c6f6f6b757000000000000000000000000060448201526064016107c4565b610d87610d7e83611529565b610195906115a9565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1692915050565b600061080043611938565b606060668054610605906142d8565b6001600160a01b038116600090815261019460205260408120610d87906119b6565b6101f85460ff1615610e25576040517fbd291a9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106f78282611a06565b6000818152606760205260408120546001600160a01b0316610e7d576040517fae9a63f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50506101f85460ff1690565b6101f85460ff1615610ec7576040517fbd291a9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ed384848484611a11565b50505050565b83421115610f295760405162461bcd60e51b815260206004820152601860248201527f566f7465733a207369676e61747572652065787069726564000000000000000060448201526064016107c4565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610fa390610f9b9060a00160405160208183030381529060405280519060200120611a99565b858585611ae1565b9050610fae81611b0b565b8614610ffc5760405162461bcd60e51b815260206004820152601460248201527f566f7465733a20696e76616c6964206e6f6e636500000000000000000000000060448201526064016107c4565b61100681886117e5565b50505050505050565b600054610100900460ff161580801561102f5750600054600160ff909116105b806110495750303b158015611049575060005460ff166001145b6110bb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107c4565b6000805460ff1916600117905580156110fb57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6111706040518060400160405280601481526020017f4b726f6d615365637572697479436f756e63696c0000000000000000000000008152506040518060400160405280600381526020017f4b5343000000000000000000000000000000000000000000000000000000000081525084611b34565b80156106f757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60606105f082611c2d565b6111ea611673565b60006111f66101f75490565b90506112076101f780546001019055565b6112118382611d5a565b61121b8183611d74565b61074483846117e5565b61122d611673565b6001600160a01b0381166112a95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107c4565b61092181611870565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f490649060000000000000000000000000000000000000000000000000000000014806105f057506105f082611e47565b6000818152606760205260409020546001600160a01b03166109215760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016107c4565b600061137782610b0e565b9050806001600160a01b0316836001600160a01b0316036114005760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084016107c4565b336001600160a01b038216148061141c575061141c8133610559565b61148e5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016107c4565b6107448383611e9d565b6114a23382611f23565b6115145760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016107c4565b610744838383611fa1565b60006108006121f7565b600063ffffffff8211156115a55760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201527f322062697473000000000000000000000000000000000000000000000000000060648201526084016107c4565b5090565b8154600090818160058111156116065760006115c48461226b565b6115ce90856143f9565b60008881526020902090915081015463ffffffff90811690871610156115f657809150611604565b611601816001614410565b92505b505b600061161487878585612353565b90508015611665576116398761162b6001846143f9565b600091825260209091200190565b5464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16611668565b60005b979650505050505050565b61012d546001600160a01b031633146108c55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107c4565b6116d66123a9565b60fb805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b61074483838360405180602001604052806000815250610e89565b610921816123fb565b606060006117518361243b565b600101905060008167ffffffffffffffff811115611771576117716140a4565b6040519080825280601f01601f19166020018201604052801561179b576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846117a5575b509392505050565b6001600160a01b038281166000818152610193602052604080822080548686167fffffffffffffffffffffffff0000000000000000000000000000000000000000821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610744818361186b8661251d565b612528565b61012d80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6118e36126ea565b60fb805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586117033390565b60606101618054610605906142d8565b60606101628054610605906142d8565b600065ffffffffffff8211156115a55760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201527f382062697473000000000000000000000000000000000000000000000000000060648201526084016107c4565b805460009080156119fc576119d08361162b6001846143f9565b5464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166119ff565b60005b9392505050565b6106f733838361273d565b611a1b3383611f23565b611a8d5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016107c4565b610ed38484848461280b565b60006105f0611aa661151f565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000611af287878787612894565b91509150611aff81612976565b5090505b949350505050565b6001600160a01b0381166000908152610196602052604090208054600181018255905b50919050565b600054610100900460ff16611bb15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107c4565b611bbb6001612adb565b611bc58383612b6c565b611bcd612bf3565b611bd5612bf3565b611bdd612c70565b611c1c836040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250612cf5565b611c24612bf3565b61074481611870565b6060611c3882611308565b600082815260c9602052604081208054611c51906142d8565b80601f0160208091040260200160405190810160405280929190818152602001828054611c7d906142d8565b8015611cca5780601f10611c9f57610100808354040283529160200191611cca565b820191906000526020600020905b815481529060010190602001808311611cad57829003601f168201915b505050505090506000611d0d60408051808201909152601d81527f68747470733a2f2f6e66742e6b726f6d612e6e6574776f726b2f73632f000000602082015290565b90508051600003611d1f575092915050565b815115611d51578082604051602001611d39929190614457565b60405160208183030381529060405292505050919050565b611b0384612d7c565b6106f7828260405180602001604052806000815250612e14565b6000828152606760205260409020546001600160a01b0316611dfe5760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201527f6578697374656e7420746f6b656e00000000000000000000000000000000000060648201526084016107c4565b600082815260c960205260409020611e1682826144d4565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7906020016111cb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d630000000000000000000000000000000000000000000000000000000014806105f057506105f082612e9d565b600081815260696020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091558190611eea82610b0e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611f2f83610b0e565b9050806001600160a01b0316846001600160a01b03161480611f7657506001600160a01b038082166000908152606a602090815260408083209388168352929052205460ff165b80611b035750836001600160a01b0316611f8f84610688565b6001600160a01b031614949350505050565b826001600160a01b0316611fb482610b0e565b6001600160a01b0316146120305760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016107c4565b6001600160a01b0382166120ab5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016107c4565b6120b88383836001612f80565b826001600160a01b03166120cb82610b0e565b6001600160a01b0316146121475760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016107c4565b600081815260696020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169091556001600160a01b0387811680865260688552838620805460001901905590871680865283862080546001019055868652606790945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a46107448383836001612f94565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f612222612fa0565b61222a612ffa565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60008160000361227d57506000919050565b6000600161228a8461302c565b901c6001901b905060018184816122a3576122a3614428565b048201901c905060018184816122bb576122bb614428565b048201901c905060018184816122d3576122d3614428565b048201901c905060018184816122eb576122eb614428565b048201901c9050600181848161230357612303614428565b048201901c9050600181848161231b5761231b614428565b048201901c9050600181848161233357612333614428565b048201901c90506119ff8182858161234d5761234d614428565b046130c0565b60005b818310156117dd57600061236a84846130d6565b60008781526020902090915063ffffffff86169082015463ffffffff161115612395578092506123a3565b6123a0816001614410565b93505b50612356565b60fb5460ff166108c55760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016107c4565b612404816130f1565b600081815260c960205260409020805461241d906142d8565b15905061092157600081815260c96020526040812061092191613de2565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612484577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106124b0576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106124ce57662386f26fc10000830492506010015b6305f5e10083106124e6576305f5e100830492506008015b61271083106124fa57612710830492506004015b6064831061250c576064830492506002015b600a83106105f05760010192915050565b60006105f082610b73565b816001600160a01b0316836001600160a01b03161415801561254a5750600081115b15610744576001600160a01b0383161561261d576001600160a01b038316600090815261019460205260408120819061258e906131b6612589866131c2565b613256565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1691507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612612929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610744576001600160a01b03821660009081526101946020526040812081906126579061329f612589866131c2565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1691507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516126db929190918252602082015260400190565b60405180910390a25050505050565b60fb5460ff16156108c55760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016107c4565b816001600160a01b0316836001600160a01b03160361279e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107c4565b6001600160a01b038381166000818152606a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612816848484611fa1565b612822848484846132ab565b610ed35760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016107c4565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156128cb575060009050600361296d565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561291f573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519150506001600160a01b0381166129665760006001925092505061296d565b9150600090505b94509492505050565b600081600481111561298a5761298a6145b2565b036129925750565b60018160048111156129a6576129a66145b2565b036129f35760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016107c4565b6002816004811115612a0757612a076145b2565b03612a545760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016107c4565b6003816004811115612a6857612a686145b2565b036109215760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016107c4565b600054610100900460ff16612b585760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107c4565b6101f8805460ff1916911515919091179055565b600054610100900460ff16612be95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107c4565b6106f78282613467565b600054610100900460ff166108c55760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107c4565b600054610100900460ff16612ced5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107c4565b6108c56134fd565b600054610100900460ff16612d725760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107c4565b6106f78282613586565b6060612d8782611308565b6000612dc360408051808201909152601d81527f68747470733a2f2f6e66742e6b726f6d612e6e6574776f726b2f73632f000000602082015290565b90506000815111612de357604051806020016040528060008152506119ff565b80612ded8461362f565b604051602001612dfe929190614457565b6040516020818303038152906040529392505050565b612e1e83836136cd565b612e2b60008484846132ab565b6107445760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016107c4565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480612f3057507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806105f057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146105f0565b612f886126ea565b610ed384848484613888565b610ed3848484846139c4565b600080612fab611918565b805190915015612fc2578051602090910120919050565b61015f548015612fd25792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b600080613005611928565b80519091501561301c578051602090910120919050565b610160548015612fd25792915050565b600080608083901c1561304157608092831c92015b604083901c1561305357604092831c92015b602083901c1561306557602092831c92015b601083901c1561307757601092831c92015b600883901c1561308957600892831c92015b600483901c1561309b57600492831c92015b600283901c156130ad57600292831c92015b600183901c156105f05760010192915050565b60008183106130cf57816119ff565b5090919050565b60006130e560028484186145e1565b6119ff90848416614410565b60006130fc82610b0e565b905061310c816000846001612f80565b61311582610b0e565b600083815260696020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169091556001600160a01b0385168085526068845282852080546000190190558785526067909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a46106f7816000846001612f94565b60006119ff828461461c565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8211156115a55760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203260448201527f323420626974730000000000000000000000000000000000000000000000000060648201526084016107c4565b600080613292613274613267610dab565b65ffffffffffff16611529565b61328a613280886119b6565b868863ffffffff16565b8791906139d4565b915091505b935093915050565b60006119ff8284614659565b60006001600160a01b0384163b1561345f576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290613308903390899088908890600401614690565b6020604051808303816000875af1925050508015613361575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261335e918101906146cc565b60015b613414573d80801561338f576040519150601f19603f3d011682016040523d82523d6000602084013e613394565b606091505b50805160000361340c5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016107c4565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611b03565b506001611b03565b600054610100900460ff166134e45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107c4565b60656134f083826144d4565b50606661074482826144d4565b600054610100900460ff1661357a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107c4565b60fb805460ff19169055565b600054610100900460ff166136035760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107c4565b61016161361083826144d4565b5061016261361e82826144d4565b5050600061015f8190556101605550565b6060600061363c8361243b565b600101905060008167ffffffffffffffff81111561365c5761365c6140a4565b6040519080825280601f01601f191660200182016040528015613686576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084156117dd57613690565b6001600160a01b0382166137235760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107c4565b6000818152606760205260409020546001600160a01b0316156137885760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107c4565b613796600083836001612f80565b6000818152606760205260409020546001600160a01b0316156137fb5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107c4565b6001600160a01b038216600081815260686020908152604080832080546001019055848352606790915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46106f7600083836001612f94565b60018111156138ff5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e736563757469766520747260448201527f616e7366657273206e6f7420737570706f72746564000000000000000000000060648201526084016107c4565b816001600160a01b03851661395b5761395681609980546000838152609a60205260408120829055600182018355919091527f72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94979d000155565b61397e565b836001600160a01b0316856001600160a01b03161461397e5761397e85826139e2565b6001600160a01b03841661399a5761399581613a7f565b6139bd565b846001600160a01b0316846001600160a01b0316146139bd576139bd8482613b2e565b5050505050565b6139cf848483613b72565b610ed3565b600080613292858585613beb565b600060016139ef84610b73565b6139f991906143f9565b600083815260986020526040902054909150808214613a4c576001600160a01b03841660009081526097602090815260408083208584528252808320548484528184208190558352609890915290208190555b5060009182526098602090815260408084208490556001600160a01b039094168352609781528383209183525290812055565b609954600090613a91906001906143f9565b6000838152609a602052604081205460998054939450909284908110613ab957613ab9614325565b906000526020600020015490508060998381548110613ada57613ada614325565b6000918252602080832090910192909255828152609a90915260408082208490558582528120556099805480613b1257613b126146e9565b6001900381819060005260206000200160009055905550505050565b6000613b3983610b73565b6001600160a01b039093166000908152609760209081526040808320868452825280832085905593825260989052919091209190915550565b6001600160a01b038316613b9557613b9261019561329f612589846131c2565b50505b6001600160a01b038216613bb857613bb56101956131b6612589846131c2565b50505b6001600160a01b038381166000908152610193602052604080822054858416835291205461074492918216911683612528565b825460009081908015613d73576000613c098761162b6001856143f9565b60408051808201909152905463ffffffff8082168084526401000000009092047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660208401529192509087161015613ca05760405162461bcd60e51b815260206004820152601b60248201527f436865636b706f696e743a2064656372656173696e67206b657973000000000060448201526064016107c4565b805163ffffffff808816911603613cfe5784613cc18861162b6001866143f9565b80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092166401000000000263ffffffff909216919091179055613d63565b6040805180820190915263ffffffff80881682527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff80881660208085019182528b54600181018d5560008d81529190912094519151909216640100000000029216919091179101555b6020015192508391506132979050565b50506040805180820190915263ffffffff80851682527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff80851660208085019182528854600181018a5560008a815291822095519251909316640100000000029190931617920191909155905081613297565b508054613dee906142d8565b6000825580601f10613dfe575050565b601f01602090049060005260206000209081019061092191905b808211156115a55760008155600101613e18565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461092157600080fd5b600060208284031215613e6c57600080fd5b81356119ff81613e2c565b60005b83811015613e92578181015183820152602001613e7a565b83811115610ed35750506000910152565b60008151808452613ebb816020860160208601613e77565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006119ff6020830184613ea3565b600060208284031215613f1257600080fd5b5035919050565b80356001600160a01b0381168114613f3057600080fd5b919050565b60008060408385031215613f4857600080fd5b613f5183613f19565b946020939093013593505050565b600080600060608486031215613f7457600080fd5b613f7d84613f19565b9250613f8b60208501613f19565b9150604084013590509250925092565b600060208284031215613fad57600080fd5b6119ff82613f19565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152613ff260e084018a613ea3565b8381036040850152614004818a613ea3565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b818110156140565783518352928401929184019160010161403a565b50909c9b505050505050505050505050565b6000806040838503121561407b57600080fd5b61408483613f19565b91506020830135801515811461409957600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff808411156140ee576140ee6140a4565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715614134576141346140a4565b8160405280935085815286868601111561414d57600080fd5b858560208301376000602087830101525050509392505050565b6000806000806080858703121561417d57600080fd5b61418685613f19565b935061419460208601613f19565b925060408501359150606085013567ffffffffffffffff8111156141b757600080fd5b8501601f810187136141c857600080fd5b6141d7878235602084016140d3565b91505092959194509250565b60008060008060008060c087890312156141fc57600080fd5b61420587613f19565b95506020870135945060408701359350606087013560ff8116811461422957600080fd5b9598949750929560808101359460a0909101359350915050565b6000806040838503121561425657600080fd5b61425f83613f19565b9150602083013567ffffffffffffffff81111561427b57600080fd5b8301601f8101851361428c57600080fd5b61429b858235602084016140d3565b9150509250929050565b600080604083850312156142b857600080fd5b6142c183613f19565b91506142cf60208401613f19565b90509250929050565b600181811c908216806142ec57607f821691505b602082108103611b2e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008451614366818460208901613e77565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516143a2816001850160208a01613e77565b600192019182015283516143bd816002840160208801613e77565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561440b5761440b6143ca565b500390565b60008219821115614423576144236143ca565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008351614469818460208801613e77565b83519083019061447d818360208801613e77565b01949350505050565b601f82111561074457600081815260208120601f850160051c810160208610156144ad5750805b601f850160051c820191505b818110156144cc578281556001016144b9565b505050505050565b815167ffffffffffffffff8111156144ee576144ee6140a4565b614502816144fc84546142d8565b84614486565b602080601f831160018114614537576000841561451f5750858301515b600019600386901b1c1916600185901b1785556144cc565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561458457888601518255948401946001909101908401614565565b50858210156145a25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600082614617577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83811690831681811015614651576146516143ca565b039392505050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff80831681851680830382111561447d5761447d6143ca565b60006001600160a01b038087168352808616602084015250836040830152608060608301526146c26080830184613ea3565b9695505050505050565b6000602082840312156146de57600080fd5b81516119ff81613e2c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c634300080f000a", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "ff" + }, + "key": "0x4e64a3fa2e772a9bdbceaca76b8ed475afcab9e7be1b46f004a5be4ed3f6db95" + } + } +} diff --git a/kroma-chain-ops/genesis/testdata/deploy.json b/kroma-chain-ops/genesis/testdata/deploy.json new file mode 100644 index 000000000..de0858e96 --- /dev/null +++ b/kroma-chain-ops/genesis/testdata/deploy.json @@ -0,0 +1,33 @@ +{ + "Colosseum": "0xc3e53F4d16Ae77Db1c982e75a937B9f60FE63690", + "ColosseumProxy": "0x610178dA211FEF7D417bC0e6FeD39F05609AD788", + "KromaMintableERC20Factory": "0x322813Fd9A801c5507c9de605d63CEA4f2CE6c44", + "KromaMintableERC20FactoryProxy": "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6", + "KromaPortal": "0x9E545E3C0baAB3E08CdfD552C960A1050f373042", + "KromaPortalProxy": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0", + "L1CrossDomainMessenger": "0x9A9f2CCfdE556A7E9Ff0848998Aa4a0CFD8863AE", + "L1CrossDomainMessengerProxy": "0x5FC8d32690cc91D4c39d9d3abcBD16989F875707", + "L1ERC721Bridge": "0x59b670e9fA9D0A427751Af201D676719a970857b", + "L1ERC721BridgeProxy": "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853", + "L1StandardBridge": "0x3Aa5ebB10DC797CAC828524e59A333d0A371443c", + "L1StandardBridgeProxy": "0x0165878A594ca255338adfa4d48449f69242Eb8F", + "L2OutputOracle": "0x09635F643e140090A9A8Dcd712eD6285858ceBef", + "L2OutputOracleProxy": "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9", + "Poseidon2": "0x0B306BF915C4d645ff596e518fAf3F9669b97016", + "ProxyAdmin": "0x5FbDB2315678afecb367f032d93F642f64180aa3", + "SecurityCouncil": "0x5eb3Bc0a489C5A8288765d2336659EbCA68FCd00", + "SecurityCouncilProxy": "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e", + "SecurityCouncilToken": "0xf5059a5D33d5853360D16C683c16e67980206f36", + "SecurityCouncilTokenProxy": "0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0", + "SystemConfig": "0x1613beB3B2C4f22Ee086B2b38C1476A3cE7f78E8", + "SystemConfigProxy": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", + "TimeLock": "0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf", + "TimeLockProxy": "0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82", + "UpgradeGovernor": "0x8f86403A4DE0BB5791fa46B8e795C547942fE4Cf", + "UpgradeGovernorProxy": "0x9A676e781A523b5d0C0e43731313A708CB607508", + "ValidatorPool": "0x4A679253410272dd5232B3Ff7cF5dbB88f295319", + "ValidatorPoolProxy": "0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9", + "ZKMerkleTrie": "0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1", + "ZKVerifier": "0x67d269191c92Caf3cD7723F116c85e6E9bf55933", + "ZKVerifierProxy": "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318" +} diff --git a/kroma-chain-ops/genesis/testdata/l1-deployments.json b/kroma-chain-ops/genesis/testdata/l1-deployments.json new file mode 100644 index 000000000..de0858e96 --- /dev/null +++ b/kroma-chain-ops/genesis/testdata/l1-deployments.json @@ -0,0 +1,33 @@ +{ + "Colosseum": "0xc3e53F4d16Ae77Db1c982e75a937B9f60FE63690", + "ColosseumProxy": "0x610178dA211FEF7D417bC0e6FeD39F05609AD788", + "KromaMintableERC20Factory": "0x322813Fd9A801c5507c9de605d63CEA4f2CE6c44", + "KromaMintableERC20FactoryProxy": "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6", + "KromaPortal": "0x9E545E3C0baAB3E08CdfD552C960A1050f373042", + "KromaPortalProxy": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0", + "L1CrossDomainMessenger": "0x9A9f2CCfdE556A7E9Ff0848998Aa4a0CFD8863AE", + "L1CrossDomainMessengerProxy": "0x5FC8d32690cc91D4c39d9d3abcBD16989F875707", + "L1ERC721Bridge": "0x59b670e9fA9D0A427751Af201D676719a970857b", + "L1ERC721BridgeProxy": "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853", + "L1StandardBridge": "0x3Aa5ebB10DC797CAC828524e59A333d0A371443c", + "L1StandardBridgeProxy": "0x0165878A594ca255338adfa4d48449f69242Eb8F", + "L2OutputOracle": "0x09635F643e140090A9A8Dcd712eD6285858ceBef", + "L2OutputOracleProxy": "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9", + "Poseidon2": "0x0B306BF915C4d645ff596e518fAf3F9669b97016", + "ProxyAdmin": "0x5FbDB2315678afecb367f032d93F642f64180aa3", + "SecurityCouncil": "0x5eb3Bc0a489C5A8288765d2336659EbCA68FCd00", + "SecurityCouncilProxy": "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e", + "SecurityCouncilToken": "0xf5059a5D33d5853360D16C683c16e67980206f36", + "SecurityCouncilTokenProxy": "0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0", + "SystemConfig": "0x1613beB3B2C4f22Ee086B2b38C1476A3cE7f78E8", + "SystemConfigProxy": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", + "TimeLock": "0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf", + "TimeLockProxy": "0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82", + "UpgradeGovernor": "0x8f86403A4DE0BB5791fa46B8e795C547942fE4Cf", + "UpgradeGovernorProxy": "0x9A676e781A523b5d0C0e43731313A708CB607508", + "ValidatorPool": "0x4A679253410272dd5232B3Ff7cF5dbB88f295319", + "ValidatorPoolProxy": "0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9", + "ZKMerkleTrie": "0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1", + "ZKVerifier": "0x67d269191c92Caf3cD7723F116c85e6E9bf55933", + "ZKVerifierProxy": "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318" +} diff --git a/op-chain-ops/genesis/testdata/test-deploy-config-devnet-l1.json b/kroma-chain-ops/genesis/testdata/test-deploy-config-devnet-l1.json similarity index 69% rename from op-chain-ops/genesis/testdata/test-deploy-config-devnet-l1.json rename to kroma-chain-ops/genesis/testdata/test-deploy-config-devnet-l1.json index cb230d852..59bb70ade 100644 --- a/op-chain-ops/genesis/testdata/test-deploy-config-devnet-l1.json +++ b/kroma-chain-ops/genesis/testdata/test-deploy-config-devnet-l1.json @@ -11,36 +11,43 @@ "batchInboxAddress": "0xff00000000000000000000000000000000000000", "batchSenderAddress": "0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC", - "validatorPoolTrustedValidator": "0x70997970C51812dc3A010C7d01b50e0d17dc79C8", - "validatorPoolRequiredBondAmount": "0x1", - "validatorPoolMaxUnbond": 10, - "validatorPoolRoundDuration": 20, - - "l2OutputOracleSubmissionInterval": 20, + "l2OutputOracleSubmissionInterval": 16, "l2OutputOracleStartingTimestamp": -1, "l1BlockTime": 15, - "cliqueSignerAddress": "0xca062b0fd91172d89bcd4bb084ac4e21972cc467", + "cliqueSignerAddress": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + + "l1FeeVaultRecipient": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "protocolVaultRecipient": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "protocolVaultRecipient": "0xBcd4042DE499D14e55001CcbB24a551F3b954096", - "l1FeeVaultRecipient": "0x71bE63f3384f5fb98995898A86B02Fb2426c5788", "l1ERC721BridgeProxy": "0xff000000000000000000000000000000000000ff", "l1StandardBridgeProxy": "0xff000000000000000000000000000000000000fd", "l1CrossDomainMessengerProxy": "0xff000000000000000000000000000000000000dd", "deploymentWaitConfirmations": 1, "fundDevAccounts": true, + + "enableGovernance": true, + "governanceTokenSymbol": "KRO", + "governanceTokenName": "Kroma", + "governanceTokenOwner": "0x0000000000000000000000000000000000000333", + + "validatorRewardScalar": 5000, + "validatorPoolTrustedValidator": "0x70997970C51812dc3A010C7d01b50e0d17dc79C8", + "validatorPoolRequiredBondAmount": "0x1", + "validatorPoolMaxUnbond": 10, + "validatorPoolRoundDuration": 20, + "securityCouncilOwners": [ + "0x70997970C51812dc3A010C7d01b50e0d17dc79C8", + "0x71bE63f3384f5fb98995898A86B02Fb2426c5788", + "0xFABB0ac9d68B0B445fB7357272Ff202C5651694a" + ], "colosseumCreationPeriodSeconds": 500, "colosseumBisectionTimeout": 120, "colosseumProvingTimeout": 480, "colosseumDummyHash": "0xa1235b834d6f1f78f78bc4db856fbc49302cce2c519921347600693021e087f7", "colosseumMaxTxs": 100, - "colosseumSegmentsLengths": "3,11", - "securityCouncilOwners": [ - "0x007D7e4391DCFdE47Dd7FD0B8E16091C5e0E1C7f", - "0x2A06Af6a4F325B1e0095a8AbD32888e0AbdCD04D", - "0xed92E7C40348A552822847384D722A6adB9AFeFA" - ], + "colosseumSegmentsLengths": "3,3,3,3", "zkVerifierHashScalar": "0x1545b1bf82c58ee35648bd877da9c5010193e82b036b16bf382acf31bc2ab576", "zkVerifierM56Px": "0x15ae1a8e3b993dd9aadc8f9086d1ea239d4cd5c09cfa445f337e1b60d7b3eb87", "zkVerifierM56Py": "0x2c702ede24f9db8c8c9a439975facd3872a888c5f84f58b3b5f5a5623bac945a" diff --git a/op-chain-ops/genesis/testdata/test-deploy-config-full.json b/kroma-chain-ops/genesis/testdata/test-deploy-config-full.json similarity index 72% rename from op-chain-ops/genesis/testdata/test-deploy-config-full.json rename to kroma-chain-ops/genesis/testdata/test-deploy-config-full.json index f6624f9e8..a8e3e268f 100644 --- a/op-chain-ops/genesis/testdata/test-deploy-config-full.json +++ b/kroma-chain-ops/genesis/testdata/test-deploy-config-full.json @@ -1,27 +1,23 @@ { "l1StartingBlockTag": "earliest", - "l1ChainID": 900, - "l2ChainID": 901, + "l1ChainID": 901, + "l2ChainID": 902, "l2BlockTime": 2, "maxSequencerDrift": 20, "sequencerWindowSize": 100, "channelTimeout": 30, - "p2pSequencerAddress": "0x0000000000000000000000000000000000000000", + "l1UseClique": false, + "cliqueSignerAddress": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "p2pSequencerAddress": "0x9965507d1a55bcc2695c58ba16fb37d819b0a4dc", "batchInboxAddress": "0x42000000000000000000000000000000000000ff", - "batchSenderAddress": "0x0000000000000000000000000000000000000000", - "validatorPoolTrustedValidator": "0x7770000000000000000000000000000000000001", - "validatorPoolRequiredBondAmount": "0x1", - "validatorPoolMaxUnbond": 10, - "validatorPoolRoundDuration": 6, - "l2OutputOracleSubmissionInterval": 6, + "batchSenderAddress": "0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc", + "l2OutputOracleSubmissionInterval": 16, "l2OutputOracleStartingTimestamp": -1, "l1BlockTime": 15, "l1GenesisBlockNonce": "0x0", - "l1UseClique": false, - "cliqueSignerAddress": "0x0000000000000000000000000000000000000000", "l1GenesisBlockGasLimit": "0x1c9c380", "l1GenesisBlockDifficulty": "0x1", - "finalizationPeriodSeconds": 600, + "finalizationPeriodSeconds": 2, "l1GenesisBlockMixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "l1GenesisBlockCoinbase": "0x0000000000000000000000000000000000000000", "l1GenesisBlockNumber": "0x0", @@ -37,32 +33,36 @@ "l2GenesisBlockGasUsed": "0x0", "l2GenesisBlockParentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "l2GenesisBlockBaseFeePerGas": "0x3b9aca00", - "protocolVaultRecipient": "0x42000000000000000000000000000000000000f5", - "l1FeeVaultRecipient": "0x42000000000000000000000000000000000000f6", + "l2GenesisBlockExtraData": "bm9uLWRlZmF1bHQgdmFsdWU=", + "protocolVaultRecipient": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "l1FeeVaultRecipient": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", "l1StandardBridgeProxy": "0x42000000000000000000000000000000000000f8", "l1CrossDomainMessengerProxy": "0x42000000000000000000000000000000000000f9", "l1ERC721BridgeProxy": "0x4200000000000000000000000000000000000060", "systemConfigProxy": "0x4200000000000000000000000000000000000061", "kromaPortalProxy": "0x4200000000000000000000000000000000000062", "validatorPoolProxy": "0x4200000000000000000000000000000000000063", - "proxyAdminOwner": "0x0000000000000000000000000000000000000222", + "proxyAdminOwner": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", "gasPriceOracleOverhead": 2100, "gasPriceOracleScalar": 1000000, - "validatorRewardScalar": 5000, + "enableGovernance": true, + "governanceTokenSymbol": "KRO", + "governanceTokenName": "Kroma", + "governanceTokenOwner": "0x0000000000000000000000000000000000000333", "deploymentWaitConfirmations": 1, "eip1559Denominator": 8, "eip1559Elasticity": 2, "fundDevAccounts": true, - "colosseumCreationPeriodSeconds": 500, - "colosseumBisectionTimeout": 120, - "colosseumProvingTimeout": 480, - "colosseumDummyHash": "0xa1235b834d6f1f78f78bc4db856fbc49302cce2c519921347600693021e087f7", - "colosseumMaxTxs": 100, - "colosseumSegmentsLengths": "3,4", + + "validatorRewardScalar": 5000, + "validatorPoolTrustedValidator": "0x70997970c51812dc3a010c7d01b50e0d17dc79c8", + "validatorPoolRequiredBondAmount": "0x1", + "validatorPoolMaxUnbond": 10, + "validatorPoolRoundDuration": 10, "securityCouncilOwners": [ - "0x007d7e4391dcfde47dd7fd0b8e16091c5e0e1c7f", - "0x2a06af6a4f325b1e0095a8abd32888e0abdcd04d", - "0xed92e7c40348a552822847384d722a6adb9afefa" + "0x70997970c51812dc3a010c7d01b50e0d17dc79c8", + "0x71be63f3384f5fb98995898a86b02fb2426c5788", + "0xfabb0ac9d68b0b445fb7357272ff202c5651694a" ], "governorVotingDelayBlocks": 0, "governorVotingPeriodBlocks": 25, @@ -71,7 +71,15 @@ "timeLockMinDelaySeconds": 1, "l2GovernorVotingPeriodBlocks": 150, "l2TimeLockMinDelaySeconds": 1, + "colosseumCreationPeriodSeconds": 500, + "colosseumBisectionTimeout": 120, + "colosseumProvingTimeout": 480, + "colosseumDummyHash": "0xa1235b834d6f1f78f78bc4db856fbc49302cce2c519921347600693021e087f7", + "colosseumMaxTxs": 100, + "colosseumSegmentsLengths": "3,3,3,3", "zkVerifierHashScalar": "0x1545b1bf82c58ee35648bd877da9c5010193e82b036b16bf382acf31bc2ab576", "zkVerifierM56Px": "0x15ae1a8e3b993dd9aadc8f9086d1ea239d4cd5c09cfa445f337e1b60d7b3eb87", "zkVerifierM56Py": "0x2c702ede24f9db8c8c9a439975facd3872a888c5f84f58b3b5f5a5623bac945a" } + + diff --git a/op-chain-ops/immutables/immutables.go b/kroma-chain-ops/immutables/immutables.go similarity index 93% rename from op-chain-ops/immutables/immutables.go rename to kroma-chain-ops/immutables/immutables.go index 9c2db1b01..c091410ce 100644 --- a/op-chain-ops/immutables/immutables.go +++ b/kroma-chain-ops/immutables/immutables.go @@ -12,9 +12,10 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" - "github.com/ethereum-optimism/optimism/op-bindings/predeploys" "github.com/ethereum-optimism/optimism/op-chain-ops/deployer" + + "github.com/kroma-network/kroma/kroma-bindings/bindings" + "github.com/kroma-network/kroma/kroma-bindings/predeploys" ) // ImmutableValues represents the values to be set in immutable code. @@ -63,9 +64,9 @@ func (i ImmutableConfig) Check() error { // contracts so that the immutables can be set properly in the bytecode. type DeploymentResults map[string]hexutil.Bytes -// BuildOptimism will deploy the L2 predeploys so that their immutables are set +// BuildKroma will deploy the L2 predeploys so that their immutables are set // correctly. -func BuildOptimism(immutable ImmutableConfig, zktrie bool) (DeploymentResults, error) { +func BuildKroma(immutable ImmutableConfig) (DeploymentResults, error) { if err := immutable.Check(); err != nil { return DeploymentResults{}, err } @@ -129,15 +130,15 @@ func BuildOptimism(immutable ImmutableConfig, zktrie bool) (DeploymentResults, e }, }, } - return BuildL2(deployments, zktrie) + return BuildL2(deployments) } // BuildL2 will deploy contracts to a simulated backend so that their immutables // can be properly set. The bytecode returned in the results is suitable to be // inserted into the state via state surgery. -func BuildL2(constructors []deployer.Constructor, zktrie bool) (DeploymentResults, error) { +func BuildL2(constructors []deployer.Constructor) (DeploymentResults, error) { log.Info("Creating L2 state") - deployments, err := deployer.Deploy(deployer.NewBackend(zktrie), constructors, l2Deployer) + deployments, err := deployer.Deploy(deployer.NewL2Backend(), constructors, l2Deployer) if err != nil { return nil, err } diff --git a/op-chain-ops/immutables/immutables_test.go b/kroma-chain-ops/immutables/immutables_test.go similarity index 93% rename from op-chain-ops/immutables/immutables_test.go rename to kroma-chain-ops/immutables/immutables_test.go index ed12b5f20..c6fdf4a51 100644 --- a/op-chain-ops/immutables/immutables_test.go +++ b/kroma-chain-ops/immutables/immutables_test.go @@ -4,13 +4,14 @@ import ( "math/big" "testing" - "github.com/ethereum-optimism/optimism/op-chain-ops/immutables" "github.com/ethereum/go-ethereum/common" "github.com/stretchr/testify/require" + + "github.com/kroma-network/kroma/kroma-chain-ops/immutables" ) func TestBuildKroma(t *testing.T) { - results, err := immutables.BuildOptimism(immutables.ImmutableConfig{ + results, err := immutables.BuildKroma(immutables.ImmutableConfig{ "L2StandardBridge": { "otherBridge": common.HexToAddress("0x1234567890123456789012345678901234567890"), }, @@ -35,7 +36,7 @@ func TestBuildKroma(t *testing.T) { "ProtocolVault": { "recipient": common.HexToAddress("0x1234567890123456789012345678901234567890"), }, - }, false) + }) require.Nil(t, err) require.NotNil(t, results) diff --git a/kroma-chain-ops/state/state.go b/kroma-chain-ops/state/state.go new file mode 100644 index 000000000..e6d280cd1 --- /dev/null +++ b/kroma-chain-ops/state/state.go @@ -0,0 +1,31 @@ +package state + +import ( + "fmt" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/log" + + opstate "github.com/ethereum-optimism/optimism/op-chain-ops/state" + + "github.com/kroma-network/kroma/kroma-bindings/bindings" +) + +// SetStorage will set the storage values in a db given a contract name, +// address and the storage values +func SetStorage(name string, address common.Address, values opstate.StorageValues, db vm.StateDB) error { + layout, err := bindings.GetStorageLayout(name) + if err != nil { + return fmt.Errorf("cannot set storage: %w", err) + } + slots, err := opstate.ComputeStorageSlots(layout, values) + if err != nil { + return fmt.Errorf("%s: %w", name, err) + } + for _, slot := range slots { + db.SetState(address, slot.Key, slot.Value) + log.Trace("setting storage", "address", address.Hex(), "key", slot.Key.Hex(), "value", slot.Value.Hex()) + } + return nil +} diff --git a/kroma-devnet/README.md b/kroma-devnet/README.md new file mode 100644 index 000000000..a63713b30 --- /dev/null +++ b/kroma-devnet/README.md @@ -0,0 +1,5 @@ +# bedrock-devnet + +This is a utility for running a local Bedrock devnet. It is designed to replace the legacy Bash-based devnet runner as part of a progressive migration away from Bash automation. + +The easiest way to invoke this script is to run `make devnet-up-deploy` from the root of this repository. Otherwise, to use this script run `python3 main.py --monorepo-dir=`. You may need to set `PYTHONPATH` to this directory if you are invoking the script from somewhere other than `bedrock-devnet`. diff --git a/kroma-devnet/devnet/__init__.py b/kroma-devnet/devnet/__init__.py new file mode 100644 index 000000000..d28bbbe1e --- /dev/null +++ b/kroma-devnet/devnet/__init__.py @@ -0,0 +1,357 @@ +import argparse +import logging +import os +import subprocess +import json +import socket +import calendar +import datetime +import time +import shutil +import http.client +from multiprocessing import Process, Queue + +import devnet.log_setup + +pjoin = os.path.join + +parser = argparse.ArgumentParser(description='Bedrock devnet launcher') +parser.add_argument('--monorepo-dir', help='Directory of the monorepo', default=os.getcwd()) +parser.add_argument('--allocs', help='Only create the allocs and exit', type=bool, action=argparse.BooleanOptionalAction) +parser.add_argument('--test', help='Tests the deployment, must already be deployed', type=bool, action=argparse.BooleanOptionalAction) + +log = logging.getLogger() + +class Bunch: + def __init__(self, **kwds): + self.__dict__.update(kwds) + +class ChildProcess: + def __init__(self, func, *args): + self.errq = Queue() + self.process = Process(target=self._func, args=(func, args)) + + def _func(self, func, args): + try: + func(*args) + except Exception as e: + self.errq.put(str(e)) + + def start(self): + self.process.start() + + def join(self): + self.process.join() + + def get_error(self): + return self.errq.get() if not self.errq.empty() else None + + +def main(): + args = parser.parse_args() + + monorepo_dir = os.path.abspath(args.monorepo_dir) + devnet_dir = pjoin(monorepo_dir, '.devnet') + contracts_bedrock_dir = pjoin(monorepo_dir, 'packages', 'contracts') + deployment_dir = pjoin(contracts_bedrock_dir, 'deployments', 'devnetL1') + op_node_dir = pjoin(args.monorepo_dir, 'op-node') + ops_bedrock_dir = pjoin(monorepo_dir, 'ops-devnet') + deploy_config_dir = pjoin(contracts_bedrock_dir, 'deploy-config') + devnet_config_path = pjoin(deploy_config_dir, 'devnetL1.json') + devnet_config_template_path = pjoin(deploy_config_dir, 'devnetL1-template.json') + ops_chain_ops = pjoin(monorepo_dir, 'kroma-chain-ops') + sdk_dir = pjoin(monorepo_dir, 'packages', 'sdk') + + paths = Bunch( + mono_repo_dir=monorepo_dir, + devnet_dir=devnet_dir, + contracts_bedrock_dir=contracts_bedrock_dir, + deployment_dir=deployment_dir, + l1_deployments_path=pjoin(deployment_dir, '.deploy'), + deploy_config_dir=deploy_config_dir, + devnet_config_path=devnet_config_path, + devnet_config_template_path=devnet_config_template_path, + op_node_dir=op_node_dir, + ops_bedrock_dir=ops_bedrock_dir, + ops_chain_ops=ops_chain_ops, + sdk_dir=sdk_dir, + genesis_l1_path=pjoin(devnet_dir, 'genesis-l1.json'), + genesis_l2_path=pjoin(devnet_dir, 'genesis-l2.json'), + allocs_path=pjoin(devnet_dir, 'allocs-l1.json'), + addresses_json_path=pjoin(devnet_dir, 'addresses.json'), + sdk_addresses_json_path=pjoin(devnet_dir, 'sdk-addresses.json'), + rollup_config_path=pjoin(devnet_dir, 'rollup.json') + ) + + if args.test: + log.info('Testing deployed devnet') + devnet_test(paths) + return + + os.makedirs(devnet_dir, exist_ok=True) + + if args.allocs: + devnet_l1_genesis(paths) + return + + log.info('Building docker images') + run_command(['docker', 'compose', 'build', '--progress', 'plain'], cwd=paths.ops_bedrock_dir, env={ + 'PWD': paths.ops_bedrock_dir + }) + + log.info('Devnet starting') + devnet_deploy(paths) + + +def deploy_contracts(paths): + wait_up(8545) + wait_for_rpc_server('127.0.0.1:8545') + res = eth_accounts('127.0.0.1:8545') + + response = json.loads(res) + account = response['result'][0] + log.info(f'Deploying with {account}') + + # send some ether to the create2 deployer account + run_command([ + 'cast', 'send', '--from', account, + '--rpc-url', 'http://127.0.0.1:8545', + '--unlocked', '--value', '1ether', '0x3fAB184622Dc19b6109349B94811493BF2a45362' + ], env={}, cwd=paths.contracts_bedrock_dir) + + # deploy the create2 deployer + run_command([ + 'cast', 'publish', '--rpc-url', 'http://127.0.0.1:8545', + '0xf8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222' + ], env={}, cwd=paths.contracts_bedrock_dir) + + # [Kroma: START] + # send some ether to the l1 contract deployer account + run_command([ + 'cast', 'send', '--from', account, + '--rpc-url', 'http://127.0.0.1:8545', + '--unlocked', '--value', '1ether', '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266' + ], env={}, cwd=paths.contracts_bedrock_dir) + + run_command([ + 'npx', 'hardhat', 'deploy', '--network', 'devnetL1' + ], env={}, cwd=paths.contracts_bedrock_dir) + + run_command([ + 'npx', 'hardhat', 'export-addresses', '--network', 'devnetL1' + ], env={}, cwd=paths.contracts_bedrock_dir) + # [Kroma: END] + + shutil.copy(paths.l1_deployments_path, paths.addresses_json_path) + + +def init_devnet_l1_deploy_config(paths, update_timestamp=False): + # [Kroma: START] + run_command([ + 'rm', '-rf', 'deploy-config/devnetL1.json', 'deployments/devnetL1' + ], env={}, cwd=paths.contracts_bedrock_dir) + # [Kroma: END] + + deploy_config = read_json(paths.devnet_config_template_path) + if update_timestamp: + deploy_config['l1GenesisBlockTimestamp'] = '{:#x}'.format(int(time.time())) + write_json(paths.devnet_config_path, deploy_config) + + +def devnet_l1_genesis(paths): + log.info('Generating L1 genesis state') + init_devnet_l1_deploy_config(paths) + + geth = subprocess.Popen([ + 'geth', '--dev', '--http', '--http.api', 'eth,debug,web3', + '--verbosity', '4', '--gcmode', 'archive', '--dev.gaslimit', '30000000', + '--rpc.allow-unprotected-txs' + ]) + + try: + forge = ChildProcess(deploy_contracts, paths) + forge.start() + forge.join() + err = forge.get_error() + if err: + raise Exception(f"Exception occurred in child process: {err}") + + res = debug_dumpBlock('127.0.0.1:8545') + response = json.loads(res) + allocs = response['result'] + + write_json(paths.allocs_path, allocs) + finally: + geth.terminate() + + +# Bring up the devnet where the contracts are deployed to L1 +def devnet_deploy(paths): + if os.path.exists(paths.genesis_l1_path): + log.info('L1 genesis already generated.') + else: + log.info('Generating L1 genesis.') + if os.path.exists(paths.allocs_path) == False: + devnet_l1_genesis(paths) + + # It's odd that we want to regenerate the devnetL1.json file with + # an updated timestamp different than the one used in the devnet_l1_genesis + # function. But, without it, CI flakes on this test rather consistently. + # If someone reads this comment and understands why this is being done, please + # update this comment to explain. + init_devnet_l1_deploy_config(paths, update_timestamp=True) + outfile_l1 = pjoin(paths.devnet_dir, 'genesis-l1.json') + run_command([ + 'go', 'run', 'cmd/main.go', 'genesis', 'l1', + '--deploy-config', paths.devnet_config_path, + '--l1-allocs', paths.allocs_path, + '--l1-deployments', paths.addresses_json_path, + '--outfile.l1', outfile_l1, + ], cwd=paths.op_node_dir) + + log.info('Starting L1.') + run_command(['docker', 'compose', 'up', '-d', 'l1'], cwd=paths.ops_bedrock_dir, env={ + 'PWD': paths.ops_bedrock_dir + }) + wait_up(8545) + wait_for_rpc_server('127.0.0.1:8545') + + if os.path.exists(paths.genesis_l2_path): + log.info('L2 genesis and rollup configs already generated.') + else: + log.info('Generating L2 genesis and rollup configs.') + run_command([ + 'go', 'run', 'cmd/main.go', 'genesis', 'l2', + '--l1-rpc', 'http://localhost:8545', + '--deploy-config', paths.devnet_config_path, + '--deployment-dir', paths.deployment_dir, + '--outfile.l2', pjoin(paths.devnet_dir, 'genesis-l2.json'), + '--outfile.rollup', pjoin(paths.devnet_dir, 'rollup.json') + ], cwd=paths.op_node_dir) + + rollup_config = read_json(paths.rollup_config_path) + addresses = read_json(paths.addresses_json_path) + + log.info('Bringing up L2.') + run_command(['docker', 'compose', 'up', '-d', 'l2'], cwd=paths.ops_bedrock_dir, env={ + 'PWD': paths.ops_bedrock_dir + }) + wait_up(9545) + wait_for_rpc_server('127.0.0.1:9545') + + l2_output_oracle = addresses['L2OutputOracleProxy'] + log.info(f'Using L2OutputOracle {l2_output_oracle}') + batch_inbox_address = rollup_config['batch_inbox_address'] + log.info(f'Using batch inbox {batch_inbox_address}') + + log.info('Bringing up everything else.') + run_command(['docker', 'compose', 'up', '-d', 'op-node', 'op-proposer', 'op-batcher'], cwd=paths.ops_bedrock_dir, env={ + 'PWD': paths.ops_bedrock_dir, + 'L2OO_ADDRESS': l2_output_oracle, + 'SEQUENCER_BATCH_INBOX_ADDRESS': batch_inbox_address + }) + + log.info('Devnet ready.') + + +def eth_accounts(url): + log.info(f'Fetch eth_accounts {url}') + conn = http.client.HTTPConnection(url) + headers = {'Content-type': 'application/json'} + body = '{"id":2, "jsonrpc":"2.0", "method": "eth_accounts", "params":[]}' + conn.request('POST', '/', body, headers) + response = conn.getresponse() + data = response.read().decode() + conn.close() + return data + + +def debug_dumpBlock(url): + log.info(f'Fetch debug_dumpBlock {url}') + conn = http.client.HTTPConnection(url) + headers = {'Content-type': 'application/json'} + body = '{"id":3, "jsonrpc":"2.0", "method": "debug_dumpBlock", "params":["latest"]}' + conn.request('POST', '/', body, headers) + response = conn.getresponse() + data = response.read().decode() + conn.close() + return data + + +def wait_for_rpc_server(url): + log.info(f'Waiting for RPC server at {url}') + + conn = http.client.HTTPConnection(url) + headers = {'Content-type': 'application/json'} + body = '{"id":1, "jsonrpc":"2.0", "method": "eth_chainId", "params":[]}' + + while True: + try: + conn.request('POST', '/', body, headers) + response = conn.getresponse() + conn.close() + if response.status < 300: + log.info(f'RPC server at {url} ready') + return + except Exception as e: + log.info(f'Waiting for RPC server at {url}') + time.sleep(1) + +def devnet_test(paths): + # Check the L2 config + run_command( + ['go', 'run', 'cmd/check-l2/main.go', '--l2-rpc-url', 'http://localhost:9545', '--l1-rpc-url', 'http://localhost:8545'], + cwd=paths.ops_chain_ops, + ) + + run_command( + ['npx', 'hardhat', 'deposit-erc20', '--network', 'devnetL1', '--l1-contracts-json-path', paths.addresses_json_path], + cwd=paths.sdk_dir, + timeout=8*60, + ) + + run_command( + ['npx', 'hardhat', 'deposit-eth', '--network', 'devnetL1', '--l1-contracts-json-path', paths.addresses_json_path], + cwd=paths.sdk_dir, + timeout=8*60, + ) + +def run_command(args, check=True, shell=False, cwd=None, env=None, timeout=None): + env = env if env else {} + + return subprocess.run( + args, + check=check, + shell=shell, + env={ + **os.environ, + **env + }, + cwd=cwd, + timeout=timeout + ) + + +def wait_up(port, retries=10, wait_secs=1): + for i in range(0, retries): + log.info(f'Trying 127.0.0.1:{port}') + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + try: + s.connect(('127.0.0.1', int(port))) + s.shutdown(2) + log.info(f'Connected 127.0.0.1:{port}') + return True + except Exception: + time.sleep(wait_secs) + + raise Exception(f'Timed out waiting for port {port}.') + + +def write_json(path, data): + with open(path, 'w+') as f: + json.dump(data, f, indent=' ') + + +def read_json(path): + with open(path, 'r') as f: + return json.load(f) diff --git a/kroma-devnet/devnet/log_setup.py b/kroma-devnet/devnet/log_setup.py new file mode 100644 index 000000000..2a1083f01 --- /dev/null +++ b/kroma-devnet/devnet/log_setup.py @@ -0,0 +1,30 @@ +import os + +from logging.config import dictConfig + +log_level = os.getenv('LOG_LEVEL') + +log_config = { + 'version': 1, + 'loggers': { + '': { + 'handlers': ['console'], + 'level': log_level if log_level is not None else 'INFO' + }, + }, + 'handlers': { + 'console': { + 'formatter': 'stderr', + 'class': 'logging.StreamHandler', + 'stream': 'ext://sys.stdout' + } + }, + 'formatters': { + 'stderr': { + 'format': '[%(levelname)s|%(asctime)s] %(message)s', + 'datefmt': '%m-%d-%Y %I:%M:%S' + } + }, +} + +dictConfig(log_config) diff --git a/kroma-devnet/main.py b/kroma-devnet/main.py new file mode 100644 index 000000000..13c2d209c --- /dev/null +++ b/kroma-devnet/main.py @@ -0,0 +1,9 @@ +import devnet + + +def main(): + devnet.main() + + +if __name__ == '__main__': + main() diff --git a/kroma-validator/abi_test.go b/kroma-validator/abi_test.go index 5bb26c97e..d4c8e7def 100644 --- a/kroma-validator/abi_test.go +++ b/kroma-validator/abi_test.go @@ -13,8 +13,8 @@ import ( "github.com/ethereum/go-ethereum/params" "github.com/stretchr/testify/require" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" "github.com/ethereum-optimism/optimism/op-service/testutils" + "github.com/kroma-network/kroma/kroma-bindings/bindings" ) // setupL2OutputOracle deploys the L2OutputOracle contract to a simulated backend diff --git a/kroma-validator/challenger.go b/kroma-validator/challenger.go index eb32ad3c9..ab908d689 100644 --- a/kroma-validator/challenger.go +++ b/kroma-validator/challenger.go @@ -19,12 +19,12 @@ import ( "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/log" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" "github.com/ethereum-optimism/optimism/op-service/eth" - "github.com/ethereum-optimism/optimism/op-service/optsutils" "github.com/ethereum-optimism/optimism/op-service/watcher" + "github.com/kroma-network/kroma/kroma-bindings/bindings" chal "github.com/kroma-network/kroma/kroma-validator/challenge" "github.com/kroma-network/kroma/kroma-validator/metrics" + "github.com/kroma-network/kroma/op-service/optsutils" ) var deletedOutputRoot = [32]byte{} diff --git a/kroma-validator/cmd/balance/cmd.go b/kroma-validator/cmd/balance/cmd.go index e1b12e476..906c79352 100644 --- a/kroma-validator/cmd/balance/cmd.go +++ b/kroma-validator/cmd/balance/cmd.go @@ -8,10 +8,10 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/urfave/cli/v2" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" opservice "github.com/ethereum-optimism/optimism/op-service" "github.com/ethereum-optimism/optimism/op-service/txmgr" "github.com/ethereum-optimism/optimism/op-service/txmgr/metrics" + "github.com/kroma-network/kroma/kroma-bindings/bindings" "github.com/kroma-network/kroma/kroma-validator/flags" ) diff --git a/kroma-validator/guardian.go b/kroma-validator/guardian.go index 4e02eb688..e5bc7255a 100644 --- a/kroma-validator/guardian.go +++ b/kroma-validator/guardian.go @@ -17,10 +17,10 @@ import ( "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/log" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/optsutils" "github.com/ethereum-optimism/optimism/op-service/watcher" + "github.com/kroma-network/kroma/kroma-bindings/bindings" ) // Guardian is responsible for validating outputs. diff --git a/kroma-validator/l2_output_submitter.go b/kroma-validator/l2_output_submitter.go index 91c2df178..094c425c0 100644 --- a/kroma-validator/l2_output_submitter.go +++ b/kroma-validator/l2_output_submitter.go @@ -16,11 +16,11 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/optsutils" "github.com/ethereum-optimism/optimism/op-service/txmgr" "github.com/ethereum-optimism/optimism/op-service/watcher" + "github.com/kroma-network/kroma/kroma-bindings/bindings" "github.com/kroma-network/kroma/kroma-validator/metrics" ) diff --git a/kroma-validator/validator.go b/kroma-validator/validator.go index 90d3340da..3cffc8a03 100644 --- a/kroma-validator/validator.go +++ b/kroma-validator/validator.go @@ -9,13 +9,14 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/urfave/cli/v2" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" opservice "github.com/ethereum-optimism/optimism/op-service" oplog "github.com/ethereum-optimism/optimism/op-service/log" "github.com/ethereum-optimism/optimism/op-service/monitoring" "github.com/ethereum-optimism/optimism/op-service/opio" "github.com/ethereum-optimism/optimism/op-service/optsutils" oprpc "github.com/ethereum-optimism/optimism/op-service/rpc" + + "github.com/kroma-network/kroma/kroma-bindings/bindings" "github.com/kroma-network/kroma/kroma-validator/flags" "github.com/kroma-network/kroma/kroma-validator/metrics" ) diff --git a/op-batcher/batcher/channel_builder_test.go b/op-batcher/batcher/channel_builder_test.go index d11237bd4..f196ec6cc 100644 --- a/op-batcher/batcher/channel_builder_test.go +++ b/op-batcher/batcher/channel_builder_test.go @@ -9,14 +9,15 @@ import ( "math/rand" "testing" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/trie" + "github.com/ethereum-optimism/optimism/op-batcher/compressor" "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" dtest "github.com/ethereum-optimism/optimism/op-node/rollup/derive/test" "github.com/ethereum-optimism/optimism/op-service/eth" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/trie" "github.com/stretchr/testify/require" ) @@ -138,7 +139,7 @@ func newMiniL2BlockWithNumberParent(numTx int, number *big.Int, parent common.Ha Difficulty: common.Big0, Number: big.NewInt(100), }, nil, nil, nil, trie.NewStackTrie(nil)) - l1InfoTx, err := derive.L1InfoDeposit(0, eth.BlockToInfo(l1Block), eth.SystemConfig{}) + l1InfoTx, err := derive.L1InfoDeposit(0, eth.BlockToInfo(l1Block), eth.SystemConfig{}, false) if err != nil { panic(err) } @@ -520,7 +521,7 @@ func TestChannelBuilder_OutputFramesMaxFrameIndex(t *testing.T) { Difficulty: common.Big0, Number: common.Big0, }, nil, nil, nil, trie.NewStackTrie(nil)) - l1InfoTx, _ := derive.L1InfoDeposit(0, eth.BlockToInfo(lBlock), eth.SystemConfig{}) + l1InfoTx, _ := derive.L1InfoDeposit(0, eth.BlockToInfo(lBlock), eth.SystemConfig{}, false) txs := []*types.Transaction{types.NewTx(l1InfoTx)} a := types.NewBlock(&types.Header{ Number: big.NewInt(0), diff --git a/op-batcher/flags/flags.go b/op-batcher/flags/flags.go index 13c266e51..208a75373 100644 --- a/op-batcher/flags/flags.go +++ b/op-batcher/flags/flags.go @@ -76,6 +76,8 @@ var ( Usage: "Initialize the batcher in a stopped state. The batcher can be started using the admin_startBatcher RPC", EnvVars: prefixEnvVars("STOPPED"), } + // Legacy Flags + SequencerHDPathFlag = txmgr.SequencerHDPathFlag ) var requiredFlags = []cli.Flag{ @@ -91,6 +93,7 @@ var optionalFlags = []cli.Flag{ MaxChannelDurationFlag, MaxL1TxSizeBytesFlag, StoppedFlag, + SequencerHDPathFlag, } func init() { diff --git a/op-bindings/Makefile b/op-bindings/Makefile index 4912085ab..97b26890b 100644 --- a/op-bindings/Makefile +++ b/op-bindings/Makefile @@ -1,170 +1,43 @@ -SHELL := /bin/bash +SHELL := /usr/bin/env bash pkg := bindings +monorepo-base := $(shell dirname $(realpath .)) +contracts-dir := $(monorepo-base)/packages/contracts-bedrock -all: version mkdir bindings more - -bindings: basefee-vault-bindings \ - colosseum-bindings \ - erc20-bindings \ - gas-price-oracle-bindings \ - kroma-mintable-erc20-bindings \ - kroma-mintable-erc20-factory-bindings \ - kroma-mintable-erc721-factory-bindings \ - kroma-portal-bindings \ - l1-cross-domain-messenger-bindings \ - l1-erc721-bridge-bindings \ - l1-fee-vault-bindings \ - l1-standard-bridge-bindings \ - l1block-bindings \ - l2-cross-domain-messenger-bindings \ - l2-erc721-bridge-bindings \ - l2-output-oracle-bindings \ - l2-standard-bridge-bindings \ - l2-to-l1-message-passer-bindings \ - proxy-admin-bindings \ - proxy-bindings \ - security-council-bindings \ - security-council-token-bindings \ - system-config-bindings \ - timelock-bindings \ - upgrade-governor-bindings \ - validator-pool-bindings \ - validator-reward-vault-bindings \ - weth9-bindings \ - zk-merkle-trie-bindings \ - zk-verifier-bindings +all: version mkdir bindings version: forge --version + abigen --version compile: - cd ../packages/contracts/ && \ - yarn clean && \ - npx hardhat compile + cd $(contracts-dir) && \ + forge clean && \ + pnpm build + +bindings: compile bindings-build -more: +bindings-build: go run ./gen/main.go \ - -artifacts ../packages/contracts/artifacts \ + -forge-artifacts $(contracts-dir)/forge-artifacts \ -out ./bindings \ - -contracts \ - Colosseum,\ -KromaMintableERC20Factory,\ -KromaMintableERC721Factory,\ -KromaPortal,\ -L1Block,\ -L1CrossDomainMessenger,\ -L2CrossDomainMessenger,\ -L2ERC721Bridge,\ -L2StandardBridge,\ -L2ToL1MessagePasser,\ -Proxy,\ -ProxyAdmin,\ -SecurityCouncil,\ -SecurityCouncilToken,\ -SystemConfig,\ -TimeLock,\ -UpgradeGovernor,\ -ValidatorPool,\ -ValidatorRewardVault,\ -WETH9\ - -package bindings + -contracts ./artifacts.json \ + -source-maps MIPS,PreimageOracle \ + -package $(pkg) \ + -monorepo-base $(monorepo-base) + +lint: + golangci-lint run -E goimports,sqlclosecheck,bodyclose,asciicheck,misspell,errorlint --timeout 5m -e "errors.As" -e "errors.Is" ./... mkdir: - mkdir -p bin $(pkg) + mkdir -p $(pkg) + +clean-contracts: + cd $(contracts-dir) && \ + pnpm clean clean: - rm -rf bin $(pkg) + rm -rf $(pkg) test: go test ./... - -basefee-vault-bindings: compile - bash ./gen_bindings.sh contracts/L2/ProtocolVault.sol:ProtocolVault $(pkg) - -colosseum-bindings: compile - bash ./gen_bindings.sh contracts/L1/Colosseum.sol:Colosseum $(pkg) - -erc20-bindings: compile - bash ./gen_bindings.sh node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20 $(pkg) - -gas-price-oracle-bindings: compile - bash ./gen_bindings.sh contracts/L2/GasPriceOracle.sol:GasPriceOracle $(pkg) - -kroma-mintable-erc20-bindings: compile - bash ./gen_bindings.sh contracts/universal/KromaMintableERC20.sol:KromaMintableERC20 $(pkg) - -kroma-mintable-erc20-factory-bindings: compile - bash ./gen_bindings.sh contracts/universal/KromaMintableERC20Factory.sol:KromaMintableERC20Factory $(pkg) - -kroma-mintable-erc721-factory-bindings: compile - bash ./gen_bindings.sh contracts/universal/KromaMintableERC721Factory.sol:KromaMintableERC721Factory $(pkg) - -kroma-portal-bindings: compile - bash ./gen_bindings.sh contracts/L1/KromaPortal.sol:KromaPortal $(pkg) - -l1block-bindings: compile - bash ./gen_bindings.sh contracts/L2/L1Block.sol:L1Block $(pkg) - -l1-cross-domain-messenger-bindings: compile - bash ./gen_bindings.sh contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger $(pkg) - -l1-erc721-bridge-bindings: compile - bash ./gen_bindings.sh contracts/L1/L1ERC721Bridge.sol:L1ERC721Bridge $(pkg) - -l1-fee-vault-bindings: compile - bash ./gen_bindings.sh contracts/L2/L1FeeVault.sol:L1FeeVault $(pkg) - -l1-standard-bridge-bindings: compile - bash ./gen_bindings.sh contracts/L1/L1StandardBridge.sol:L1StandardBridge $(pkg) - -l2-cross-domain-messenger-bindings: compile - bash ./gen_bindings.sh contracts/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger $(pkg) - -l2-erc721-bridge-bindings: compile - bash ./gen_bindings.sh contracts/L2/L2ERC721Bridge.sol:L2ERC721Bridge $(pkg) - -l2-output-oracle-bindings: compile - bash ./gen_bindings.sh contracts/L1/L2OutputOracle.sol:L2OutputOracle $(pkg) - -l2-standard-bridge-bindings: compile - bash ./gen_bindings.sh contracts/L2/L2StandardBridge.sol:L2StandardBridge $(pkg) - -l2-to-l1-message-passer-bindings: compile - bash ./gen_bindings.sh contracts/L2/L2ToL1MessagePasser.sol:L2ToL1MessagePasser $(pkg) - -proxy-admin-bindings: compile - bash ./gen_bindings.sh contracts/universal/ProxyAdmin.sol:ProxyAdmin $(pkg) - -proxy-bindings: compile - bash ./gen_bindings.sh contracts/universal/Proxy.sol:Proxy $(pkg) - -security-council-bindings: compile - bash ./gen_bindings.sh contracts/L1/SecurityCouncil.sol:SecurityCouncil $(pkg) - -security-council-token-bindings: compile - bash ./gen_bindings.sh contracts/governance/SecurityCouncilToken.sol:SecurityCouncilToken $(pkg) - -system-config-bindings: compile - bash ./gen_bindings.sh contracts/L1/SystemConfig.sol:SystemConfig $(pkg) - -timelock-bindings: compile - bash ./gen_bindings.sh contracts/governance/TimeLock.sol:TimeLock $(pkg) - -upgrade-governor-bindings: compile - bash ./gen_bindings.sh contracts/governance/UpgradeGovernor.sol:UpgradeGovernor $(pkg) - -validator-pool-bindings: compile - bash ./gen_bindings.sh contracts/L1/ValidatorPool.sol:ValidatorPool $(pkg) - -validator-reward-vault-bindings: compile - bash ./gen_bindings.sh contracts/L2/ValidatorRewardVault.sol:ValidatorRewardVault $(pkg) - -weth9-bindings: compile - bash ./gen_bindings.sh contracts/vendor/WETH9.sol:WETH9 $(pkg) - -zk-merkle-trie-bindings: compile - bash ./gen_bindings.sh contracts/L1/ZKMerkleTrie.sol:ZKMerkleTrie $(pkg) - -zk-verifier-bindings: compile - bash ./gen_bindings.sh contracts/L1/ZKVerifier.sol:ZKVerifier $(pkg) diff --git a/op-bindings/README.md b/op-bindings/README.md index e743d6da9..d765c620c 100644 --- a/op-bindings/README.md +++ b/op-bindings/README.md @@ -1,4 +1,4 @@ -# bindings +# op-bindings This package contains built go bindings of the smart contracts. It must be updated after any changes to the smart contracts to ensure that the bindings are @@ -9,6 +9,12 @@ can deploy the contracts. There are also `more` files that include the deployed bytecode as well as the storage layout. These are used to dynamically set bytecode and storage slots in state. +## Usage + +```bash +make +``` + ## Dependencies - `abigen` version 1.10.25 @@ -21,10 +27,14 @@ To check the version of `abigen`, run the command `abigen --version`. The `abigen` tool is part of `go-ethereum` and can be used to build go bindings for smart contracts. It can be installed with go using the commands: -```shell -> go get -u github.com/ethereum/go-ethereum -> cd $GOPATH/src/github.com/ethereum/go-ethereum/ -> make devtools +```bash +$ go get -u github.com/ethereum/go-ethereum +$ cd $GOPATH/src/github.com/ethereum/go-ethereum/ +$ make devtools ``` The geth docs for `abigen` can be found [here](https://geth.ethereum.org/docs/dapp/native-bindings). + +## See also + +TypeScript bindings are also generated in [@eth-optimism/contracts-ts](../packages/contracts-ts/) diff --git a/op-bindings/artifacts.json b/op-bindings/artifacts.json new file mode 100644 index 000000000..f70f26ba2 --- /dev/null +++ b/op-bindings/artifacts.json @@ -0,0 +1,44 @@ +[ + "SystemConfig", + "L1CrossDomainMessenger", + "L1StandardBridge", + "OptimismPortal", + "L2OutputOracle", + "AddressManager", + "L1Block", + "L2ToL1MessagePasser", + "GasPriceOracle", + "L2CrossDomainMessenger", + "L2StandardBridge", + "L2ERC721Bridge", + "L1ERC721Bridge", + "OptimismMintableERC721Factory", + "SequencerFeeVault", + "BaseFeeVault", + "L1FeeVault", + "OptimismMintableERC20Factory", + "OptimismMintableERC20", + "LegacyERC20ETH", + "Proxy", + "ProxyAdmin", + "LegacyMessagePasser", + "ERC20", + "WETH9", + "DeployerWhitelist", + "L1BlockNumber", + "DisputeGameFactory", + "FaultDisputeGame", + "AlphabetVM", + "StandardBridge", + "CrossDomainMessenger", + "MIPS", + "PreimageOracle", + "BlockOracle", + "EAS", + "SchemaRegistry", + "ProtocolVersions", + "Safe", + "SafeProxyFactory", + "DelayedVetoable", + "ISemver" +] diff --git a/op-bindings/ast/canonicalize.go b/op-bindings/ast/canonicalize.go index 9885d1091..f0b69ae57 100644 --- a/op-bindings/ast/canonicalize.go +++ b/op-bindings/ast/canonicalize.go @@ -1,6 +1,7 @@ package ast import ( + "path/filepath" "regexp" "sort" "strconv" @@ -10,6 +11,15 @@ import ( ) var remapTypeRe = regexp.MustCompile(`^(t_[\w_]+\([\w]+\))([\d]+)(_[\w]+)?$`) +var remapAstIdStorage = regexp.MustCompile(`(t_(struct|userDefinedValueType))\(([\w]+)\)([\d]+)_storage`) + +// typeRemapping represents a mapping between an a type generated by solc +// and a canonicalized type. This is because solc inserts the ast id into +// certain types. +type typeRemapping struct { + oldType string + newType string +} // CanonicalizeASTIDs canonicalizes AST IDs in storage layouts so that they // don't cause unnecessary conflicts/diffs. The implementation is not @@ -24,7 +34,7 @@ var remapTypeRe = regexp.MustCompile(`^(t_[\w_]+\([\w]+\))([\d]+)(_[\w]+)?$`) // inefficiency comes from replaceType, which performs a linear // search of all replacements when performing substring matches of // composite types. -func CanonicalizeASTIDs(in *solc.StorageLayout) *solc.StorageLayout { +func CanonicalizeASTIDs(in *solc.StorageLayout, monorepoBase string) *solc.StorageLayout { lastId := uint(1000) astIDRemappings := make(map[uint]uint) typeRemappings := make(map[string]string) @@ -42,25 +52,50 @@ func CanonicalizeASTIDs(in *solc.StorageLayout) *solc.StorageLayout { } sortedOldTypes.Sort() + seenTypes := make(map[string]bool) for _, oldType := range sortedOldTypes { + if seenTypes[oldType] || oldType == "" { + continue + } + matches := remapTypeRe.FindAllStringSubmatch(oldType, -1) if len(matches) == 0 { continue } + // The storage types include the size when its a fixed size. + // This is subject to breaking in the future if a type with + // an ast id is added in a fixed storage type. We don't want + // to skip a type with `_storage` in it if it has a subtype + // with an ast id or it has an astid itself. + skip := len(remapAstIdStorage.FindAllStringSubmatch(oldType, -1)) == 0 + if strings.Contains(oldType, "storage") && skip { + continue + } + replaceAstID := matches[0][2] newType := strings.Replace(oldType, replaceAstID, strconv.Itoa(int(lastId)), 1) typeRemappings[oldType] = newType lastId++ + seenTypes[oldType] = true } outLayout := &solc.StorageLayout{ Types: make(map[string]solc.StorageLayoutType), } for _, slot := range in.Storage { + contract := slot.Contract + + // Normalize the name of the contract since absolute paths + // are used when there are 2 contracts imported with the same + // name + if filepath.IsAbs(contract) { + contract = strings.TrimPrefix(strings.Replace(contract, monorepoBase, "", 1), "/") + } + outLayout.Storage = append(outLayout.Storage, solc.StorageLayoutEntry{ AstId: astIDRemappings[slot.AstId], - Contract: slot.Contract, + Contract: contract, Label: slot.Label, Offset: slot.Offset, Slot: slot.Slot, @@ -71,27 +106,38 @@ func CanonicalizeASTIDs(in *solc.StorageLayout) *solc.StorageLayout { for _, oldType := range sortedOldTypes { value := in.Types[oldType] newType := replaceType(typeRemappings, oldType) - outLayout.Types[newType] = solc.StorageLayoutType{ + layout := solc.StorageLayoutType{ Encoding: value.Encoding, Label: value.Label, NumberOfBytes: value.NumberOfBytes, Key: replaceType(typeRemappings, value.Key), Value: replaceType(typeRemappings, value.Value), } + if value.Base != "" { + layout.Base = replaceType(typeRemappings, value.Base) + } + outLayout.Types[newType] = layout + } return outLayout } func replaceType(typeRemappings map[string]string, in string) string { - if typeRemappings[in] != "" { - return typeRemappings[in] + if remap := typeRemappings[in]; remap != "" { + return remap } + // Track the number of matches + matches := []typeRemapping{} for oldType, newType := range typeRemappings { if strings.Contains(in, oldType) { - return strings.Replace(in, oldType, newType, 1) + matches = append(matches, typeRemapping{oldType, newType}) } } + for _, match := range matches { + in = strings.Replace(in, match.oldType, match.newType, 1) + } + return in } diff --git a/op-bindings/ast/canonicalize_test.go b/op-bindings/ast/canonicalize_test.go index 4729b7045..438653e4b 100644 --- a/op-bindings/ast/canonicalize_test.go +++ b/op-bindings/ast/canonicalize_test.go @@ -6,9 +6,8 @@ import ( "path" "testing" - "github.com/stretchr/testify/require" - "github.com/ethereum-optimism/optimism/op-bindings/solc" + "github.com/stretchr/testify/require" ) type astIDTest struct { @@ -33,6 +32,10 @@ func TestCanonicalize(t *testing.T) { "values in storage", "values-in-storage.json", }, + { + "custom types", + "custom-types.json", + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { @@ -46,7 +49,7 @@ func TestCanonicalize(t *testing.T) { // Run 100 times to make sure that we aren't relying // on random map iteration order. for i := 0; i < 100; i++ { - require.Equal(t, testData.Out, CanonicalizeASTIDs(testData.In)) + require.Equal(t, testData.Out, CanonicalizeASTIDs(testData.In, "")) } }) } diff --git a/op-bindings/ast/testdata/custom-types.json b/op-bindings/ast/testdata/custom-types.json new file mode 100644 index 000000000..f70680b00 --- /dev/null +++ b/op-bindings/ast/testdata/custom-types.json @@ -0,0 +1,286 @@ +{ + "in": { + "storage": [ + { + "astId": 59243, + "contract": "contracts/dispute/DisputeGameFactory.sol:DisputeGameFactory", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 59246, + "contract": "contracts/dispute/DisputeGameFactory.sol:DisputeGameFactory", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 59671, + "contract": "contracts/dispute/DisputeGameFactory.sol:DisputeGameFactory", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 59115, + "contract": "contracts/dispute/DisputeGameFactory.sol:DisputeGameFactory", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 59235, + "contract": "contracts/dispute/DisputeGameFactory.sol:DisputeGameFactory", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 4350, + "contract": "contracts/dispute/DisputeGameFactory.sol:DisputeGameFactory", + "label": "gameImpls", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_userDefinedValueType(GameType)8945,t_contract(IDisputeGame)5664)" + }, + { + "astId": 4357, + "contract": "contracts/dispute/DisputeGameFactory.sol:DisputeGameFactory", + "label": "_disputeGames", + "offset": 0, + "slot": "102", + "type": "t_mapping(t_userDefinedValueType(Hash)8927,t_userDefinedValueType(GameId)8939)" + }, + { + "astId": 4362, + "contract": "contracts/dispute/DisputeGameFactory.sol:DisputeGameFactory", + "label": "_disputeGameList", + "offset": 0, + "slot": "103", + "type": "t_array(t_userDefinedValueType(GameId)8939)dyn_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568", + "base": "t_uint256" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_array(t_userDefinedValueType(GameId)8939)dyn_storage": { + "encoding": "dynamic_array", + "label": "GameId[]", + "numberOfBytes": "32", + "base": "t_userDefinedValueType(GameId)8939" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IDisputeGame)5664": { + "encoding": "inplace", + "label": "contract IDisputeGame", + "numberOfBytes": "20" + }, + "t_mapping(t_userDefinedValueType(GameType)8945,t_contract(IDisputeGame)5664)": { + "encoding": "mapping", + "key": "t_userDefinedValueType(GameType)8945", + "label": "mapping(GameType => contract IDisputeGame)", + "numberOfBytes": "32", + "value": "t_contract(IDisputeGame)5664" + }, + "t_mapping(t_userDefinedValueType(Hash)8927,t_userDefinedValueType(GameId)8939)": { + "encoding": "mapping", + "key": "t_userDefinedValueType(Hash)8927", + "label": "mapping(Hash => GameId)", + "numberOfBytes": "32", + "value": "t_userDefinedValueType(GameId)8939" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + }, + "t_userDefinedValueType(GameId)8939": { + "encoding": "inplace", + "label": "GameId", + "numberOfBytes": "32" + }, + "t_userDefinedValueType(GameType)8945": { + "encoding": "inplace", + "label": "GameType", + "numberOfBytes": "1" + }, + "t_userDefinedValueType(Hash)8927": { + "encoding": "inplace", + "label": "Hash", + "numberOfBytes": "32" + } + } + }, + "out": { + "storage": [ + { + "astId": 1000, + "contract": "contracts/dispute/DisputeGameFactory.sol:DisputeGameFactory", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 1001, + "contract": "contracts/dispute/DisputeGameFactory.sol:DisputeGameFactory", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 1002, + "contract": "contracts/dispute/DisputeGameFactory.sol:DisputeGameFactory", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 1003, + "contract": "contracts/dispute/DisputeGameFactory.sol:DisputeGameFactory", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 1004, + "contract": "contracts/dispute/DisputeGameFactory.sol:DisputeGameFactory", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 1005, + "contract": "contracts/dispute/DisputeGameFactory.sol:DisputeGameFactory", + "label": "gameImpls", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_userDefinedValueType(GameType)1010,t_contract(IDisputeGame)1008)" + }, + { + "astId": 1006, + "contract": "contracts/dispute/DisputeGameFactory.sol:DisputeGameFactory", + "label": "_disputeGames", + "offset": 0, + "slot": "102", + "type": "t_mapping(t_userDefinedValueType(Hash)1011,t_userDefinedValueType(GameId)1009)" + }, + { + "astId": 1007, + "contract": "contracts/dispute/DisputeGameFactory.sol:DisputeGameFactory", + "label": "_disputeGameList", + "offset": 0, + "slot": "103", + "type": "t_array(t_userDefinedValueType(GameId)1009)dyn_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568", + "base": "t_uint256" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_array(t_userDefinedValueType(GameId)1009)dyn_storage": { + "encoding": "dynamic_array", + "label": "GameId[]", + "numberOfBytes": "32", + "base": "t_userDefinedValueType(GameId)1009" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IDisputeGame)1008": { + "encoding": "inplace", + "label": "contract IDisputeGame", + "numberOfBytes": "20" + }, + "t_mapping(t_userDefinedValueType(GameType)1010,t_contract(IDisputeGame)1008)": { + "encoding": "mapping", + "key": "t_userDefinedValueType(GameType)1010", + "label": "mapping(GameType => contract IDisputeGame)", + "numberOfBytes": "32", + "value": "t_contract(IDisputeGame)1008" + }, + "t_mapping(t_userDefinedValueType(Hash)1011,t_userDefinedValueType(GameId)1009)": { + "encoding": "mapping", + "key": "t_userDefinedValueType(Hash)1011", + "label": "mapping(Hash => GameId)", + "numberOfBytes": "32", + "value": "t_userDefinedValueType(GameId)1009" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + }, + "t_userDefinedValueType(GameId)1009": { + "encoding": "inplace", + "label": "GameId", + "numberOfBytes": "32" + }, + "t_userDefinedValueType(GameType)1010": { + "encoding": "inplace", + "label": "GameType", + "numberOfBytes": "1" + }, + "t_userDefinedValueType(Hash)1011": { + "encoding": "inplace", + "label": "Hash", + "numberOfBytes": "32" + } + } + } +} diff --git a/op-bindings/bindings/addressmanager.go b/op-bindings/bindings/addressmanager.go new file mode 100644 index 000000000..c812c9c2c --- /dev/null +++ b/op-bindings/bindings/addressmanager.go @@ -0,0 +1,626 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// AddressManagerMetaData contains all meta data concerning the AddressManager contract. +var AddressManagerMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"}],\"name\":\"AddressSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6105ef8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80639b2ea4bd116100505780639b2ea4bd146100b9578063bf40fac1146100cc578063f2fde38b146100df57600080fd5b8063715018a61461006c5780638da5cb5b14610076575b600080fd5b6100746100f2565b005b60005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100746100c73660046104fa565b610106565b6100906100da366004610548565b6101d9565b6100746100ed366004610585565b610215565b6100fa6102d1565b6101046000610352565b565b61010e6102d1565b6000610119836103c7565b60008181526001602052604090819020805473ffffffffffffffffffffffffffffffffffffffff8681167fffffffffffffffffffffffff00000000000000000000000000000000000000008316179092559151929350169061017c9085906105a7565b6040805191829003822073ffffffffffffffffffffffffffffffffffffffff808716845284166020840152917f9416a153a346f93d95f94b064ae3f148b6460473c6e82b3f9fc2521b873fcd6c910160405180910390a250505050565b6000600160006101e8846103c7565b815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff1692915050565b61021d6102d1565b73ffffffffffffffffffffffffffffffffffffffff81166102c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6102ce81610352565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314610104576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102bc565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000816040516020016103da91906105a7565b604051602081830303815290604052805190602001209050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261043757600080fd5b813567ffffffffffffffff80821115610452576104526103f7565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610498576104986103f7565b816040528381528660208588010111156104b157600080fd5b836020870160208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146104f557600080fd5b919050565b6000806040838503121561050d57600080fd5b823567ffffffffffffffff81111561052457600080fd5b61053085828601610426565b92505061053f602084016104d1565b90509250929050565b60006020828403121561055a57600080fd5b813567ffffffffffffffff81111561057157600080fd5b61057d84828501610426565b949350505050565b60006020828403121561059757600080fd5b6105a0826104d1565b9392505050565b6000825160005b818110156105c857602081860181015185830152016105ae565b818111156105d7576000828501525b50919091019291505056fea164736f6c634300080f000a", +} + +// AddressManagerABI is the input ABI used to generate the binding from. +// Deprecated: Use AddressManagerMetaData.ABI instead. +var AddressManagerABI = AddressManagerMetaData.ABI + +// AddressManagerBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use AddressManagerMetaData.Bin instead. +var AddressManagerBin = AddressManagerMetaData.Bin + +// DeployAddressManager deploys a new Ethereum contract, binding an instance of AddressManager to it. +func DeployAddressManager(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *AddressManager, error) { + parsed, err := AddressManagerMetaData.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(AddressManagerBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &AddressManager{AddressManagerCaller: AddressManagerCaller{contract: contract}, AddressManagerTransactor: AddressManagerTransactor{contract: contract}, AddressManagerFilterer: AddressManagerFilterer{contract: contract}}, nil +} + +// AddressManager is an auto generated Go binding around an Ethereum contract. +type AddressManager struct { + AddressManagerCaller // Read-only binding to the contract + AddressManagerTransactor // Write-only binding to the contract + AddressManagerFilterer // Log filterer for contract events +} + +// AddressManagerCaller is an auto generated read-only Go binding around an Ethereum contract. +type AddressManagerCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AddressManagerTransactor is an auto generated write-only Go binding around an Ethereum contract. +type AddressManagerTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AddressManagerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type AddressManagerFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AddressManagerSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type AddressManagerSession struct { + Contract *AddressManager // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AddressManagerCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type AddressManagerCallerSession struct { + Contract *AddressManagerCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// AddressManagerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type AddressManagerTransactorSession struct { + Contract *AddressManagerTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AddressManagerRaw is an auto generated low-level Go binding around an Ethereum contract. +type AddressManagerRaw struct { + Contract *AddressManager // Generic contract binding to access the raw methods on +} + +// AddressManagerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type AddressManagerCallerRaw struct { + Contract *AddressManagerCaller // Generic read-only contract binding to access the raw methods on +} + +// AddressManagerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type AddressManagerTransactorRaw struct { + Contract *AddressManagerTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewAddressManager creates a new instance of AddressManager, bound to a specific deployed contract. +func NewAddressManager(address common.Address, backend bind.ContractBackend) (*AddressManager, error) { + contract, err := bindAddressManager(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &AddressManager{AddressManagerCaller: AddressManagerCaller{contract: contract}, AddressManagerTransactor: AddressManagerTransactor{contract: contract}, AddressManagerFilterer: AddressManagerFilterer{contract: contract}}, nil +} + +// NewAddressManagerCaller creates a new read-only instance of AddressManager, bound to a specific deployed contract. +func NewAddressManagerCaller(address common.Address, caller bind.ContractCaller) (*AddressManagerCaller, error) { + contract, err := bindAddressManager(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &AddressManagerCaller{contract: contract}, nil +} + +// NewAddressManagerTransactor creates a new write-only instance of AddressManager, bound to a specific deployed contract. +func NewAddressManagerTransactor(address common.Address, transactor bind.ContractTransactor) (*AddressManagerTransactor, error) { + contract, err := bindAddressManager(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &AddressManagerTransactor{contract: contract}, nil +} + +// NewAddressManagerFilterer creates a new log filterer instance of AddressManager, bound to a specific deployed contract. +func NewAddressManagerFilterer(address common.Address, filterer bind.ContractFilterer) (*AddressManagerFilterer, error) { + contract, err := bindAddressManager(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &AddressManagerFilterer{contract: contract}, nil +} + +// bindAddressManager binds a generic wrapper to an already deployed contract. +func bindAddressManager(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(AddressManagerABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_AddressManager *AddressManagerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AddressManager.Contract.AddressManagerCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_AddressManager *AddressManagerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AddressManager.Contract.AddressManagerTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_AddressManager *AddressManagerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AddressManager.Contract.AddressManagerTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_AddressManager *AddressManagerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AddressManager.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_AddressManager *AddressManagerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AddressManager.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_AddressManager *AddressManagerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AddressManager.Contract.contract.Transact(opts, method, params...) +} + +// GetAddress is a free data retrieval call binding the contract method 0xbf40fac1. +// +// Solidity: function getAddress(string _name) view returns(address) +func (_AddressManager *AddressManagerCaller) GetAddress(opts *bind.CallOpts, _name string) (common.Address, error) { + var out []interface{} + err := _AddressManager.contract.Call(opts, &out, "getAddress", _name) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetAddress is a free data retrieval call binding the contract method 0xbf40fac1. +// +// Solidity: function getAddress(string _name) view returns(address) +func (_AddressManager *AddressManagerSession) GetAddress(_name string) (common.Address, error) { + return _AddressManager.Contract.GetAddress(&_AddressManager.CallOpts, _name) +} + +// GetAddress is a free data retrieval call binding the contract method 0xbf40fac1. +// +// Solidity: function getAddress(string _name) view returns(address) +func (_AddressManager *AddressManagerCallerSession) GetAddress(_name string) (common.Address, error) { + return _AddressManager.Contract.GetAddress(&_AddressManager.CallOpts, _name) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_AddressManager *AddressManagerCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _AddressManager.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 + +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_AddressManager *AddressManagerSession) Owner() (common.Address, error) { + return _AddressManager.Contract.Owner(&_AddressManager.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_AddressManager *AddressManagerCallerSession) Owner() (common.Address, error) { + return _AddressManager.Contract.Owner(&_AddressManager.CallOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_AddressManager *AddressManagerTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AddressManager.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_AddressManager *AddressManagerSession) RenounceOwnership() (*types.Transaction, error) { + return _AddressManager.Contract.RenounceOwnership(&_AddressManager.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_AddressManager *AddressManagerTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _AddressManager.Contract.RenounceOwnership(&_AddressManager.TransactOpts) +} + +// SetAddress is a paid mutator transaction binding the contract method 0x9b2ea4bd. +// +// Solidity: function setAddress(string _name, address _address) returns() +func (_AddressManager *AddressManagerTransactor) SetAddress(opts *bind.TransactOpts, _name string, _address common.Address) (*types.Transaction, error) { + return _AddressManager.contract.Transact(opts, "setAddress", _name, _address) +} + +// SetAddress is a paid mutator transaction binding the contract method 0x9b2ea4bd. +// +// Solidity: function setAddress(string _name, address _address) returns() +func (_AddressManager *AddressManagerSession) SetAddress(_name string, _address common.Address) (*types.Transaction, error) { + return _AddressManager.Contract.SetAddress(&_AddressManager.TransactOpts, _name, _address) +} + +// SetAddress is a paid mutator transaction binding the contract method 0x9b2ea4bd. +// +// Solidity: function setAddress(string _name, address _address) returns() +func (_AddressManager *AddressManagerTransactorSession) SetAddress(_name string, _address common.Address) (*types.Transaction, error) { + return _AddressManager.Contract.SetAddress(&_AddressManager.TransactOpts, _name, _address) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_AddressManager *AddressManagerTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _AddressManager.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_AddressManager *AddressManagerSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _AddressManager.Contract.TransferOwnership(&_AddressManager.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_AddressManager *AddressManagerTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _AddressManager.Contract.TransferOwnership(&_AddressManager.TransactOpts, newOwner) +} + +// AddressManagerAddressSetIterator is returned from FilterAddressSet and is used to iterate over the raw logs and unpacked data for AddressSet events raised by the AddressManager contract. +type AddressManagerAddressSetIterator struct { + Event *AddressManagerAddressSet // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *AddressManagerAddressSetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(AddressManagerAddressSet) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(AddressManagerAddressSet) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *AddressManagerAddressSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AddressManagerAddressSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AddressManagerAddressSet represents a AddressSet event raised by the AddressManager contract. +type AddressManagerAddressSet struct { + Name common.Hash + NewAddress common.Address + OldAddress common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterAddressSet is a free log retrieval operation binding the contract event 0x9416a153a346f93d95f94b064ae3f148b6460473c6e82b3f9fc2521b873fcd6c. +// +// Solidity: event AddressSet(string indexed name, address newAddress, address oldAddress) +func (_AddressManager *AddressManagerFilterer) FilterAddressSet(opts *bind.FilterOpts, name []string) (*AddressManagerAddressSetIterator, error) { + + var nameRule []interface{} + for _, nameItem := range name { + nameRule = append(nameRule, nameItem) + } + + logs, sub, err := _AddressManager.contract.FilterLogs(opts, "AddressSet", nameRule) + if err != nil { + return nil, err + } + return &AddressManagerAddressSetIterator{contract: _AddressManager.contract, event: "AddressSet", logs: logs, sub: sub}, nil +} + +// WatchAddressSet is a free log subscription operation binding the contract event 0x9416a153a346f93d95f94b064ae3f148b6460473c6e82b3f9fc2521b873fcd6c. +// +// Solidity: event AddressSet(string indexed name, address newAddress, address oldAddress) +func (_AddressManager *AddressManagerFilterer) WatchAddressSet(opts *bind.WatchOpts, sink chan<- *AddressManagerAddressSet, name []string) (event.Subscription, error) { + + var nameRule []interface{} + for _, nameItem := range name { + nameRule = append(nameRule, nameItem) + } + + logs, sub, err := _AddressManager.contract.WatchLogs(opts, "AddressSet", nameRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(AddressManagerAddressSet) + if err := _AddressManager.contract.UnpackLog(event, "AddressSet", 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 +} + +// ParseAddressSet is a log parse operation binding the contract event 0x9416a153a346f93d95f94b064ae3f148b6460473c6e82b3f9fc2521b873fcd6c. +// +// Solidity: event AddressSet(string indexed name, address newAddress, address oldAddress) +func (_AddressManager *AddressManagerFilterer) ParseAddressSet(log types.Log) (*AddressManagerAddressSet, error) { + event := new(AddressManagerAddressSet) + if err := _AddressManager.contract.UnpackLog(event, "AddressSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AddressManagerOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the AddressManager contract. +type AddressManagerOwnershipTransferredIterator struct { + Event *AddressManagerOwnershipTransferred // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *AddressManagerOwnershipTransferredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(AddressManagerOwnershipTransferred) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(AddressManagerOwnershipTransferred) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *AddressManagerOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AddressManagerOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AddressManagerOwnershipTransferred represents a OwnershipTransferred event raised by the AddressManager contract. +type AddressManagerOwnershipTransferred struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_AddressManager *AddressManagerFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*AddressManagerOwnershipTransferredIterator, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _AddressManager.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &AddressManagerOwnershipTransferredIterator{contract: _AddressManager.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_AddressManager *AddressManagerFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *AddressManagerOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _AddressManager.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(AddressManagerOwnershipTransferred) + if err := _AddressManager.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 +} + +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_AddressManager *AddressManagerFilterer) ParseOwnershipTransferred(log types.Log) (*AddressManagerOwnershipTransferred, error) { + event := new(AddressManagerOwnershipTransferred) + if err := _AddressManager.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-bindings/bindings/addressmanager_more.go b/op-bindings/bindings/addressmanager_more.go new file mode 100644 index 000000000..40bd6be39 --- /dev/null +++ b/op-bindings/bindings/addressmanager_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const AddressManagerStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/legacy/AddressManager.sol:AddressManager\",\"label\":\"_owner\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_address\"},{\"astId\":1001,\"contract\":\"src/legacy/AddressManager.sol:AddressManager\",\"label\":\"addresses\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_mapping(t_bytes32,t_address)\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_bytes32,t_address)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e address)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_address\"}}}" + +var AddressManagerStorageLayout = new(solc.StorageLayout) + +var AddressManagerDeployedBin = "0x608060405234801561001057600080fd5b50600436106100675760003560e01c80639b2ea4bd116100505780639b2ea4bd146100b9578063bf40fac1146100cc578063f2fde38b146100df57600080fd5b8063715018a61461006c5780638da5cb5b14610076575b600080fd5b6100746100f2565b005b60005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100746100c73660046104fa565b610106565b6100906100da366004610548565b6101d9565b6100746100ed366004610585565b610215565b6100fa6102d1565b6101046000610352565b565b61010e6102d1565b6000610119836103c7565b60008181526001602052604090819020805473ffffffffffffffffffffffffffffffffffffffff8681167fffffffffffffffffffffffff00000000000000000000000000000000000000008316179092559151929350169061017c9085906105a7565b6040805191829003822073ffffffffffffffffffffffffffffffffffffffff808716845284166020840152917f9416a153a346f93d95f94b064ae3f148b6460473c6e82b3f9fc2521b873fcd6c910160405180910390a250505050565b6000600160006101e8846103c7565b815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff1692915050565b61021d6102d1565b73ffffffffffffffffffffffffffffffffffffffff81166102c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6102ce81610352565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314610104576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102bc565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000816040516020016103da91906105a7565b604051602081830303815290604052805190602001209050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261043757600080fd5b813567ffffffffffffffff80821115610452576104526103f7565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610498576104986103f7565b816040528381528660208588010111156104b157600080fd5b836020870160208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146104f557600080fd5b919050565b6000806040838503121561050d57600080fd5b823567ffffffffffffffff81111561052457600080fd5b61053085828601610426565b92505061053f602084016104d1565b90509250929050565b60006020828403121561055a57600080fd5b813567ffffffffffffffff81111561057157600080fd5b61057d84828501610426565b949350505050565b60006020828403121561059757600080fd5b6105a0826104d1565b9392505050565b6000825160005b818110156105c857602081860181015185830152016105ae565b818111156105d7576000828501525b50919091019291505056fea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(AddressManagerStorageLayoutJSON), AddressManagerStorageLayout); err != nil { + panic(err) + } + + layouts["AddressManager"] = AddressManagerStorageLayout + deployedBytecodes["AddressManager"] = AddressManagerDeployedBin +} diff --git a/op-bindings/bindings/alphabetvm.go b/op-bindings/bindings/alphabetvm.go new file mode 100644 index 000000000..3e0966b4b --- /dev/null +++ b/op-bindings/bindings/alphabetvm.go @@ -0,0 +1,264 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// AlphabetVMMetaData contains all meta data concerning the AlphabetVM contract. +var AlphabetVMMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"Claim\",\"name\":\"_absolutePrestate\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"oracle\",\"outputs\":[{\"internalType\":\"contractIPreimageOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_stateData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"step\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"postState_\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60a060405234801561001057600080fd5b50604051610a5d380380610a5d83398101604081905261002f91610090565b608081905260405161004090610083565b604051809103906000f08015801561005c573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055506100a9565b6106458061041883390190565b6000602082840312156100a257600080fd5b5051919050565b6080516103556100c3600039600060af01526103556000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80637dc0d1d01461003b578063f8e0cb9614610085575b600080fd5b60005461005b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610098610093366004610212565b6100a6565b60405190815260200161007c565b600080600060087f0000000000000000000000000000000000000000000000000000000000000000901b600888886040516100e292919061027e565b6040518091039020901b0361010857600091506101018688018861028e565b9050610127565b610114868801886102a7565b909250905081610123816102f8565b9250505b81610133826001610330565b604080516020810193909352820152606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000017979650505050505050565b60008083601f8401126101db57600080fd5b50813567ffffffffffffffff8111156101f357600080fd5b60208301915083602082850101111561020b57600080fd5b9250929050565b6000806000806040858703121561022857600080fd5b843567ffffffffffffffff8082111561024057600080fd5b61024c888389016101c9565b9096509450602087013591508082111561026557600080fd5b50610272878288016101c9565b95989497509550505050565b8183823760009101908152919050565b6000602082840312156102a057600080fd5b5035919050565b600080604083850312156102ba57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610329576103296102c9565b5060010190565b60008219821115610343576103436102c9565b50019056fea164736f6c634300080f000a608060405234801561001057600080fd5b50610625806100206000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c8063e03110e111610050578063e03110e114610106578063e15926111461012e578063fef2b4ed1461014357600080fd5b806361238bde146100775780638542cf50146100b55780639a1f5e7f146100f3575b600080fd5b6100a26100853660046104d1565b600160209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6100e36100c33660046104d1565b600260209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016100ac565b6100a26101013660046104f3565b610163565b6101196101143660046104d1565b610236565b604080519283526020830191909152016100ac565b61014161013c366004610525565b610327565b005b6100a26101513660046105a1565b60006020819052908152604090205481565b600061016e85610430565b905061017b8360086105e9565b8211806101885750602083115b156101bf576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845287528083209483529386528382205581815293849052922055919050565b6000828152600260209081526040808320848452909152812054819060ff166102bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b50600083815260208181526040909120546102db8160086105e9565b6102e68560206105e9565b1061030457836102f78260086105e9565b6103019190610601565b91505b506000938452600160209081526040808620948652939052919092205492909150565b604435600080600883018611156103465763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216176104cb81600090815233602052604090207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b92915050565b600080604083850312156104e457600080fd5b50508035926020909101359150565b6000806000806080858703121561050957600080fd5b5050823594602084013594506040840135936060013592509050565b60008060006040848603121561053a57600080fd5b83359250602084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057c57600080fd5b87602082850101111561058e57600080fd5b6020830194508093505050509250925092565b6000602082840312156105b357600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156105fc576105fc6105ba565b500190565b600082821015610613576106136105ba565b50039056fea164736f6c634300080f000a", +} + +// AlphabetVMABI is the input ABI used to generate the binding from. +// Deprecated: Use AlphabetVMMetaData.ABI instead. +var AlphabetVMABI = AlphabetVMMetaData.ABI + +// AlphabetVMBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use AlphabetVMMetaData.Bin instead. +var AlphabetVMBin = AlphabetVMMetaData.Bin + +// DeployAlphabetVM deploys a new Ethereum contract, binding an instance of AlphabetVM to it. +func DeployAlphabetVM(auth *bind.TransactOpts, backend bind.ContractBackend, _absolutePrestate [32]byte) (common.Address, *types.Transaction, *AlphabetVM, error) { + parsed, err := AlphabetVMMetaData.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(AlphabetVMBin), backend, _absolutePrestate) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &AlphabetVM{AlphabetVMCaller: AlphabetVMCaller{contract: contract}, AlphabetVMTransactor: AlphabetVMTransactor{contract: contract}, AlphabetVMFilterer: AlphabetVMFilterer{contract: contract}}, nil +} + +// AlphabetVM is an auto generated Go binding around an Ethereum contract. +type AlphabetVM struct { + AlphabetVMCaller // Read-only binding to the contract + AlphabetVMTransactor // Write-only binding to the contract + AlphabetVMFilterer // Log filterer for contract events +} + +// AlphabetVMCaller is an auto generated read-only Go binding around an Ethereum contract. +type AlphabetVMCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AlphabetVMTransactor is an auto generated write-only Go binding around an Ethereum contract. +type AlphabetVMTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AlphabetVMFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type AlphabetVMFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AlphabetVMSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type AlphabetVMSession struct { + Contract *AlphabetVM // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AlphabetVMCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type AlphabetVMCallerSession struct { + Contract *AlphabetVMCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// AlphabetVMTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type AlphabetVMTransactorSession struct { + Contract *AlphabetVMTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AlphabetVMRaw is an auto generated low-level Go binding around an Ethereum contract. +type AlphabetVMRaw struct { + Contract *AlphabetVM // Generic contract binding to access the raw methods on +} + +// AlphabetVMCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type AlphabetVMCallerRaw struct { + Contract *AlphabetVMCaller // Generic read-only contract binding to access the raw methods on +} + +// AlphabetVMTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type AlphabetVMTransactorRaw struct { + Contract *AlphabetVMTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewAlphabetVM creates a new instance of AlphabetVM, bound to a specific deployed contract. +func NewAlphabetVM(address common.Address, backend bind.ContractBackend) (*AlphabetVM, error) { + contract, err := bindAlphabetVM(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &AlphabetVM{AlphabetVMCaller: AlphabetVMCaller{contract: contract}, AlphabetVMTransactor: AlphabetVMTransactor{contract: contract}, AlphabetVMFilterer: AlphabetVMFilterer{contract: contract}}, nil +} + +// NewAlphabetVMCaller creates a new read-only instance of AlphabetVM, bound to a specific deployed contract. +func NewAlphabetVMCaller(address common.Address, caller bind.ContractCaller) (*AlphabetVMCaller, error) { + contract, err := bindAlphabetVM(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &AlphabetVMCaller{contract: contract}, nil +} + +// NewAlphabetVMTransactor creates a new write-only instance of AlphabetVM, bound to a specific deployed contract. +func NewAlphabetVMTransactor(address common.Address, transactor bind.ContractTransactor) (*AlphabetVMTransactor, error) { + contract, err := bindAlphabetVM(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &AlphabetVMTransactor{contract: contract}, nil +} + +// NewAlphabetVMFilterer creates a new log filterer instance of AlphabetVM, bound to a specific deployed contract. +func NewAlphabetVMFilterer(address common.Address, filterer bind.ContractFilterer) (*AlphabetVMFilterer, error) { + contract, err := bindAlphabetVM(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &AlphabetVMFilterer{contract: contract}, nil +} + +// bindAlphabetVM binds a generic wrapper to an already deployed contract. +func bindAlphabetVM(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(AlphabetVMABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_AlphabetVM *AlphabetVMRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AlphabetVM.Contract.AlphabetVMCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_AlphabetVM *AlphabetVMRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AlphabetVM.Contract.AlphabetVMTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_AlphabetVM *AlphabetVMRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AlphabetVM.Contract.AlphabetVMTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_AlphabetVM *AlphabetVMCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AlphabetVM.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_AlphabetVM *AlphabetVMTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AlphabetVM.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_AlphabetVM *AlphabetVMTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AlphabetVM.Contract.contract.Transact(opts, method, params...) +} + +// Oracle is a free data retrieval call binding the contract method 0x7dc0d1d0. +// +// Solidity: function oracle() view returns(address) +func (_AlphabetVM *AlphabetVMCaller) Oracle(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _AlphabetVM.contract.Call(opts, &out, "oracle") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Oracle is a free data retrieval call binding the contract method 0x7dc0d1d0. +// +// Solidity: function oracle() view returns(address) +func (_AlphabetVM *AlphabetVMSession) Oracle() (common.Address, error) { + return _AlphabetVM.Contract.Oracle(&_AlphabetVM.CallOpts) +} + +// Oracle is a free data retrieval call binding the contract method 0x7dc0d1d0. +// +// Solidity: function oracle() view returns(address) +func (_AlphabetVM *AlphabetVMCallerSession) Oracle() (common.Address, error) { + return _AlphabetVM.Contract.Oracle(&_AlphabetVM.CallOpts) +} + +// Step is a free data retrieval call binding the contract method 0xf8e0cb96. +// +// Solidity: function step(bytes _stateData, bytes ) view returns(bytes32 postState_) +func (_AlphabetVM *AlphabetVMCaller) Step(opts *bind.CallOpts, _stateData []byte, arg1 []byte) ([32]byte, error) { + var out []interface{} + err := _AlphabetVM.contract.Call(opts, &out, "step", _stateData, arg1) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// Step is a free data retrieval call binding the contract method 0xf8e0cb96. +// +// Solidity: function step(bytes _stateData, bytes ) view returns(bytes32 postState_) +func (_AlphabetVM *AlphabetVMSession) Step(_stateData []byte, arg1 []byte) ([32]byte, error) { + return _AlphabetVM.Contract.Step(&_AlphabetVM.CallOpts, _stateData, arg1) +} + +// Step is a free data retrieval call binding the contract method 0xf8e0cb96. +// +// Solidity: function step(bytes _stateData, bytes ) view returns(bytes32 postState_) +func (_AlphabetVM *AlphabetVMCallerSession) Step(_stateData []byte, arg1 []byte) ([32]byte, error) { + return _AlphabetVM.Contract.Step(&_AlphabetVM.CallOpts, _stateData, arg1) +} diff --git a/op-bindings/bindings/alphabetvm_more.go b/op-bindings/bindings/alphabetvm_more.go new file mode 100644 index 000000000..4f7b1d776 --- /dev/null +++ b/op-bindings/bindings/alphabetvm_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const AlphabetVMStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"test/FaultDisputeGame.t.sol:AlphabetVM\",\"label\":\"oracle\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_contract(IPreimageOracle)1001\"}],\"types\":{\"t_contract(IPreimageOracle)1001\":{\"encoding\":\"inplace\",\"label\":\"contract IPreimageOracle\",\"numberOfBytes\":\"20\"}}}" + +var AlphabetVMStorageLayout = new(solc.StorageLayout) + +var AlphabetVMDeployedBin = "0x608060405234801561001057600080fd5b50600436106100365760003560e01c80637dc0d1d01461003b578063f8e0cb9614610085575b600080fd5b60005461005b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610098610093366004610212565b6100a6565b60405190815260200161007c565b600080600060087f0000000000000000000000000000000000000000000000000000000000000000901b600888886040516100e292919061027e565b6040518091039020901b0361010857600091506101018688018861028e565b9050610127565b610114868801886102a7565b909250905081610123816102f8565b9250505b81610133826001610330565b604080516020810193909352820152606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000017979650505050505050565b60008083601f8401126101db57600080fd5b50813567ffffffffffffffff8111156101f357600080fd5b60208301915083602082850101111561020b57600080fd5b9250929050565b6000806000806040858703121561022857600080fd5b843567ffffffffffffffff8082111561024057600080fd5b61024c888389016101c9565b9096509450602087013591508082111561026557600080fd5b50610272878288016101c9565b95989497509550505050565b8183823760009101908152919050565b6000602082840312156102a057600080fd5b5035919050565b600080604083850312156102ba57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610329576103296102c9565b5060010190565b60008219821115610343576103436102c9565b50019056fea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(AlphabetVMStorageLayoutJSON), AlphabetVMStorageLayout); err != nil { + panic(err) + } + + layouts["AlphabetVM"] = AlphabetVMStorageLayout + deployedBytecodes["AlphabetVM"] = AlphabetVMDeployedBin +} diff --git a/op-bindings/bindings/basefeevault.go b/op-bindings/bindings/basefeevault.go new file mode 100644 index 000000000..4dde70655 --- /dev/null +++ b/op-bindings/bindings/basefeevault.go @@ -0,0 +1,672 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// BaseFeeVaultMetaData contains all meta data concerning the BaseFeeVault contract. +var BaseFeeVaultMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_minWithdrawalAmount\",\"type\":\"uint256\"},{\"internalType\":\"enumFeeVault.WithdrawalNetwork\",\"name\":\"_withdrawalNetwork\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"enumFeeVault.WithdrawalNetwork\",\"name\":\"withdrawalNetwork\",\"type\":\"uint8\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MIN_WITHDRAWAL_AMOUNT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RECIPIENT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WITHDRAWAL_NETWORK\",\"outputs\":[{\"internalType\":\"enumFeeVault.WithdrawalNetwork\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalProcessed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60e060405234801561001057600080fd5b506040516108d13803806108d183398101604081905261002f91610079565b6001600160a01b03831660a0526080829052828282806001811115610056576100566100cc565b60c081600181111561006a5761006a6100cc565b815250505050505050506100e2565b60008060006060848603121561008e57600080fd5b83516001600160a01b03811681146100a557600080fd5b602085015160408601519194509250600281106100c157600080fd5b809150509250925092565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c051610790610141600039600081816101760152818161038901526103c40152600081816087015281816102d801528181610367015281816103fd01526105640152600081816101b701526101db01526107906000f3fe6080604052600436106100695760003560e01c806384411d651161004357806384411d6514610140578063d0e12f9014610164578063d3e5792b146101a557600080fd5b80630d9019e1146100755780633ccfd60b146100d357806354fd4d50146100ea57600080fd5b3661007057005b600080fd5b34801561008157600080fd5b506100a97f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156100df57600080fd5b506100e86101d9565b005b3480156100f657600080fd5b506101336040518060400160405280600581526020017f312e342e3000000000000000000000000000000000000000000000000000000081525081565b6040516100ca9190610630565b34801561014c57600080fd5b5061015660005481565b6040519081526020016100ca565b34801561017057600080fd5b506101987f000000000000000000000000000000000000000000000000000000000000000081565b6040516100ca91906106b4565b3480156101b157600080fd5b506101567f000000000000000000000000000000000000000000000000000000000000000081565b7f00000000000000000000000000000000000000000000000000000000000000004710156102b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4665655661756c743a207769746864726177616c20616d6f756e74206d75737460448201527f2062652067726561746572207468616e206d696e696d756d207769746864726160648201527f77616c20616d6f756e7400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000479050806000808282546102ca91906106c8565b9091555050604080518281527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166020820152338183015290517fc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba9181900360600190a17f38e04cbeb8c10f8f568618aa75be0f10b6729b8b4237743b4de20cbcde2839ee817f0000000000000000000000000000000000000000000000000000000000000000337f00000000000000000000000000000000000000000000000000000000000000006040516103b89493929190610707565b60405180910390a160017f000000000000000000000000000000000000000000000000000000000000000060018111156103f4576103f461064a565b0361050d5760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610473576040519150601f19603f3d011682016040523d82523d6000602084013e610478565b606091505b5050905080610509576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4665655661756c743a206661696c656420746f2073656e642045544820746f2060448201527f4c322066656520726563697069656e740000000000000000000000000000000060648201526084016102ab565b5050565b604080516020810182526000815290517fe11013dd0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000109163e11013dd918491610590917f0000000000000000000000000000000000000000000000000000000000000000916188b891600401610748565b6000604051808303818588803b1580156105a957600080fd5b505af11580156105bd573d6000803e3d6000fd5b505050505050565b6000815180845260005b818110156105eb576020818501810151868301820152016105cf565b818111156105fd576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061064360208301846105c5565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600281106106b0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b602081016106c28284610679565b92915050565b60008219821115610702577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b84815273ffffffffffffffffffffffffffffffffffffffff8481166020830152831660408201526080810161073f6060830184610679565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600061073f60608301846105c556fea164736f6c634300080f000a", +} + +// BaseFeeVaultABI is the input ABI used to generate the binding from. +// Deprecated: Use BaseFeeVaultMetaData.ABI instead. +var BaseFeeVaultABI = BaseFeeVaultMetaData.ABI + +// BaseFeeVaultBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use BaseFeeVaultMetaData.Bin instead. +var BaseFeeVaultBin = BaseFeeVaultMetaData.Bin + +// DeployBaseFeeVault deploys a new Ethereum contract, binding an instance of BaseFeeVault to it. +func DeployBaseFeeVault(auth *bind.TransactOpts, backend bind.ContractBackend, _recipient common.Address, _minWithdrawalAmount *big.Int, _withdrawalNetwork uint8) (common.Address, *types.Transaction, *BaseFeeVault, error) { + parsed, err := BaseFeeVaultMetaData.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(BaseFeeVaultBin), backend, _recipient, _minWithdrawalAmount, _withdrawalNetwork) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &BaseFeeVault{BaseFeeVaultCaller: BaseFeeVaultCaller{contract: contract}, BaseFeeVaultTransactor: BaseFeeVaultTransactor{contract: contract}, BaseFeeVaultFilterer: BaseFeeVaultFilterer{contract: contract}}, nil +} + +// BaseFeeVault is an auto generated Go binding around an Ethereum contract. +type BaseFeeVault struct { + BaseFeeVaultCaller // Read-only binding to the contract + BaseFeeVaultTransactor // Write-only binding to the contract + BaseFeeVaultFilterer // Log filterer for contract events +} + +// BaseFeeVaultCaller is an auto generated read-only Go binding around an Ethereum contract. +type BaseFeeVaultCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BaseFeeVaultTransactor is an auto generated write-only Go binding around an Ethereum contract. +type BaseFeeVaultTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BaseFeeVaultFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type BaseFeeVaultFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BaseFeeVaultSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type BaseFeeVaultSession struct { + Contract *BaseFeeVault // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// BaseFeeVaultCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type BaseFeeVaultCallerSession struct { + Contract *BaseFeeVaultCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// BaseFeeVaultTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type BaseFeeVaultTransactorSession struct { + Contract *BaseFeeVaultTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// BaseFeeVaultRaw is an auto generated low-level Go binding around an Ethereum contract. +type BaseFeeVaultRaw struct { + Contract *BaseFeeVault // Generic contract binding to access the raw methods on +} + +// BaseFeeVaultCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type BaseFeeVaultCallerRaw struct { + Contract *BaseFeeVaultCaller // Generic read-only contract binding to access the raw methods on +} + +// BaseFeeVaultTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type BaseFeeVaultTransactorRaw struct { + Contract *BaseFeeVaultTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewBaseFeeVault creates a new instance of BaseFeeVault, bound to a specific deployed contract. +func NewBaseFeeVault(address common.Address, backend bind.ContractBackend) (*BaseFeeVault, error) { + contract, err := bindBaseFeeVault(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &BaseFeeVault{BaseFeeVaultCaller: BaseFeeVaultCaller{contract: contract}, BaseFeeVaultTransactor: BaseFeeVaultTransactor{contract: contract}, BaseFeeVaultFilterer: BaseFeeVaultFilterer{contract: contract}}, nil +} + +// NewBaseFeeVaultCaller creates a new read-only instance of BaseFeeVault, bound to a specific deployed contract. +func NewBaseFeeVaultCaller(address common.Address, caller bind.ContractCaller) (*BaseFeeVaultCaller, error) { + contract, err := bindBaseFeeVault(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &BaseFeeVaultCaller{contract: contract}, nil +} + +// NewBaseFeeVaultTransactor creates a new write-only instance of BaseFeeVault, bound to a specific deployed contract. +func NewBaseFeeVaultTransactor(address common.Address, transactor bind.ContractTransactor) (*BaseFeeVaultTransactor, error) { + contract, err := bindBaseFeeVault(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &BaseFeeVaultTransactor{contract: contract}, nil +} + +// NewBaseFeeVaultFilterer creates a new log filterer instance of BaseFeeVault, bound to a specific deployed contract. +func NewBaseFeeVaultFilterer(address common.Address, filterer bind.ContractFilterer) (*BaseFeeVaultFilterer, error) { + contract, err := bindBaseFeeVault(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &BaseFeeVaultFilterer{contract: contract}, nil +} + +// bindBaseFeeVault binds a generic wrapper to an already deployed contract. +func bindBaseFeeVault(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(BaseFeeVaultABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_BaseFeeVault *BaseFeeVaultRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _BaseFeeVault.Contract.BaseFeeVaultCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_BaseFeeVault *BaseFeeVaultRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BaseFeeVault.Contract.BaseFeeVaultTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_BaseFeeVault *BaseFeeVaultRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _BaseFeeVault.Contract.BaseFeeVaultTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_BaseFeeVault *BaseFeeVaultCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _BaseFeeVault.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_BaseFeeVault *BaseFeeVaultTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BaseFeeVault.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_BaseFeeVault *BaseFeeVaultTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _BaseFeeVault.Contract.contract.Transact(opts, method, params...) +} + +// MINWITHDRAWALAMOUNT is a free data retrieval call binding the contract method 0xd3e5792b. +// +// Solidity: function MIN_WITHDRAWAL_AMOUNT() view returns(uint256) +func (_BaseFeeVault *BaseFeeVaultCaller) MINWITHDRAWALAMOUNT(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _BaseFeeVault.contract.Call(opts, &out, "MIN_WITHDRAWAL_AMOUNT") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MINWITHDRAWALAMOUNT is a free data retrieval call binding the contract method 0xd3e5792b. +// +// Solidity: function MIN_WITHDRAWAL_AMOUNT() view returns(uint256) +func (_BaseFeeVault *BaseFeeVaultSession) MINWITHDRAWALAMOUNT() (*big.Int, error) { + return _BaseFeeVault.Contract.MINWITHDRAWALAMOUNT(&_BaseFeeVault.CallOpts) +} + +// MINWITHDRAWALAMOUNT is a free data retrieval call binding the contract method 0xd3e5792b. +// +// Solidity: function MIN_WITHDRAWAL_AMOUNT() view returns(uint256) +func (_BaseFeeVault *BaseFeeVaultCallerSession) MINWITHDRAWALAMOUNT() (*big.Int, error) { + return _BaseFeeVault.Contract.MINWITHDRAWALAMOUNT(&_BaseFeeVault.CallOpts) +} + +// RECIPIENT is a free data retrieval call binding the contract method 0x0d9019e1. +// +// Solidity: function RECIPIENT() view returns(address) +func (_BaseFeeVault *BaseFeeVaultCaller) RECIPIENT(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BaseFeeVault.contract.Call(opts, &out, "RECIPIENT") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// RECIPIENT is a free data retrieval call binding the contract method 0x0d9019e1. +// +// Solidity: function RECIPIENT() view returns(address) +func (_BaseFeeVault *BaseFeeVaultSession) RECIPIENT() (common.Address, error) { + return _BaseFeeVault.Contract.RECIPIENT(&_BaseFeeVault.CallOpts) +} + +// RECIPIENT is a free data retrieval call binding the contract method 0x0d9019e1. +// +// Solidity: function RECIPIENT() view returns(address) +func (_BaseFeeVault *BaseFeeVaultCallerSession) RECIPIENT() (common.Address, error) { + return _BaseFeeVault.Contract.RECIPIENT(&_BaseFeeVault.CallOpts) +} + +// WITHDRAWALNETWORK is a free data retrieval call binding the contract method 0xd0e12f90. +// +// Solidity: function WITHDRAWAL_NETWORK() view returns(uint8) +func (_BaseFeeVault *BaseFeeVaultCaller) WITHDRAWALNETWORK(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _BaseFeeVault.contract.Call(opts, &out, "WITHDRAWAL_NETWORK") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// WITHDRAWALNETWORK is a free data retrieval call binding the contract method 0xd0e12f90. +// +// Solidity: function WITHDRAWAL_NETWORK() view returns(uint8) +func (_BaseFeeVault *BaseFeeVaultSession) WITHDRAWALNETWORK() (uint8, error) { + return _BaseFeeVault.Contract.WITHDRAWALNETWORK(&_BaseFeeVault.CallOpts) +} + +// WITHDRAWALNETWORK is a free data retrieval call binding the contract method 0xd0e12f90. +// +// Solidity: function WITHDRAWAL_NETWORK() view returns(uint8) +func (_BaseFeeVault *BaseFeeVaultCallerSession) WITHDRAWALNETWORK() (uint8, error) { + return _BaseFeeVault.Contract.WITHDRAWALNETWORK(&_BaseFeeVault.CallOpts) +} + +// TotalProcessed is a free data retrieval call binding the contract method 0x84411d65. +// +// Solidity: function totalProcessed() view returns(uint256) +func (_BaseFeeVault *BaseFeeVaultCaller) TotalProcessed(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _BaseFeeVault.contract.Call(opts, &out, "totalProcessed") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalProcessed is a free data retrieval call binding the contract method 0x84411d65. +// +// Solidity: function totalProcessed() view returns(uint256) +func (_BaseFeeVault *BaseFeeVaultSession) TotalProcessed() (*big.Int, error) { + return _BaseFeeVault.Contract.TotalProcessed(&_BaseFeeVault.CallOpts) +} + +// TotalProcessed is a free data retrieval call binding the contract method 0x84411d65. +// +// Solidity: function totalProcessed() view returns(uint256) +func (_BaseFeeVault *BaseFeeVaultCallerSession) TotalProcessed() (*big.Int, error) { + return _BaseFeeVault.Contract.TotalProcessed(&_BaseFeeVault.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_BaseFeeVault *BaseFeeVaultCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _BaseFeeVault.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_BaseFeeVault *BaseFeeVaultSession) Version() (string, error) { + return _BaseFeeVault.Contract.Version(&_BaseFeeVault.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_BaseFeeVault *BaseFeeVaultCallerSession) Version() (string, error) { + return _BaseFeeVault.Contract.Version(&_BaseFeeVault.CallOpts) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x3ccfd60b. +// +// Solidity: function withdraw() returns() +func (_BaseFeeVault *BaseFeeVaultTransactor) Withdraw(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BaseFeeVault.contract.Transact(opts, "withdraw") +} + +// Withdraw is a paid mutator transaction binding the contract method 0x3ccfd60b. +// +// Solidity: function withdraw() returns() +func (_BaseFeeVault *BaseFeeVaultSession) Withdraw() (*types.Transaction, error) { + return _BaseFeeVault.Contract.Withdraw(&_BaseFeeVault.TransactOpts) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x3ccfd60b. +// +// Solidity: function withdraw() returns() +func (_BaseFeeVault *BaseFeeVaultTransactorSession) Withdraw() (*types.Transaction, error) { + return _BaseFeeVault.Contract.Withdraw(&_BaseFeeVault.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_BaseFeeVault *BaseFeeVaultTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BaseFeeVault.contract.RawTransact(opts, nil) // calldata is disallowed for receive function +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_BaseFeeVault *BaseFeeVaultSession) Receive() (*types.Transaction, error) { + return _BaseFeeVault.Contract.Receive(&_BaseFeeVault.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_BaseFeeVault *BaseFeeVaultTransactorSession) Receive() (*types.Transaction, error) { + return _BaseFeeVault.Contract.Receive(&_BaseFeeVault.TransactOpts) +} + +// BaseFeeVaultWithdrawalIterator is returned from FilterWithdrawal and is used to iterate over the raw logs and unpacked data for Withdrawal events raised by the BaseFeeVault contract. +type BaseFeeVaultWithdrawalIterator struct { + Event *BaseFeeVaultWithdrawal // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *BaseFeeVaultWithdrawalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(BaseFeeVaultWithdrawal) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(BaseFeeVaultWithdrawal) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *BaseFeeVaultWithdrawalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BaseFeeVaultWithdrawalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BaseFeeVaultWithdrawal represents a Withdrawal event raised by the BaseFeeVault contract. +type BaseFeeVaultWithdrawal struct { + Value *big.Int + To common.Address + From common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawal is a free log retrieval operation binding the contract event 0xc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba. +// +// Solidity: event Withdrawal(uint256 value, address to, address from) +func (_BaseFeeVault *BaseFeeVaultFilterer) FilterWithdrawal(opts *bind.FilterOpts) (*BaseFeeVaultWithdrawalIterator, error) { + + logs, sub, err := _BaseFeeVault.contract.FilterLogs(opts, "Withdrawal") + if err != nil { + return nil, err + } + return &BaseFeeVaultWithdrawalIterator{contract: _BaseFeeVault.contract, event: "Withdrawal", logs: logs, sub: sub}, nil +} + +// WatchWithdrawal is a free log subscription operation binding the contract event 0xc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba. +// +// Solidity: event Withdrawal(uint256 value, address to, address from) +func (_BaseFeeVault *BaseFeeVaultFilterer) WatchWithdrawal(opts *bind.WatchOpts, sink chan<- *BaseFeeVaultWithdrawal) (event.Subscription, error) { + + logs, sub, err := _BaseFeeVault.contract.WatchLogs(opts, "Withdrawal") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(BaseFeeVaultWithdrawal) + if err := _BaseFeeVault.contract.UnpackLog(event, "Withdrawal", 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 +} + +// ParseWithdrawal is a log parse operation binding the contract event 0xc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba. +// +// Solidity: event Withdrawal(uint256 value, address to, address from) +func (_BaseFeeVault *BaseFeeVaultFilterer) ParseWithdrawal(log types.Log) (*BaseFeeVaultWithdrawal, error) { + event := new(BaseFeeVaultWithdrawal) + if err := _BaseFeeVault.contract.UnpackLog(event, "Withdrawal", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// BaseFeeVaultWithdrawal0Iterator is returned from FilterWithdrawal0 and is used to iterate over the raw logs and unpacked data for Withdrawal0 events raised by the BaseFeeVault contract. +type BaseFeeVaultWithdrawal0Iterator struct { + Event *BaseFeeVaultWithdrawal0 // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *BaseFeeVaultWithdrawal0Iterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(BaseFeeVaultWithdrawal0) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(BaseFeeVaultWithdrawal0) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *BaseFeeVaultWithdrawal0Iterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BaseFeeVaultWithdrawal0Iterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BaseFeeVaultWithdrawal0 represents a Withdrawal0 event raised by the BaseFeeVault contract. +type BaseFeeVaultWithdrawal0 struct { + Value *big.Int + To common.Address + From common.Address + WithdrawalNetwork uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawal0 is a free log retrieval operation binding the contract event 0x38e04cbeb8c10f8f568618aa75be0f10b6729b8b4237743b4de20cbcde2839ee. +// +// Solidity: event Withdrawal(uint256 value, address to, address from, uint8 withdrawalNetwork) +func (_BaseFeeVault *BaseFeeVaultFilterer) FilterWithdrawal0(opts *bind.FilterOpts) (*BaseFeeVaultWithdrawal0Iterator, error) { + + logs, sub, err := _BaseFeeVault.contract.FilterLogs(opts, "Withdrawal0") + if err != nil { + return nil, err + } + return &BaseFeeVaultWithdrawal0Iterator{contract: _BaseFeeVault.contract, event: "Withdrawal0", logs: logs, sub: sub}, nil +} + +// WatchWithdrawal0 is a free log subscription operation binding the contract event 0x38e04cbeb8c10f8f568618aa75be0f10b6729b8b4237743b4de20cbcde2839ee. +// +// Solidity: event Withdrawal(uint256 value, address to, address from, uint8 withdrawalNetwork) +func (_BaseFeeVault *BaseFeeVaultFilterer) WatchWithdrawal0(opts *bind.WatchOpts, sink chan<- *BaseFeeVaultWithdrawal0) (event.Subscription, error) { + + logs, sub, err := _BaseFeeVault.contract.WatchLogs(opts, "Withdrawal0") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(BaseFeeVaultWithdrawal0) + if err := _BaseFeeVault.contract.UnpackLog(event, "Withdrawal0", 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 +} + +// ParseWithdrawal0 is a log parse operation binding the contract event 0x38e04cbeb8c10f8f568618aa75be0f10b6729b8b4237743b4de20cbcde2839ee. +// +// Solidity: event Withdrawal(uint256 value, address to, address from, uint8 withdrawalNetwork) +func (_BaseFeeVault *BaseFeeVaultFilterer) ParseWithdrawal0(log types.Log) (*BaseFeeVaultWithdrawal0, error) { + event := new(BaseFeeVaultWithdrawal0) + if err := _BaseFeeVault.contract.UnpackLog(event, "Withdrawal0", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-bindings/bindings/basefeevault_more.go b/op-bindings/bindings/basefeevault_more.go new file mode 100644 index 000000000..2041fbaf8 --- /dev/null +++ b/op-bindings/bindings/basefeevault_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const BaseFeeVaultStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/L2/BaseFeeVault.sol:BaseFeeVault\",\"label\":\"totalProcessed\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint256\"}],\"types\":{\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"}}}" + +var BaseFeeVaultStorageLayout = new(solc.StorageLayout) + +var BaseFeeVaultDeployedBin = "0x6080604052600436106100695760003560e01c806384411d651161004357806384411d6514610140578063d0e12f9014610164578063d3e5792b146101a557600080fd5b80630d9019e1146100755780633ccfd60b146100d357806354fd4d50146100ea57600080fd5b3661007057005b600080fd5b34801561008157600080fd5b506100a97f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156100df57600080fd5b506100e86101d9565b005b3480156100f657600080fd5b506101336040518060400160405280600581526020017f312e342e3000000000000000000000000000000000000000000000000000000081525081565b6040516100ca9190610630565b34801561014c57600080fd5b5061015660005481565b6040519081526020016100ca565b34801561017057600080fd5b506101987f000000000000000000000000000000000000000000000000000000000000000081565b6040516100ca91906106b4565b3480156101b157600080fd5b506101567f000000000000000000000000000000000000000000000000000000000000000081565b7f00000000000000000000000000000000000000000000000000000000000000004710156102b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4665655661756c743a207769746864726177616c20616d6f756e74206d75737460448201527f2062652067726561746572207468616e206d696e696d756d207769746864726160648201527f77616c20616d6f756e7400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000479050806000808282546102ca91906106c8565b9091555050604080518281527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166020820152338183015290517fc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba9181900360600190a17f38e04cbeb8c10f8f568618aa75be0f10b6729b8b4237743b4de20cbcde2839ee817f0000000000000000000000000000000000000000000000000000000000000000337f00000000000000000000000000000000000000000000000000000000000000006040516103b89493929190610707565b60405180910390a160017f000000000000000000000000000000000000000000000000000000000000000060018111156103f4576103f461064a565b0361050d5760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610473576040519150601f19603f3d011682016040523d82523d6000602084013e610478565b606091505b5050905080610509576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4665655661756c743a206661696c656420746f2073656e642045544820746f2060448201527f4c322066656520726563697069656e740000000000000000000000000000000060648201526084016102ab565b5050565b604080516020810182526000815290517fe11013dd0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000109163e11013dd918491610590917f0000000000000000000000000000000000000000000000000000000000000000916188b891600401610748565b6000604051808303818588803b1580156105a957600080fd5b505af11580156105bd573d6000803e3d6000fd5b505050505050565b6000815180845260005b818110156105eb576020818501810151868301820152016105cf565b818111156105fd576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061064360208301846105c5565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600281106106b0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b602081016106c28284610679565b92915050565b60008219821115610702577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b84815273ffffffffffffffffffffffffffffffffffffffff8481166020830152831660408201526080810161073f6060830184610679565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600061073f60608301846105c556fea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(BaseFeeVaultStorageLayoutJSON), BaseFeeVaultStorageLayout); err != nil { + panic(err) + } + + layouts["BaseFeeVault"] = BaseFeeVaultStorageLayout + deployedBytecodes["BaseFeeVault"] = BaseFeeVaultDeployedBin +} diff --git a/op-bindings/bindings/blockoracle.go b/op-bindings/bindings/blockoracle.go new file mode 100644 index 000000000..686061c1a --- /dev/null +++ b/op-bindings/bindings/blockoracle.go @@ -0,0 +1,453 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// BlockOracleBlockInfo is an auto generated low-level Go binding around an user-defined struct. +type BlockOracleBlockInfo struct { + Hash [32]byte + ChildTimestamp uint64 +} + +// BlockOracleMetaData contains all meta data concerning the BlockOracle contract. +var BlockOracleMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"name\":\"BlockHashNotPresent\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"Hash\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"Timestamp\",\"name\":\"childTimestamp\",\"type\":\"uint64\"}],\"name\":\"Checkpoint\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"checkpoint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber_\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"load\",\"outputs\":[{\"components\":[{\"internalType\":\"Hash\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"Timestamp\",\"name\":\"childTimestamp\",\"type\":\"uint64\"}],\"internalType\":\"structBlockOracle.BlockInfo\",\"name\":\"blockInfo_\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b506102e7806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806399d548aa14610098578063c2c4c5c1146100d0575b600080fd5b6100826040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525081565b60405161008f9190610210565b60405180910390f35b6100ab6100a6366004610283565b6100e6565b604080518251815260209283015167ffffffffffffffff16928101929092520161008f565b6100d8610165565b60405190815260200161008f565b604080518082018252600080825260209182018190528381528082528281208351808501909452805480855260019091015467ffffffffffffffff169284019290925203610160576040517f37cf270500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600061017260014361029c565b60408051808201825282408082524267ffffffffffffffff81811660208086018281526000898152918290528782209651875551600190960180547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016969093169590951790915593519495509093909291849186917fb67ff58b33060fd371a35ae2d9f1c3cdaec9b8197969f6efe2594a1ff4ba68c691a4505090565b600060208083528351808285015260005b8181101561023d57858101830151858201604001528201610221565b8181111561024f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561029557600080fd5b5035919050565b6000828210156102d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50039056fea164736f6c634300080f000a", +} + +// BlockOracleABI is the input ABI used to generate the binding from. +// Deprecated: Use BlockOracleMetaData.ABI instead. +var BlockOracleABI = BlockOracleMetaData.ABI + +// BlockOracleBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use BlockOracleMetaData.Bin instead. +var BlockOracleBin = BlockOracleMetaData.Bin + +// DeployBlockOracle deploys a new Ethereum contract, binding an instance of BlockOracle to it. +func DeployBlockOracle(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *BlockOracle, error) { + parsed, err := BlockOracleMetaData.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(BlockOracleBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &BlockOracle{BlockOracleCaller: BlockOracleCaller{contract: contract}, BlockOracleTransactor: BlockOracleTransactor{contract: contract}, BlockOracleFilterer: BlockOracleFilterer{contract: contract}}, nil +} + +// BlockOracle is an auto generated Go binding around an Ethereum contract. +type BlockOracle struct { + BlockOracleCaller // Read-only binding to the contract + BlockOracleTransactor // Write-only binding to the contract + BlockOracleFilterer // Log filterer for contract events +} + +// BlockOracleCaller is an auto generated read-only Go binding around an Ethereum contract. +type BlockOracleCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BlockOracleTransactor is an auto generated write-only Go binding around an Ethereum contract. +type BlockOracleTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BlockOracleFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type BlockOracleFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BlockOracleSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type BlockOracleSession struct { + Contract *BlockOracle // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// BlockOracleCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type BlockOracleCallerSession struct { + Contract *BlockOracleCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// BlockOracleTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type BlockOracleTransactorSession struct { + Contract *BlockOracleTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// BlockOracleRaw is an auto generated low-level Go binding around an Ethereum contract. +type BlockOracleRaw struct { + Contract *BlockOracle // Generic contract binding to access the raw methods on +} + +// BlockOracleCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type BlockOracleCallerRaw struct { + Contract *BlockOracleCaller // Generic read-only contract binding to access the raw methods on +} + +// BlockOracleTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type BlockOracleTransactorRaw struct { + Contract *BlockOracleTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewBlockOracle creates a new instance of BlockOracle, bound to a specific deployed contract. +func NewBlockOracle(address common.Address, backend bind.ContractBackend) (*BlockOracle, error) { + contract, err := bindBlockOracle(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &BlockOracle{BlockOracleCaller: BlockOracleCaller{contract: contract}, BlockOracleTransactor: BlockOracleTransactor{contract: contract}, BlockOracleFilterer: BlockOracleFilterer{contract: contract}}, nil +} + +// NewBlockOracleCaller creates a new read-only instance of BlockOracle, bound to a specific deployed contract. +func NewBlockOracleCaller(address common.Address, caller bind.ContractCaller) (*BlockOracleCaller, error) { + contract, err := bindBlockOracle(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &BlockOracleCaller{contract: contract}, nil +} + +// NewBlockOracleTransactor creates a new write-only instance of BlockOracle, bound to a specific deployed contract. +func NewBlockOracleTransactor(address common.Address, transactor bind.ContractTransactor) (*BlockOracleTransactor, error) { + contract, err := bindBlockOracle(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &BlockOracleTransactor{contract: contract}, nil +} + +// NewBlockOracleFilterer creates a new log filterer instance of BlockOracle, bound to a specific deployed contract. +func NewBlockOracleFilterer(address common.Address, filterer bind.ContractFilterer) (*BlockOracleFilterer, error) { + contract, err := bindBlockOracle(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &BlockOracleFilterer{contract: contract}, nil +} + +// bindBlockOracle binds a generic wrapper to an already deployed contract. +func bindBlockOracle(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(BlockOracleABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_BlockOracle *BlockOracleRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _BlockOracle.Contract.BlockOracleCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_BlockOracle *BlockOracleRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BlockOracle.Contract.BlockOracleTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_BlockOracle *BlockOracleRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _BlockOracle.Contract.BlockOracleTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_BlockOracle *BlockOracleCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _BlockOracle.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_BlockOracle *BlockOracleTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BlockOracle.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_BlockOracle *BlockOracleTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _BlockOracle.Contract.contract.Transact(opts, method, params...) +} + +// Load is a free data retrieval call binding the contract method 0x99d548aa. +// +// Solidity: function load(uint256 _blockNumber) view returns((bytes32,uint64) blockInfo_) +func (_BlockOracle *BlockOracleCaller) Load(opts *bind.CallOpts, _blockNumber *big.Int) (BlockOracleBlockInfo, error) { + var out []interface{} + err := _BlockOracle.contract.Call(opts, &out, "load", _blockNumber) + + if err != nil { + return *new(BlockOracleBlockInfo), err + } + + out0 := *abi.ConvertType(out[0], new(BlockOracleBlockInfo)).(*BlockOracleBlockInfo) + + return out0, err + +} + +// Load is a free data retrieval call binding the contract method 0x99d548aa. +// +// Solidity: function load(uint256 _blockNumber) view returns((bytes32,uint64) blockInfo_) +func (_BlockOracle *BlockOracleSession) Load(_blockNumber *big.Int) (BlockOracleBlockInfo, error) { + return _BlockOracle.Contract.Load(&_BlockOracle.CallOpts, _blockNumber) +} + +// Load is a free data retrieval call binding the contract method 0x99d548aa. +// +// Solidity: function load(uint256 _blockNumber) view returns((bytes32,uint64) blockInfo_) +func (_BlockOracle *BlockOracleCallerSession) Load(_blockNumber *big.Int) (BlockOracleBlockInfo, error) { + return _BlockOracle.Contract.Load(&_BlockOracle.CallOpts, _blockNumber) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_BlockOracle *BlockOracleCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _BlockOracle.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_BlockOracle *BlockOracleSession) Version() (string, error) { + return _BlockOracle.Contract.Version(&_BlockOracle.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_BlockOracle *BlockOracleCallerSession) Version() (string, error) { + return _BlockOracle.Contract.Version(&_BlockOracle.CallOpts) +} + +// Checkpoint is a paid mutator transaction binding the contract method 0xc2c4c5c1. +// +// Solidity: function checkpoint() returns(uint256 blockNumber_) +func (_BlockOracle *BlockOracleTransactor) Checkpoint(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BlockOracle.contract.Transact(opts, "checkpoint") +} + +// Checkpoint is a paid mutator transaction binding the contract method 0xc2c4c5c1. +// +// Solidity: function checkpoint() returns(uint256 blockNumber_) +func (_BlockOracle *BlockOracleSession) Checkpoint() (*types.Transaction, error) { + return _BlockOracle.Contract.Checkpoint(&_BlockOracle.TransactOpts) +} + +// Checkpoint is a paid mutator transaction binding the contract method 0xc2c4c5c1. +// +// Solidity: function checkpoint() returns(uint256 blockNumber_) +func (_BlockOracle *BlockOracleTransactorSession) Checkpoint() (*types.Transaction, error) { + return _BlockOracle.Contract.Checkpoint(&_BlockOracle.TransactOpts) +} + +// BlockOracleCheckpointIterator is returned from FilterCheckpoint and is used to iterate over the raw logs and unpacked data for Checkpoint events raised by the BlockOracle contract. +type BlockOracleCheckpointIterator struct { + Event *BlockOracleCheckpoint // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *BlockOracleCheckpointIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(BlockOracleCheckpoint) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(BlockOracleCheckpoint) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *BlockOracleCheckpointIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BlockOracleCheckpointIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BlockOracleCheckpoint represents a Checkpoint event raised by the BlockOracle contract. +type BlockOracleCheckpoint struct { + BlockNumber *big.Int + BlockHash [32]byte + ChildTimestamp uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCheckpoint is a free log retrieval operation binding the contract event 0xb67ff58b33060fd371a35ae2d9f1c3cdaec9b8197969f6efe2594a1ff4ba68c6. +// +// Solidity: event Checkpoint(uint256 indexed blockNumber, bytes32 indexed blockHash, uint64 indexed childTimestamp) +func (_BlockOracle *BlockOracleFilterer) FilterCheckpoint(opts *bind.FilterOpts, blockNumber []*big.Int, blockHash [][32]byte, childTimestamp []uint64) (*BlockOracleCheckpointIterator, error) { + + var blockNumberRule []interface{} + for _, blockNumberItem := range blockNumber { + blockNumberRule = append(blockNumberRule, blockNumberItem) + } + var blockHashRule []interface{} + for _, blockHashItem := range blockHash { + blockHashRule = append(blockHashRule, blockHashItem) + } + var childTimestampRule []interface{} + for _, childTimestampItem := range childTimestamp { + childTimestampRule = append(childTimestampRule, childTimestampItem) + } + + logs, sub, err := _BlockOracle.contract.FilterLogs(opts, "Checkpoint", blockNumberRule, blockHashRule, childTimestampRule) + if err != nil { + return nil, err + } + return &BlockOracleCheckpointIterator{contract: _BlockOracle.contract, event: "Checkpoint", logs: logs, sub: sub}, nil +} + +// WatchCheckpoint is a free log subscription operation binding the contract event 0xb67ff58b33060fd371a35ae2d9f1c3cdaec9b8197969f6efe2594a1ff4ba68c6. +// +// Solidity: event Checkpoint(uint256 indexed blockNumber, bytes32 indexed blockHash, uint64 indexed childTimestamp) +func (_BlockOracle *BlockOracleFilterer) WatchCheckpoint(opts *bind.WatchOpts, sink chan<- *BlockOracleCheckpoint, blockNumber []*big.Int, blockHash [][32]byte, childTimestamp []uint64) (event.Subscription, error) { + + var blockNumberRule []interface{} + for _, blockNumberItem := range blockNumber { + blockNumberRule = append(blockNumberRule, blockNumberItem) + } + var blockHashRule []interface{} + for _, blockHashItem := range blockHash { + blockHashRule = append(blockHashRule, blockHashItem) + } + var childTimestampRule []interface{} + for _, childTimestampItem := range childTimestamp { + childTimestampRule = append(childTimestampRule, childTimestampItem) + } + + logs, sub, err := _BlockOracle.contract.WatchLogs(opts, "Checkpoint", blockNumberRule, blockHashRule, childTimestampRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(BlockOracleCheckpoint) + if err := _BlockOracle.contract.UnpackLog(event, "Checkpoint", 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 +} + +// ParseCheckpoint is a log parse operation binding the contract event 0xb67ff58b33060fd371a35ae2d9f1c3cdaec9b8197969f6efe2594a1ff4ba68c6. +// +// Solidity: event Checkpoint(uint256 indexed blockNumber, bytes32 indexed blockHash, uint64 indexed childTimestamp) +func (_BlockOracle *BlockOracleFilterer) ParseCheckpoint(log types.Log) (*BlockOracleCheckpoint, error) { + event := new(BlockOracleCheckpoint) + if err := _BlockOracle.contract.UnpackLog(event, "Checkpoint", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-bindings/bindings/blockoracle_more.go b/op-bindings/bindings/blockoracle_more.go new file mode 100644 index 000000000..e50c0c007 --- /dev/null +++ b/op-bindings/bindings/blockoracle_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const BlockOracleStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/dispute/BlockOracle.sol:BlockOracle\",\"label\":\"blocks\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_mapping(t_uint256,t_struct(BlockInfo)1001_storage)\"}],\"types\":{\"t_mapping(t_uint256,t_struct(BlockInfo)1001_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e struct BlockOracle.BlockInfo)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_struct(BlockInfo)1001_storage\"},\"t_struct(BlockInfo)1001_storage\":{\"encoding\":\"inplace\",\"label\":\"struct BlockOracle.BlockInfo\",\"numberOfBytes\":\"64\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_userDefinedValueType(Hash)1002\":{\"encoding\":\"inplace\",\"label\":\"Hash\",\"numberOfBytes\":\"32\"},\"t_userDefinedValueType(Timestamp)1003\":{\"encoding\":\"inplace\",\"label\":\"Timestamp\",\"numberOfBytes\":\"8\"}}}" + +var BlockOracleStorageLayout = new(solc.StorageLayout) + +var BlockOracleDeployedBin = "0x608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806399d548aa14610098578063c2c4c5c1146100d0575b600080fd5b6100826040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525081565b60405161008f9190610210565b60405180910390f35b6100ab6100a6366004610283565b6100e6565b604080518251815260209283015167ffffffffffffffff16928101929092520161008f565b6100d8610165565b60405190815260200161008f565b604080518082018252600080825260209182018190528381528082528281208351808501909452805480855260019091015467ffffffffffffffff169284019290925203610160576040517f37cf270500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600061017260014361029c565b60408051808201825282408082524267ffffffffffffffff81811660208086018281526000898152918290528782209651875551600190960180547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016969093169590951790915593519495509093909291849186917fb67ff58b33060fd371a35ae2d9f1c3cdaec9b8197969f6efe2594a1ff4ba68c691a4505090565b600060208083528351808285015260005b8181101561023d57858101830151858201604001528201610221565b8181111561024f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561029557600080fd5b5035919050565b6000828210156102d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50039056fea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(BlockOracleStorageLayoutJSON), BlockOracleStorageLayout); err != nil { + panic(err) + } + + layouts["BlockOracle"] = BlockOracleStorageLayout + deployedBytecodes["BlockOracle"] = BlockOracleDeployedBin +} diff --git a/op-bindings/bindings/crossdomainmessenger.go b/op-bindings/bindings/crossdomainmessenger.go new file mode 100644 index 000000000..b70c4232a --- /dev/null +++ b/op-bindings/bindings/crossdomainmessenger.go @@ -0,0 +1,1371 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// CrossDomainMessengerMetaData contains all meta data concerning the CrossDomainMessenger contract. +var CrossDomainMessengerMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"FailedRelayedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"RelayedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"messageNonce\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"}],\"name\":\"SentMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SentMessageExtension1\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSAGE_VERSION\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_MESSENGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_CALL_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_RESERVED_GAS\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"}],\"name\":\"baseGas\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"failedMessages\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"relayMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"}],\"name\":\"sendMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"successfulMessages\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"xDomainMessageSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", +} + +// CrossDomainMessengerABI is the input ABI used to generate the binding from. +// Deprecated: Use CrossDomainMessengerMetaData.ABI instead. +var CrossDomainMessengerABI = CrossDomainMessengerMetaData.ABI + +// CrossDomainMessenger is an auto generated Go binding around an Ethereum contract. +type CrossDomainMessenger struct { + CrossDomainMessengerCaller // Read-only binding to the contract + CrossDomainMessengerTransactor // Write-only binding to the contract + CrossDomainMessengerFilterer // Log filterer for contract events +} + +// CrossDomainMessengerCaller is an auto generated read-only Go binding around an Ethereum contract. +type CrossDomainMessengerCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// CrossDomainMessengerTransactor is an auto generated write-only Go binding around an Ethereum contract. +type CrossDomainMessengerTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// CrossDomainMessengerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type CrossDomainMessengerFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// CrossDomainMessengerSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type CrossDomainMessengerSession struct { + Contract *CrossDomainMessenger // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// CrossDomainMessengerCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type CrossDomainMessengerCallerSession struct { + Contract *CrossDomainMessengerCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// CrossDomainMessengerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type CrossDomainMessengerTransactorSession struct { + Contract *CrossDomainMessengerTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// CrossDomainMessengerRaw is an auto generated low-level Go binding around an Ethereum contract. +type CrossDomainMessengerRaw struct { + Contract *CrossDomainMessenger // Generic contract binding to access the raw methods on +} + +// CrossDomainMessengerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type CrossDomainMessengerCallerRaw struct { + Contract *CrossDomainMessengerCaller // Generic read-only contract binding to access the raw methods on +} + +// CrossDomainMessengerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type CrossDomainMessengerTransactorRaw struct { + Contract *CrossDomainMessengerTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewCrossDomainMessenger creates a new instance of CrossDomainMessenger, bound to a specific deployed contract. +func NewCrossDomainMessenger(address common.Address, backend bind.ContractBackend) (*CrossDomainMessenger, error) { + contract, err := bindCrossDomainMessenger(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &CrossDomainMessenger{CrossDomainMessengerCaller: CrossDomainMessengerCaller{contract: contract}, CrossDomainMessengerTransactor: CrossDomainMessengerTransactor{contract: contract}, CrossDomainMessengerFilterer: CrossDomainMessengerFilterer{contract: contract}}, nil +} + +// NewCrossDomainMessengerCaller creates a new read-only instance of CrossDomainMessenger, bound to a specific deployed contract. +func NewCrossDomainMessengerCaller(address common.Address, caller bind.ContractCaller) (*CrossDomainMessengerCaller, error) { + contract, err := bindCrossDomainMessenger(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &CrossDomainMessengerCaller{contract: contract}, nil +} + +// NewCrossDomainMessengerTransactor creates a new write-only instance of CrossDomainMessenger, bound to a specific deployed contract. +func NewCrossDomainMessengerTransactor(address common.Address, transactor bind.ContractTransactor) (*CrossDomainMessengerTransactor, error) { + contract, err := bindCrossDomainMessenger(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &CrossDomainMessengerTransactor{contract: contract}, nil +} + +// NewCrossDomainMessengerFilterer creates a new log filterer instance of CrossDomainMessenger, bound to a specific deployed contract. +func NewCrossDomainMessengerFilterer(address common.Address, filterer bind.ContractFilterer) (*CrossDomainMessengerFilterer, error) { + contract, err := bindCrossDomainMessenger(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &CrossDomainMessengerFilterer{contract: contract}, nil +} + +// bindCrossDomainMessenger binds a generic wrapper to an already deployed contract. +func bindCrossDomainMessenger(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(CrossDomainMessengerABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_CrossDomainMessenger *CrossDomainMessengerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _CrossDomainMessenger.Contract.CrossDomainMessengerCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_CrossDomainMessenger *CrossDomainMessengerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CrossDomainMessenger.Contract.CrossDomainMessengerTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_CrossDomainMessenger *CrossDomainMessengerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _CrossDomainMessenger.Contract.CrossDomainMessengerTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_CrossDomainMessenger *CrossDomainMessengerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _CrossDomainMessenger.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_CrossDomainMessenger *CrossDomainMessengerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CrossDomainMessenger.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_CrossDomainMessenger *CrossDomainMessengerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _CrossDomainMessenger.Contract.contract.Transact(opts, method, params...) +} + +// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. +// +// Solidity: function MESSAGE_VERSION() view returns(uint16) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) MESSAGEVERSION(opts *bind.CallOpts) (uint16, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "MESSAGE_VERSION") + + if err != nil { + return *new(uint16), err + } + + out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) + + return out0, err + +} + +// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. +// +// Solidity: function MESSAGE_VERSION() view returns(uint16) +func (_CrossDomainMessenger *CrossDomainMessengerSession) MESSAGEVERSION() (uint16, error) { + return _CrossDomainMessenger.Contract.MESSAGEVERSION(&_CrossDomainMessenger.CallOpts) +} + +// MESSAGEVERSION is a free data retrieval call binding the contract method 0x3f827a5a. +// +// Solidity: function MESSAGE_VERSION() view returns(uint16) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) MESSAGEVERSION() (uint16, error) { + return _CrossDomainMessenger.Contract.MESSAGEVERSION(&_CrossDomainMessenger.CallOpts) +} + +// MINGASCALLDATAOVERHEAD is a free data retrieval call binding the contract method 0x028f85f7. +// +// Solidity: function MIN_GAS_CALLDATA_OVERHEAD() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) MINGASCALLDATAOVERHEAD(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "MIN_GAS_CALLDATA_OVERHEAD") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// MINGASCALLDATAOVERHEAD is a free data retrieval call binding the contract method 0x028f85f7. +// +// Solidity: function MIN_GAS_CALLDATA_OVERHEAD() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerSession) MINGASCALLDATAOVERHEAD() (uint64, error) { + return _CrossDomainMessenger.Contract.MINGASCALLDATAOVERHEAD(&_CrossDomainMessenger.CallOpts) +} + +// MINGASCALLDATAOVERHEAD is a free data retrieval call binding the contract method 0x028f85f7. +// +// Solidity: function MIN_GAS_CALLDATA_OVERHEAD() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) MINGASCALLDATAOVERHEAD() (uint64, error) { + return _CrossDomainMessenger.Contract.MINGASCALLDATAOVERHEAD(&_CrossDomainMessenger.CallOpts) +} + +// MINGASDYNAMICOVERHEADDENOMINATOR is a free data retrieval call binding the contract method 0x0c568498. +// +// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) MINGASDYNAMICOVERHEADDENOMINATOR(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// MINGASDYNAMICOVERHEADDENOMINATOR is a free data retrieval call binding the contract method 0x0c568498. +// +// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerSession) MINGASDYNAMICOVERHEADDENOMINATOR() (uint64, error) { + return _CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADDENOMINATOR(&_CrossDomainMessenger.CallOpts) +} + +// MINGASDYNAMICOVERHEADDENOMINATOR is a free data retrieval call binding the contract method 0x0c568498. +// +// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) MINGASDYNAMICOVERHEADDENOMINATOR() (uint64, error) { + return _CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADDENOMINATOR(&_CrossDomainMessenger.CallOpts) +} + +// MINGASDYNAMICOVERHEADNUMERATOR is a free data retrieval call binding the contract method 0x2828d7e8. +// +// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) MINGASDYNAMICOVERHEADNUMERATOR(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// MINGASDYNAMICOVERHEADNUMERATOR is a free data retrieval call binding the contract method 0x2828d7e8. +// +// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerSession) MINGASDYNAMICOVERHEADNUMERATOR() (uint64, error) { + return _CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADNUMERATOR(&_CrossDomainMessenger.CallOpts) +} + +// MINGASDYNAMICOVERHEADNUMERATOR is a free data retrieval call binding the contract method 0x2828d7e8. +// +// Solidity: function MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) MINGASDYNAMICOVERHEADNUMERATOR() (uint64, error) { + return _CrossDomainMessenger.Contract.MINGASDYNAMICOVERHEADNUMERATOR(&_CrossDomainMessenger.CallOpts) +} + +// OTHERMESSENGER is a free data retrieval call binding the contract method 0x9fce812c. +// +// Solidity: function OTHER_MESSENGER() view returns(address) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) OTHERMESSENGER(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "OTHER_MESSENGER") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OTHERMESSENGER is a free data retrieval call binding the contract method 0x9fce812c. +// +// Solidity: function OTHER_MESSENGER() view returns(address) +func (_CrossDomainMessenger *CrossDomainMessengerSession) OTHERMESSENGER() (common.Address, error) { + return _CrossDomainMessenger.Contract.OTHERMESSENGER(&_CrossDomainMessenger.CallOpts) +} + +// OTHERMESSENGER is a free data retrieval call binding the contract method 0x9fce812c. +// +// Solidity: function OTHER_MESSENGER() view returns(address) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) OTHERMESSENGER() (common.Address, error) { + return _CrossDomainMessenger.Contract.OTHERMESSENGER(&_CrossDomainMessenger.CallOpts) +} + +// RELAYCALLOVERHEAD is a free data retrieval call binding the contract method 0x4c1d6a69. +// +// Solidity: function RELAY_CALL_OVERHEAD() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) RELAYCALLOVERHEAD(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "RELAY_CALL_OVERHEAD") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// RELAYCALLOVERHEAD is a free data retrieval call binding the contract method 0x4c1d6a69. +// +// Solidity: function RELAY_CALL_OVERHEAD() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerSession) RELAYCALLOVERHEAD() (uint64, error) { + return _CrossDomainMessenger.Contract.RELAYCALLOVERHEAD(&_CrossDomainMessenger.CallOpts) +} + +// RELAYCALLOVERHEAD is a free data retrieval call binding the contract method 0x4c1d6a69. +// +// Solidity: function RELAY_CALL_OVERHEAD() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) RELAYCALLOVERHEAD() (uint64, error) { + return _CrossDomainMessenger.Contract.RELAYCALLOVERHEAD(&_CrossDomainMessenger.CallOpts) +} + +// RELAYCONSTANTOVERHEAD is a free data retrieval call binding the contract method 0x83a74074. +// +// Solidity: function RELAY_CONSTANT_OVERHEAD() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) RELAYCONSTANTOVERHEAD(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "RELAY_CONSTANT_OVERHEAD") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// RELAYCONSTANTOVERHEAD is a free data retrieval call binding the contract method 0x83a74074. +// +// Solidity: function RELAY_CONSTANT_OVERHEAD() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerSession) RELAYCONSTANTOVERHEAD() (uint64, error) { + return _CrossDomainMessenger.Contract.RELAYCONSTANTOVERHEAD(&_CrossDomainMessenger.CallOpts) +} + +// RELAYCONSTANTOVERHEAD is a free data retrieval call binding the contract method 0x83a74074. +// +// Solidity: function RELAY_CONSTANT_OVERHEAD() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) RELAYCONSTANTOVERHEAD() (uint64, error) { + return _CrossDomainMessenger.Contract.RELAYCONSTANTOVERHEAD(&_CrossDomainMessenger.CallOpts) +} + +// RELAYGASCHECKBUFFER is a free data retrieval call binding the contract method 0x5644cfdf. +// +// Solidity: function RELAY_GAS_CHECK_BUFFER() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) RELAYGASCHECKBUFFER(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "RELAY_GAS_CHECK_BUFFER") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// RELAYGASCHECKBUFFER is a free data retrieval call binding the contract method 0x5644cfdf. +// +// Solidity: function RELAY_GAS_CHECK_BUFFER() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerSession) RELAYGASCHECKBUFFER() (uint64, error) { + return _CrossDomainMessenger.Contract.RELAYGASCHECKBUFFER(&_CrossDomainMessenger.CallOpts) +} + +// RELAYGASCHECKBUFFER is a free data retrieval call binding the contract method 0x5644cfdf. +// +// Solidity: function RELAY_GAS_CHECK_BUFFER() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) RELAYGASCHECKBUFFER() (uint64, error) { + return _CrossDomainMessenger.Contract.RELAYGASCHECKBUFFER(&_CrossDomainMessenger.CallOpts) +} + +// RELAYRESERVEDGAS is a free data retrieval call binding the contract method 0x8cbeeef2. +// +// Solidity: function RELAY_RESERVED_GAS() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) RELAYRESERVEDGAS(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "RELAY_RESERVED_GAS") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// RELAYRESERVEDGAS is a free data retrieval call binding the contract method 0x8cbeeef2. +// +// Solidity: function RELAY_RESERVED_GAS() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerSession) RELAYRESERVEDGAS() (uint64, error) { + return _CrossDomainMessenger.Contract.RELAYRESERVEDGAS(&_CrossDomainMessenger.CallOpts) +} + +// RELAYRESERVEDGAS is a free data retrieval call binding the contract method 0x8cbeeef2. +// +// Solidity: function RELAY_RESERVED_GAS() view returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) RELAYRESERVEDGAS() (uint64, error) { + return _CrossDomainMessenger.Contract.RELAYRESERVEDGAS(&_CrossDomainMessenger.CallOpts) +} + +// BaseGas is a free data retrieval call binding the contract method 0xb28ade25. +// +// Solidity: function baseGas(bytes _message, uint32 _minGasLimit) pure returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) BaseGas(opts *bind.CallOpts, _message []byte, _minGasLimit uint32) (uint64, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "baseGas", _message, _minGasLimit) + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// BaseGas is a free data retrieval call binding the contract method 0xb28ade25. +// +// Solidity: function baseGas(bytes _message, uint32 _minGasLimit) pure returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerSession) BaseGas(_message []byte, _minGasLimit uint32) (uint64, error) { + return _CrossDomainMessenger.Contract.BaseGas(&_CrossDomainMessenger.CallOpts, _message, _minGasLimit) +} + +// BaseGas is a free data retrieval call binding the contract method 0xb28ade25. +// +// Solidity: function baseGas(bytes _message, uint32 _minGasLimit) pure returns(uint64) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) BaseGas(_message []byte, _minGasLimit uint32) (uint64, error) { + return _CrossDomainMessenger.Contract.BaseGas(&_CrossDomainMessenger.CallOpts, _message, _minGasLimit) +} + +// FailedMessages is a free data retrieval call binding the contract method 0xa4e7f8bd. +// +// Solidity: function failedMessages(bytes32 ) view returns(bool) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) FailedMessages(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "failedMessages", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// FailedMessages is a free data retrieval call binding the contract method 0xa4e7f8bd. +// +// Solidity: function failedMessages(bytes32 ) view returns(bool) +func (_CrossDomainMessenger *CrossDomainMessengerSession) FailedMessages(arg0 [32]byte) (bool, error) { + return _CrossDomainMessenger.Contract.FailedMessages(&_CrossDomainMessenger.CallOpts, arg0) +} + +// FailedMessages is a free data retrieval call binding the contract method 0xa4e7f8bd. +// +// Solidity: function failedMessages(bytes32 ) view returns(bool) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) FailedMessages(arg0 [32]byte) (bool, error) { + return _CrossDomainMessenger.Contract.FailedMessages(&_CrossDomainMessenger.CallOpts, arg0) +} + +// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. +// +// Solidity: function messageNonce() view returns(uint256) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) MessageNonce(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "messageNonce") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. +// +// Solidity: function messageNonce() view returns(uint256) +func (_CrossDomainMessenger *CrossDomainMessengerSession) MessageNonce() (*big.Int, error) { + return _CrossDomainMessenger.Contract.MessageNonce(&_CrossDomainMessenger.CallOpts) +} + +// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. +// +// Solidity: function messageNonce() view returns(uint256) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) MessageNonce() (*big.Int, error) { + return _CrossDomainMessenger.Contract.MessageNonce(&_CrossDomainMessenger.CallOpts) +} + +// SuccessfulMessages is a free data retrieval call binding the contract method 0xb1b1b209. +// +// Solidity: function successfulMessages(bytes32 ) view returns(bool) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) SuccessfulMessages(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "successfulMessages", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// SuccessfulMessages is a free data retrieval call binding the contract method 0xb1b1b209. +// +// Solidity: function successfulMessages(bytes32 ) view returns(bool) +func (_CrossDomainMessenger *CrossDomainMessengerSession) SuccessfulMessages(arg0 [32]byte) (bool, error) { + return _CrossDomainMessenger.Contract.SuccessfulMessages(&_CrossDomainMessenger.CallOpts, arg0) +} + +// SuccessfulMessages is a free data retrieval call binding the contract method 0xb1b1b209. +// +// Solidity: function successfulMessages(bytes32 ) view returns(bool) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) SuccessfulMessages(arg0 [32]byte) (bool, error) { + return _CrossDomainMessenger.Contract.SuccessfulMessages(&_CrossDomainMessenger.CallOpts, arg0) +} + +// XDomainMessageSender is a free data retrieval call binding the contract method 0x6e296e45. +// +// Solidity: function xDomainMessageSender() view returns(address) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) XDomainMessageSender(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "xDomainMessageSender") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// XDomainMessageSender is a free data retrieval call binding the contract method 0x6e296e45. +// +// Solidity: function xDomainMessageSender() view returns(address) +func (_CrossDomainMessenger *CrossDomainMessengerSession) XDomainMessageSender() (common.Address, error) { + return _CrossDomainMessenger.Contract.XDomainMessageSender(&_CrossDomainMessenger.CallOpts) +} + +// XDomainMessageSender is a free data retrieval call binding the contract method 0x6e296e45. +// +// Solidity: function xDomainMessageSender() view returns(address) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) XDomainMessageSender() (common.Address, error) { + return _CrossDomainMessenger.Contract.XDomainMessageSender(&_CrossDomainMessenger.CallOpts) +} + +// RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. +// +// Solidity: function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes _message) payable returns() +func (_CrossDomainMessenger *CrossDomainMessengerTransactor) RelayMessage(opts *bind.TransactOpts, _nonce *big.Int, _sender common.Address, _target common.Address, _value *big.Int, _minGasLimit *big.Int, _message []byte) (*types.Transaction, error) { + return _CrossDomainMessenger.contract.Transact(opts, "relayMessage", _nonce, _sender, _target, _value, _minGasLimit, _message) +} + +// RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. +// +// Solidity: function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes _message) payable returns() +func (_CrossDomainMessenger *CrossDomainMessengerSession) RelayMessage(_nonce *big.Int, _sender common.Address, _target common.Address, _value *big.Int, _minGasLimit *big.Int, _message []byte) (*types.Transaction, error) { + return _CrossDomainMessenger.Contract.RelayMessage(&_CrossDomainMessenger.TransactOpts, _nonce, _sender, _target, _value, _minGasLimit, _message) +} + +// RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. +// +// Solidity: function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes _message) payable returns() +func (_CrossDomainMessenger *CrossDomainMessengerTransactorSession) RelayMessage(_nonce *big.Int, _sender common.Address, _target common.Address, _value *big.Int, _minGasLimit *big.Int, _message []byte) (*types.Transaction, error) { + return _CrossDomainMessenger.Contract.RelayMessage(&_CrossDomainMessenger.TransactOpts, _nonce, _sender, _target, _value, _minGasLimit, _message) +} + +// SendMessage is a paid mutator transaction binding the contract method 0x3dbb202b. +// +// Solidity: function sendMessage(address _target, bytes _message, uint32 _minGasLimit) payable returns() +func (_CrossDomainMessenger *CrossDomainMessengerTransactor) SendMessage(opts *bind.TransactOpts, _target common.Address, _message []byte, _minGasLimit uint32) (*types.Transaction, error) { + return _CrossDomainMessenger.contract.Transact(opts, "sendMessage", _target, _message, _minGasLimit) +} + +// SendMessage is a paid mutator transaction binding the contract method 0x3dbb202b. +// +// Solidity: function sendMessage(address _target, bytes _message, uint32 _minGasLimit) payable returns() +func (_CrossDomainMessenger *CrossDomainMessengerSession) SendMessage(_target common.Address, _message []byte, _minGasLimit uint32) (*types.Transaction, error) { + return _CrossDomainMessenger.Contract.SendMessage(&_CrossDomainMessenger.TransactOpts, _target, _message, _minGasLimit) +} + +// SendMessage is a paid mutator transaction binding the contract method 0x3dbb202b. +// +// Solidity: function sendMessage(address _target, bytes _message, uint32 _minGasLimit) payable returns() +func (_CrossDomainMessenger *CrossDomainMessengerTransactorSession) SendMessage(_target common.Address, _message []byte, _minGasLimit uint32) (*types.Transaction, error) { + return _CrossDomainMessenger.Contract.SendMessage(&_CrossDomainMessenger.TransactOpts, _target, _message, _minGasLimit) +} + +// CrossDomainMessengerFailedRelayedMessageIterator is returned from FilterFailedRelayedMessage and is used to iterate over the raw logs and unpacked data for FailedRelayedMessage events raised by the CrossDomainMessenger contract. +type CrossDomainMessengerFailedRelayedMessageIterator struct { + Event *CrossDomainMessengerFailedRelayedMessage // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *CrossDomainMessengerFailedRelayedMessageIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(CrossDomainMessengerFailedRelayedMessage) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(CrossDomainMessengerFailedRelayedMessage) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *CrossDomainMessengerFailedRelayedMessageIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *CrossDomainMessengerFailedRelayedMessageIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// CrossDomainMessengerFailedRelayedMessage represents a FailedRelayedMessage event raised by the CrossDomainMessenger contract. +type CrossDomainMessengerFailedRelayedMessage struct { + MsgHash [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterFailedRelayedMessage is a free log retrieval operation binding the contract event 0x99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f. +// +// Solidity: event FailedRelayedMessage(bytes32 indexed msgHash) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) FilterFailedRelayedMessage(opts *bind.FilterOpts, msgHash [][32]byte) (*CrossDomainMessengerFailedRelayedMessageIterator, error) { + + var msgHashRule []interface{} + for _, msgHashItem := range msgHash { + msgHashRule = append(msgHashRule, msgHashItem) + } + + logs, sub, err := _CrossDomainMessenger.contract.FilterLogs(opts, "FailedRelayedMessage", msgHashRule) + if err != nil { + return nil, err + } + return &CrossDomainMessengerFailedRelayedMessageIterator{contract: _CrossDomainMessenger.contract, event: "FailedRelayedMessage", logs: logs, sub: sub}, nil +} + +// WatchFailedRelayedMessage is a free log subscription operation binding the contract event 0x99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f. +// +// Solidity: event FailedRelayedMessage(bytes32 indexed msgHash) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) WatchFailedRelayedMessage(opts *bind.WatchOpts, sink chan<- *CrossDomainMessengerFailedRelayedMessage, msgHash [][32]byte) (event.Subscription, error) { + + var msgHashRule []interface{} + for _, msgHashItem := range msgHash { + msgHashRule = append(msgHashRule, msgHashItem) + } + + logs, sub, err := _CrossDomainMessenger.contract.WatchLogs(opts, "FailedRelayedMessage", msgHashRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(CrossDomainMessengerFailedRelayedMessage) + if err := _CrossDomainMessenger.contract.UnpackLog(event, "FailedRelayedMessage", 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 +} + +// ParseFailedRelayedMessage is a log parse operation binding the contract event 0x99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f. +// +// Solidity: event FailedRelayedMessage(bytes32 indexed msgHash) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) ParseFailedRelayedMessage(log types.Log) (*CrossDomainMessengerFailedRelayedMessage, error) { + event := new(CrossDomainMessengerFailedRelayedMessage) + if err := _CrossDomainMessenger.contract.UnpackLog(event, "FailedRelayedMessage", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// CrossDomainMessengerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the CrossDomainMessenger contract. +type CrossDomainMessengerInitializedIterator struct { + Event *CrossDomainMessengerInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *CrossDomainMessengerInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(CrossDomainMessengerInitialized) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(CrossDomainMessengerInitialized) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *CrossDomainMessengerInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *CrossDomainMessengerInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// CrossDomainMessengerInitialized represents a Initialized event raised by the CrossDomainMessenger contract. +type CrossDomainMessengerInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) FilterInitialized(opts *bind.FilterOpts) (*CrossDomainMessengerInitializedIterator, error) { + + logs, sub, err := _CrossDomainMessenger.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &CrossDomainMessengerInitializedIterator{contract: _CrossDomainMessenger.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *CrossDomainMessengerInitialized) (event.Subscription, error) { + + logs, sub, err := _CrossDomainMessenger.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: + // New log arrived, parse the event and forward to the user + event := new(CrossDomainMessengerInitialized) + if err := _CrossDomainMessenger.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 +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) ParseInitialized(log types.Log) (*CrossDomainMessengerInitialized, error) { + event := new(CrossDomainMessengerInitialized) + if err := _CrossDomainMessenger.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// CrossDomainMessengerRelayedMessageIterator is returned from FilterRelayedMessage and is used to iterate over the raw logs and unpacked data for RelayedMessage events raised by the CrossDomainMessenger contract. +type CrossDomainMessengerRelayedMessageIterator struct { + Event *CrossDomainMessengerRelayedMessage // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *CrossDomainMessengerRelayedMessageIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(CrossDomainMessengerRelayedMessage) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(CrossDomainMessengerRelayedMessage) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *CrossDomainMessengerRelayedMessageIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *CrossDomainMessengerRelayedMessageIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// CrossDomainMessengerRelayedMessage represents a RelayedMessage event raised by the CrossDomainMessenger contract. +type CrossDomainMessengerRelayedMessage struct { + MsgHash [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRelayedMessage is a free log retrieval operation binding the contract event 0x4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c. +// +// Solidity: event RelayedMessage(bytes32 indexed msgHash) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) FilterRelayedMessage(opts *bind.FilterOpts, msgHash [][32]byte) (*CrossDomainMessengerRelayedMessageIterator, error) { + + var msgHashRule []interface{} + for _, msgHashItem := range msgHash { + msgHashRule = append(msgHashRule, msgHashItem) + } + + logs, sub, err := _CrossDomainMessenger.contract.FilterLogs(opts, "RelayedMessage", msgHashRule) + if err != nil { + return nil, err + } + return &CrossDomainMessengerRelayedMessageIterator{contract: _CrossDomainMessenger.contract, event: "RelayedMessage", logs: logs, sub: sub}, nil +} + +// WatchRelayedMessage is a free log subscription operation binding the contract event 0x4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c. +// +// Solidity: event RelayedMessage(bytes32 indexed msgHash) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) WatchRelayedMessage(opts *bind.WatchOpts, sink chan<- *CrossDomainMessengerRelayedMessage, msgHash [][32]byte) (event.Subscription, error) { + + var msgHashRule []interface{} + for _, msgHashItem := range msgHash { + msgHashRule = append(msgHashRule, msgHashItem) + } + + logs, sub, err := _CrossDomainMessenger.contract.WatchLogs(opts, "RelayedMessage", msgHashRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(CrossDomainMessengerRelayedMessage) + if err := _CrossDomainMessenger.contract.UnpackLog(event, "RelayedMessage", 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 +} + +// ParseRelayedMessage is a log parse operation binding the contract event 0x4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c. +// +// Solidity: event RelayedMessage(bytes32 indexed msgHash) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) ParseRelayedMessage(log types.Log) (*CrossDomainMessengerRelayedMessage, error) { + event := new(CrossDomainMessengerRelayedMessage) + if err := _CrossDomainMessenger.contract.UnpackLog(event, "RelayedMessage", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// CrossDomainMessengerSentMessageIterator is returned from FilterSentMessage and is used to iterate over the raw logs and unpacked data for SentMessage events raised by the CrossDomainMessenger contract. +type CrossDomainMessengerSentMessageIterator struct { + Event *CrossDomainMessengerSentMessage // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *CrossDomainMessengerSentMessageIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(CrossDomainMessengerSentMessage) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(CrossDomainMessengerSentMessage) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *CrossDomainMessengerSentMessageIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *CrossDomainMessengerSentMessageIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// CrossDomainMessengerSentMessage represents a SentMessage event raised by the CrossDomainMessenger contract. +type CrossDomainMessengerSentMessage struct { + Target common.Address + Sender common.Address + Message []byte + MessageNonce *big.Int + GasLimit *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSentMessage is a free log retrieval operation binding the contract event 0xcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a. +// +// Solidity: event SentMessage(address indexed target, address sender, bytes message, uint256 messageNonce, uint256 gasLimit) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) FilterSentMessage(opts *bind.FilterOpts, target []common.Address) (*CrossDomainMessengerSentMessageIterator, error) { + + var targetRule []interface{} + for _, targetItem := range target { + targetRule = append(targetRule, targetItem) + } + + logs, sub, err := _CrossDomainMessenger.contract.FilterLogs(opts, "SentMessage", targetRule) + if err != nil { + return nil, err + } + return &CrossDomainMessengerSentMessageIterator{contract: _CrossDomainMessenger.contract, event: "SentMessage", logs: logs, sub: sub}, nil +} + +// WatchSentMessage is a free log subscription operation binding the contract event 0xcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a. +// +// Solidity: event SentMessage(address indexed target, address sender, bytes message, uint256 messageNonce, uint256 gasLimit) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) WatchSentMessage(opts *bind.WatchOpts, sink chan<- *CrossDomainMessengerSentMessage, target []common.Address) (event.Subscription, error) { + + var targetRule []interface{} + for _, targetItem := range target { + targetRule = append(targetRule, targetItem) + } + + logs, sub, err := _CrossDomainMessenger.contract.WatchLogs(opts, "SentMessage", targetRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(CrossDomainMessengerSentMessage) + if err := _CrossDomainMessenger.contract.UnpackLog(event, "SentMessage", 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 +} + +// ParseSentMessage is a log parse operation binding the contract event 0xcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a. +// +// Solidity: event SentMessage(address indexed target, address sender, bytes message, uint256 messageNonce, uint256 gasLimit) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) ParseSentMessage(log types.Log) (*CrossDomainMessengerSentMessage, error) { + event := new(CrossDomainMessengerSentMessage) + if err := _CrossDomainMessenger.contract.UnpackLog(event, "SentMessage", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// CrossDomainMessengerSentMessageExtension1Iterator is returned from FilterSentMessageExtension1 and is used to iterate over the raw logs and unpacked data for SentMessageExtension1 events raised by the CrossDomainMessenger contract. +type CrossDomainMessengerSentMessageExtension1Iterator struct { + Event *CrossDomainMessengerSentMessageExtension1 // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *CrossDomainMessengerSentMessageExtension1Iterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(CrossDomainMessengerSentMessageExtension1) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(CrossDomainMessengerSentMessageExtension1) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *CrossDomainMessengerSentMessageExtension1Iterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *CrossDomainMessengerSentMessageExtension1Iterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// CrossDomainMessengerSentMessageExtension1 represents a SentMessageExtension1 event raised by the CrossDomainMessenger contract. +type CrossDomainMessengerSentMessageExtension1 struct { + Sender common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSentMessageExtension1 is a free log retrieval operation binding the contract event 0x8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d546. +// +// Solidity: event SentMessageExtension1(address indexed sender, uint256 value) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) FilterSentMessageExtension1(opts *bind.FilterOpts, sender []common.Address) (*CrossDomainMessengerSentMessageExtension1Iterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _CrossDomainMessenger.contract.FilterLogs(opts, "SentMessageExtension1", senderRule) + if err != nil { + return nil, err + } + return &CrossDomainMessengerSentMessageExtension1Iterator{contract: _CrossDomainMessenger.contract, event: "SentMessageExtension1", logs: logs, sub: sub}, nil +} + +// WatchSentMessageExtension1 is a free log subscription operation binding the contract event 0x8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d546. +// +// Solidity: event SentMessageExtension1(address indexed sender, uint256 value) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) WatchSentMessageExtension1(opts *bind.WatchOpts, sink chan<- *CrossDomainMessengerSentMessageExtension1, sender []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _CrossDomainMessenger.contract.WatchLogs(opts, "SentMessageExtension1", senderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(CrossDomainMessengerSentMessageExtension1) + if err := _CrossDomainMessenger.contract.UnpackLog(event, "SentMessageExtension1", 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 +} + +// ParseSentMessageExtension1 is a log parse operation binding the contract event 0x8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d546. +// +// Solidity: event SentMessageExtension1(address indexed sender, uint256 value) +func (_CrossDomainMessenger *CrossDomainMessengerFilterer) ParseSentMessageExtension1(log types.Log) (*CrossDomainMessengerSentMessageExtension1, error) { + event := new(CrossDomainMessengerSentMessageExtension1) + if err := _CrossDomainMessenger.contract.UnpackLog(event, "SentMessageExtension1", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-bindings/bindings/crossdomainmessenger_more.go b/op-bindings/bindings/crossdomainmessenger_more.go new file mode 100644 index 000000000..a0134cebf --- /dev/null +++ b/op-bindings/bindings/crossdomainmessenger_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const CrossDomainMessengerStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/universal/CrossDomainMessenger.sol:CrossDomainMessenger\",\"label\":\"spacer_0_0_20\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_address\"},{\"astId\":1001,\"contract\":\"src/universal/CrossDomainMessenger.sol:CrossDomainMessenger\",\"label\":\"_initialized\",\"offset\":20,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1002,\"contract\":\"src/universal/CrossDomainMessenger.sol:CrossDomainMessenger\",\"label\":\"_initializing\",\"offset\":21,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1003,\"contract\":\"src/universal/CrossDomainMessenger.sol:CrossDomainMessenger\",\"label\":\"spacer_1_0_1600\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)50_storage\"},{\"astId\":1004,\"contract\":\"src/universal/CrossDomainMessenger.sol:CrossDomainMessenger\",\"label\":\"spacer_51_0_20\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_address\"},{\"astId\":1005,\"contract\":\"src/universal/CrossDomainMessenger.sol:CrossDomainMessenger\",\"label\":\"spacer_52_0_1568\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_array(t_uint256)49_storage\"},{\"astId\":1006,\"contract\":\"src/universal/CrossDomainMessenger.sol:CrossDomainMessenger\",\"label\":\"spacer_101_0_1\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_bool\"},{\"astId\":1007,\"contract\":\"src/universal/CrossDomainMessenger.sol:CrossDomainMessenger\",\"label\":\"spacer_102_0_1568\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_array(t_uint256)49_storage\"},{\"astId\":1008,\"contract\":\"src/universal/CrossDomainMessenger.sol:CrossDomainMessenger\",\"label\":\"spacer_151_0_32\",\"offset\":0,\"slot\":\"151\",\"type\":\"t_uint256\"},{\"astId\":1009,\"contract\":\"src/universal/CrossDomainMessenger.sol:CrossDomainMessenger\",\"label\":\"spacer_152_0_1568\",\"offset\":0,\"slot\":\"152\",\"type\":\"t_array(t_uint256)49_storage\"},{\"astId\":1010,\"contract\":\"src/universal/CrossDomainMessenger.sol:CrossDomainMessenger\",\"label\":\"spacer_201_0_32\",\"offset\":0,\"slot\":\"201\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1011,\"contract\":\"src/universal/CrossDomainMessenger.sol:CrossDomainMessenger\",\"label\":\"spacer_202_0_32\",\"offset\":0,\"slot\":\"202\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1012,\"contract\":\"src/universal/CrossDomainMessenger.sol:CrossDomainMessenger\",\"label\":\"successfulMessages\",\"offset\":0,\"slot\":\"203\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1013,\"contract\":\"src/universal/CrossDomainMessenger.sol:CrossDomainMessenger\",\"label\":\"xDomainMsgSender\",\"offset\":0,\"slot\":\"204\",\"type\":\"t_address\"},{\"astId\":1014,\"contract\":\"src/universal/CrossDomainMessenger.sol:CrossDomainMessenger\",\"label\":\"msgNonce\",\"offset\":0,\"slot\":\"205\",\"type\":\"t_uint240\"},{\"astId\":1015,\"contract\":\"src/universal/CrossDomainMessenger.sol:CrossDomainMessenger\",\"label\":\"failedMessages\",\"offset\":0,\"slot\":\"206\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1016,\"contract\":\"src/universal/CrossDomainMessenger.sol:CrossDomainMessenger\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"207\",\"type\":\"t_array(t_uint256)42_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)42_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[42]\",\"numberOfBytes\":\"1344\",\"base\":\"t_uint256\"},\"t_array(t_uint256)49_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\",\"base\":\"t_uint256\"},\"t_array(t_uint256)50_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\",\"base\":\"t_uint256\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_bytes32,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_bool\"},\"t_uint240\":{\"encoding\":\"inplace\",\"label\":\"uint240\",\"numberOfBytes\":\"30\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" + +var CrossDomainMessengerStorageLayout = new(solc.StorageLayout) + +var CrossDomainMessengerDeployedBin = "0x" + +func init() { + if err := json.Unmarshal([]byte(CrossDomainMessengerStorageLayoutJSON), CrossDomainMessengerStorageLayout); err != nil { + panic(err) + } + + layouts["CrossDomainMessenger"] = CrossDomainMessengerStorageLayout + deployedBytecodes["CrossDomainMessenger"] = CrossDomainMessengerDeployedBin +} diff --git a/op-bindings/bindings/delayedvetoable.go b/op-bindings/bindings/delayedvetoable.go new file mode 100644 index 000000000..0166fdc68 --- /dev/null +++ b/op-bindings/bindings/delayedvetoable.go @@ -0,0 +1,928 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// DelayedVetoableMetaData contains all meta data concerning the DelayedVetoable contract. +var DelayedVetoableMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vetoer_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initiator_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatingDelay_\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyDelayed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ForwardingEarly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TargetUnitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"expected\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actual\",\"type\":\"address\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"delay\",\"type\":\"uint256\"}],\"name\":\"DelayActivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"callHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Forwarded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"callHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Initiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"callHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Vetoed\",\"type\":\"event\"},{\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"delay_\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initiator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"initiator_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"callHash\",\"type\":\"bytes32\"}],\"name\":\"queuedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"queuedAt_\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"target\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"target_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vetoer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vetoer_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x61010060405234801561001157600080fd5b506040516108ff3803806108ff8339810160408190526100309161006e565b6001600160a01b0393841660a05291831660c05290911660805260e0526100b9565b80516001600160a01b038116811461006957600080fd5b919050565b6000806000806080858703121561008457600080fd5b61008d85610052565b935061009b60208601610052565b92506100a960408601610052565b6060959095015193969295505050565b60805160a05160c05160e0516107dc610123600039600061023f01526000818161015f01528181610205015281816102cd0152818161045801526105050152600081816101a001528181610384015261059d01526000818161057101526105ff01526107dc6000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c8063b912de5d11610050578063b912de5d14610111578063d4b8399214610124578063d8bff4401461012c57610072565b806354fd4d501461007c5780635c39fcc1146100ce5780636a42b8f8146100fb575b61007a610134565b005b6100b86040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516100c591906106a7565b60405180910390f35b6100d66104fb565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100c5565b610103610532565b6040519081526020016100c5565b61010361011f36600461071a565b610540565b6100d6610567565b6100d6610593565b361580156101425750600054155b15610298573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148015906101c357503373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614155b1561023d576040517f295a81c100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660048201523360248201526044015b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000060008190556040519081527febf28bfb587e28dfffd9173cf71c32ba5d3f0544a0117b5539c9b274a5bba2a89060200160405180910390a1565b600080366040516102aa929190610733565b60405190819003902090503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156103065750600081815260016020526040902054155b1561036c5760005460000361031e5761031e816105bf565b6000818152600160205260408082204290555182917f87a332a414acbc7da074543639ce7ae02ff1ea72e88379da9f261b080beb5a139161036191903690610743565b60405180910390a250565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156103be575060008181526001602052604090205415155b15610406576000818152600160205260408082208290555182917fbede6852c1d97d93ff557f676de76670cd0dec861e7fe8beb13aa0ba2b0ab0409161036191903690610743565b600081815260016020526040812054900361048b576040517f295a81c100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610234565b60008054828252600160205260409091205442916104a891610790565b10156104e0576040517f43dc986d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600160205260408120556104f8816105bf565b50565b60003361052757507f000000000000000000000000000000000000000000000000000000000000000090565b61052f610134565b90565b600033610527575060005490565b60003361055a575060009081526001602052604090205490565b610562610134565b919050565b60003361052757507f000000000000000000000000000000000000000000000000000000000000000090565b60003361052757507f000000000000000000000000000000000000000000000000000000000000000090565b807f4c109d85bcd0bb5c735b4be850953d652afe4cd9aa2e0b1426a65a4dcb2e12296000366040516105f2929190610743565b60405180910390a26000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16600036604051610645929190610733565b6000604051808303816000865af19150503d8060008114610682576040519150601f19603f3d011682016040523d82523d6000602084013e610687565b606091505b50909250905081151560010361069f57805160208201f35b805160208201fd5b600060208083528351808285015260005b818110156106d4578581018301518582016040015282016106b8565b818111156106e6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561072c57600080fd5b5035919050565b8183823760009101908152919050565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b600082198211156107ca577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fea164736f6c634300080f000a", +} + +// DelayedVetoableABI is the input ABI used to generate the binding from. +// Deprecated: Use DelayedVetoableMetaData.ABI instead. +var DelayedVetoableABI = DelayedVetoableMetaData.ABI + +// DelayedVetoableBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use DelayedVetoableMetaData.Bin instead. +var DelayedVetoableBin = DelayedVetoableMetaData.Bin + +// DeployDelayedVetoable deploys a new Ethereum contract, binding an instance of DelayedVetoable to it. +func DeployDelayedVetoable(auth *bind.TransactOpts, backend bind.ContractBackend, vetoer_ common.Address, initiator_ common.Address, target_ common.Address, operatingDelay_ *big.Int) (common.Address, *types.Transaction, *DelayedVetoable, error) { + parsed, err := DelayedVetoableMetaData.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(DelayedVetoableBin), backend, vetoer_, initiator_, target_, operatingDelay_) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &DelayedVetoable{DelayedVetoableCaller: DelayedVetoableCaller{contract: contract}, DelayedVetoableTransactor: DelayedVetoableTransactor{contract: contract}, DelayedVetoableFilterer: DelayedVetoableFilterer{contract: contract}}, nil +} + +// DelayedVetoable is an auto generated Go binding around an Ethereum contract. +type DelayedVetoable struct { + DelayedVetoableCaller // Read-only binding to the contract + DelayedVetoableTransactor // Write-only binding to the contract + DelayedVetoableFilterer // Log filterer for contract events +} + +// DelayedVetoableCaller is an auto generated read-only Go binding around an Ethereum contract. +type DelayedVetoableCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// DelayedVetoableTransactor is an auto generated write-only Go binding around an Ethereum contract. +type DelayedVetoableTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// DelayedVetoableFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type DelayedVetoableFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// DelayedVetoableSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type DelayedVetoableSession struct { + Contract *DelayedVetoable // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// DelayedVetoableCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type DelayedVetoableCallerSession struct { + Contract *DelayedVetoableCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// DelayedVetoableTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type DelayedVetoableTransactorSession struct { + Contract *DelayedVetoableTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// DelayedVetoableRaw is an auto generated low-level Go binding around an Ethereum contract. +type DelayedVetoableRaw struct { + Contract *DelayedVetoable // Generic contract binding to access the raw methods on +} + +// DelayedVetoableCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type DelayedVetoableCallerRaw struct { + Contract *DelayedVetoableCaller // Generic read-only contract binding to access the raw methods on +} + +// DelayedVetoableTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type DelayedVetoableTransactorRaw struct { + Contract *DelayedVetoableTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewDelayedVetoable creates a new instance of DelayedVetoable, bound to a specific deployed contract. +func NewDelayedVetoable(address common.Address, backend bind.ContractBackend) (*DelayedVetoable, error) { + contract, err := bindDelayedVetoable(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &DelayedVetoable{DelayedVetoableCaller: DelayedVetoableCaller{contract: contract}, DelayedVetoableTransactor: DelayedVetoableTransactor{contract: contract}, DelayedVetoableFilterer: DelayedVetoableFilterer{contract: contract}}, nil +} + +// NewDelayedVetoableCaller creates a new read-only instance of DelayedVetoable, bound to a specific deployed contract. +func NewDelayedVetoableCaller(address common.Address, caller bind.ContractCaller) (*DelayedVetoableCaller, error) { + contract, err := bindDelayedVetoable(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &DelayedVetoableCaller{contract: contract}, nil +} + +// NewDelayedVetoableTransactor creates a new write-only instance of DelayedVetoable, bound to a specific deployed contract. +func NewDelayedVetoableTransactor(address common.Address, transactor bind.ContractTransactor) (*DelayedVetoableTransactor, error) { + contract, err := bindDelayedVetoable(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &DelayedVetoableTransactor{contract: contract}, nil +} + +// NewDelayedVetoableFilterer creates a new log filterer instance of DelayedVetoable, bound to a specific deployed contract. +func NewDelayedVetoableFilterer(address common.Address, filterer bind.ContractFilterer) (*DelayedVetoableFilterer, error) { + contract, err := bindDelayedVetoable(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &DelayedVetoableFilterer{contract: contract}, nil +} + +// bindDelayedVetoable binds a generic wrapper to an already deployed contract. +func bindDelayedVetoable(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(DelayedVetoableABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_DelayedVetoable *DelayedVetoableRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _DelayedVetoable.Contract.DelayedVetoableCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_DelayedVetoable *DelayedVetoableRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _DelayedVetoable.Contract.DelayedVetoableTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_DelayedVetoable *DelayedVetoableRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _DelayedVetoable.Contract.DelayedVetoableTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_DelayedVetoable *DelayedVetoableCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _DelayedVetoable.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_DelayedVetoable *DelayedVetoableTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _DelayedVetoable.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_DelayedVetoable *DelayedVetoableTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _DelayedVetoable.Contract.contract.Transact(opts, method, params...) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_DelayedVetoable *DelayedVetoableCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _DelayedVetoable.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_DelayedVetoable *DelayedVetoableSession) Version() (string, error) { + return _DelayedVetoable.Contract.Version(&_DelayedVetoable.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_DelayedVetoable *DelayedVetoableCallerSession) Version() (string, error) { + return _DelayedVetoable.Contract.Version(&_DelayedVetoable.CallOpts) +} + +// Delay is a paid mutator transaction binding the contract method 0x6a42b8f8. +// +// Solidity: function delay() returns(uint256 delay_) +func (_DelayedVetoable *DelayedVetoableTransactor) Delay(opts *bind.TransactOpts) (*types.Transaction, error) { + return _DelayedVetoable.contract.Transact(opts, "delay") +} + +// Delay is a paid mutator transaction binding the contract method 0x6a42b8f8. +// +// Solidity: function delay() returns(uint256 delay_) +func (_DelayedVetoable *DelayedVetoableSession) Delay() (*types.Transaction, error) { + return _DelayedVetoable.Contract.Delay(&_DelayedVetoable.TransactOpts) +} + +// Delay is a paid mutator transaction binding the contract method 0x6a42b8f8. +// +// Solidity: function delay() returns(uint256 delay_) +func (_DelayedVetoable *DelayedVetoableTransactorSession) Delay() (*types.Transaction, error) { + return _DelayedVetoable.Contract.Delay(&_DelayedVetoable.TransactOpts) +} + +// Initiator is a paid mutator transaction binding the contract method 0x5c39fcc1. +// +// Solidity: function initiator() returns(address initiator_) +func (_DelayedVetoable *DelayedVetoableTransactor) Initiator(opts *bind.TransactOpts) (*types.Transaction, error) { + return _DelayedVetoable.contract.Transact(opts, "initiator") +} + +// Initiator is a paid mutator transaction binding the contract method 0x5c39fcc1. +// +// Solidity: function initiator() returns(address initiator_) +func (_DelayedVetoable *DelayedVetoableSession) Initiator() (*types.Transaction, error) { + return _DelayedVetoable.Contract.Initiator(&_DelayedVetoable.TransactOpts) +} + +// Initiator is a paid mutator transaction binding the contract method 0x5c39fcc1. +// +// Solidity: function initiator() returns(address initiator_) +func (_DelayedVetoable *DelayedVetoableTransactorSession) Initiator() (*types.Transaction, error) { + return _DelayedVetoable.Contract.Initiator(&_DelayedVetoable.TransactOpts) +} + +// QueuedAt is a paid mutator transaction binding the contract method 0xb912de5d. +// +// Solidity: function queuedAt(bytes32 callHash) returns(uint256 queuedAt_) +func (_DelayedVetoable *DelayedVetoableTransactor) QueuedAt(opts *bind.TransactOpts, callHash [32]byte) (*types.Transaction, error) { + return _DelayedVetoable.contract.Transact(opts, "queuedAt", callHash) +} + +// QueuedAt is a paid mutator transaction binding the contract method 0xb912de5d. +// +// Solidity: function queuedAt(bytes32 callHash) returns(uint256 queuedAt_) +func (_DelayedVetoable *DelayedVetoableSession) QueuedAt(callHash [32]byte) (*types.Transaction, error) { + return _DelayedVetoable.Contract.QueuedAt(&_DelayedVetoable.TransactOpts, callHash) +} + +// QueuedAt is a paid mutator transaction binding the contract method 0xb912de5d. +// +// Solidity: function queuedAt(bytes32 callHash) returns(uint256 queuedAt_) +func (_DelayedVetoable *DelayedVetoableTransactorSession) QueuedAt(callHash [32]byte) (*types.Transaction, error) { + return _DelayedVetoable.Contract.QueuedAt(&_DelayedVetoable.TransactOpts, callHash) +} + +// Target is a paid mutator transaction binding the contract method 0xd4b83992. +// +// Solidity: function target() returns(address target_) +func (_DelayedVetoable *DelayedVetoableTransactor) Target(opts *bind.TransactOpts) (*types.Transaction, error) { + return _DelayedVetoable.contract.Transact(opts, "target") +} + +// Target is a paid mutator transaction binding the contract method 0xd4b83992. +// +// Solidity: function target() returns(address target_) +func (_DelayedVetoable *DelayedVetoableSession) Target() (*types.Transaction, error) { + return _DelayedVetoable.Contract.Target(&_DelayedVetoable.TransactOpts) +} + +// Target is a paid mutator transaction binding the contract method 0xd4b83992. +// +// Solidity: function target() returns(address target_) +func (_DelayedVetoable *DelayedVetoableTransactorSession) Target() (*types.Transaction, error) { + return _DelayedVetoable.Contract.Target(&_DelayedVetoable.TransactOpts) +} + +// Vetoer is a paid mutator transaction binding the contract method 0xd8bff440. +// +// Solidity: function vetoer() returns(address vetoer_) +func (_DelayedVetoable *DelayedVetoableTransactor) Vetoer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _DelayedVetoable.contract.Transact(opts, "vetoer") +} + +// Vetoer is a paid mutator transaction binding the contract method 0xd8bff440. +// +// Solidity: function vetoer() returns(address vetoer_) +func (_DelayedVetoable *DelayedVetoableSession) Vetoer() (*types.Transaction, error) { + return _DelayedVetoable.Contract.Vetoer(&_DelayedVetoable.TransactOpts) +} + +// Vetoer is a paid mutator transaction binding the contract method 0xd8bff440. +// +// Solidity: function vetoer() returns(address vetoer_) +func (_DelayedVetoable *DelayedVetoableTransactorSession) Vetoer() (*types.Transaction, error) { + return _DelayedVetoable.Contract.Vetoer(&_DelayedVetoable.TransactOpts) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() returns() +func (_DelayedVetoable *DelayedVetoableTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { + return _DelayedVetoable.contract.RawTransact(opts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() returns() +func (_DelayedVetoable *DelayedVetoableSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _DelayedVetoable.Contract.Fallback(&_DelayedVetoable.TransactOpts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() returns() +func (_DelayedVetoable *DelayedVetoableTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _DelayedVetoable.Contract.Fallback(&_DelayedVetoable.TransactOpts, calldata) +} + +// DelayedVetoableDelayActivatedIterator is returned from FilterDelayActivated and is used to iterate over the raw logs and unpacked data for DelayActivated events raised by the DelayedVetoable contract. +type DelayedVetoableDelayActivatedIterator struct { + Event *DelayedVetoableDelayActivated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *DelayedVetoableDelayActivatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(DelayedVetoableDelayActivated) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(DelayedVetoableDelayActivated) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *DelayedVetoableDelayActivatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelayedVetoableDelayActivatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelayedVetoableDelayActivated represents a DelayActivated event raised by the DelayedVetoable contract. +type DelayedVetoableDelayActivated struct { + Delay *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDelayActivated is a free log retrieval operation binding the contract event 0xebf28bfb587e28dfffd9173cf71c32ba5d3f0544a0117b5539c9b274a5bba2a8. +// +// Solidity: event DelayActivated(uint256 delay) +func (_DelayedVetoable *DelayedVetoableFilterer) FilterDelayActivated(opts *bind.FilterOpts) (*DelayedVetoableDelayActivatedIterator, error) { + + logs, sub, err := _DelayedVetoable.contract.FilterLogs(opts, "DelayActivated") + if err != nil { + return nil, err + } + return &DelayedVetoableDelayActivatedIterator{contract: _DelayedVetoable.contract, event: "DelayActivated", logs: logs, sub: sub}, nil +} + +// WatchDelayActivated is a free log subscription operation binding the contract event 0xebf28bfb587e28dfffd9173cf71c32ba5d3f0544a0117b5539c9b274a5bba2a8. +// +// Solidity: event DelayActivated(uint256 delay) +func (_DelayedVetoable *DelayedVetoableFilterer) WatchDelayActivated(opts *bind.WatchOpts, sink chan<- *DelayedVetoableDelayActivated) (event.Subscription, error) { + + logs, sub, err := _DelayedVetoable.contract.WatchLogs(opts, "DelayActivated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(DelayedVetoableDelayActivated) + if err := _DelayedVetoable.contract.UnpackLog(event, "DelayActivated", 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 +} + +// ParseDelayActivated is a log parse operation binding the contract event 0xebf28bfb587e28dfffd9173cf71c32ba5d3f0544a0117b5539c9b274a5bba2a8. +// +// Solidity: event DelayActivated(uint256 delay) +func (_DelayedVetoable *DelayedVetoableFilterer) ParseDelayActivated(log types.Log) (*DelayedVetoableDelayActivated, error) { + event := new(DelayedVetoableDelayActivated) + if err := _DelayedVetoable.contract.UnpackLog(event, "DelayActivated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelayedVetoableForwardedIterator is returned from FilterForwarded and is used to iterate over the raw logs and unpacked data for Forwarded events raised by the DelayedVetoable contract. +type DelayedVetoableForwardedIterator struct { + Event *DelayedVetoableForwarded // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *DelayedVetoableForwardedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(DelayedVetoableForwarded) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(DelayedVetoableForwarded) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *DelayedVetoableForwardedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelayedVetoableForwardedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelayedVetoableForwarded represents a Forwarded event raised by the DelayedVetoable contract. +type DelayedVetoableForwarded struct { + CallHash [32]byte + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterForwarded is a free log retrieval operation binding the contract event 0x4c109d85bcd0bb5c735b4be850953d652afe4cd9aa2e0b1426a65a4dcb2e1229. +// +// Solidity: event Forwarded(bytes32 indexed callHash, bytes data) +func (_DelayedVetoable *DelayedVetoableFilterer) FilterForwarded(opts *bind.FilterOpts, callHash [][32]byte) (*DelayedVetoableForwardedIterator, error) { + + var callHashRule []interface{} + for _, callHashItem := range callHash { + callHashRule = append(callHashRule, callHashItem) + } + + logs, sub, err := _DelayedVetoable.contract.FilterLogs(opts, "Forwarded", callHashRule) + if err != nil { + return nil, err + } + return &DelayedVetoableForwardedIterator{contract: _DelayedVetoable.contract, event: "Forwarded", logs: logs, sub: sub}, nil +} + +// WatchForwarded is a free log subscription operation binding the contract event 0x4c109d85bcd0bb5c735b4be850953d652afe4cd9aa2e0b1426a65a4dcb2e1229. +// +// Solidity: event Forwarded(bytes32 indexed callHash, bytes data) +func (_DelayedVetoable *DelayedVetoableFilterer) WatchForwarded(opts *bind.WatchOpts, sink chan<- *DelayedVetoableForwarded, callHash [][32]byte) (event.Subscription, error) { + + var callHashRule []interface{} + for _, callHashItem := range callHash { + callHashRule = append(callHashRule, callHashItem) + } + + logs, sub, err := _DelayedVetoable.contract.WatchLogs(opts, "Forwarded", callHashRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(DelayedVetoableForwarded) + if err := _DelayedVetoable.contract.UnpackLog(event, "Forwarded", 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 +} + +// ParseForwarded is a log parse operation binding the contract event 0x4c109d85bcd0bb5c735b4be850953d652afe4cd9aa2e0b1426a65a4dcb2e1229. +// +// Solidity: event Forwarded(bytes32 indexed callHash, bytes data) +func (_DelayedVetoable *DelayedVetoableFilterer) ParseForwarded(log types.Log) (*DelayedVetoableForwarded, error) { + event := new(DelayedVetoableForwarded) + if err := _DelayedVetoable.contract.UnpackLog(event, "Forwarded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelayedVetoableInitiatedIterator is returned from FilterInitiated and is used to iterate over the raw logs and unpacked data for Initiated events raised by the DelayedVetoable contract. +type DelayedVetoableInitiatedIterator struct { + Event *DelayedVetoableInitiated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *DelayedVetoableInitiatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(DelayedVetoableInitiated) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(DelayedVetoableInitiated) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *DelayedVetoableInitiatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelayedVetoableInitiatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelayedVetoableInitiated represents a Initiated event raised by the DelayedVetoable contract. +type DelayedVetoableInitiated struct { + CallHash [32]byte + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitiated is a free log retrieval operation binding the contract event 0x87a332a414acbc7da074543639ce7ae02ff1ea72e88379da9f261b080beb5a13. +// +// Solidity: event Initiated(bytes32 indexed callHash, bytes data) +func (_DelayedVetoable *DelayedVetoableFilterer) FilterInitiated(opts *bind.FilterOpts, callHash [][32]byte) (*DelayedVetoableInitiatedIterator, error) { + + var callHashRule []interface{} + for _, callHashItem := range callHash { + callHashRule = append(callHashRule, callHashItem) + } + + logs, sub, err := _DelayedVetoable.contract.FilterLogs(opts, "Initiated", callHashRule) + if err != nil { + return nil, err + } + return &DelayedVetoableInitiatedIterator{contract: _DelayedVetoable.contract, event: "Initiated", logs: logs, sub: sub}, nil +} + +// WatchInitiated is a free log subscription operation binding the contract event 0x87a332a414acbc7da074543639ce7ae02ff1ea72e88379da9f261b080beb5a13. +// +// Solidity: event Initiated(bytes32 indexed callHash, bytes data) +func (_DelayedVetoable *DelayedVetoableFilterer) WatchInitiated(opts *bind.WatchOpts, sink chan<- *DelayedVetoableInitiated, callHash [][32]byte) (event.Subscription, error) { + + var callHashRule []interface{} + for _, callHashItem := range callHash { + callHashRule = append(callHashRule, callHashItem) + } + + logs, sub, err := _DelayedVetoable.contract.WatchLogs(opts, "Initiated", callHashRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(DelayedVetoableInitiated) + if err := _DelayedVetoable.contract.UnpackLog(event, "Initiated", 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 +} + +// ParseInitiated is a log parse operation binding the contract event 0x87a332a414acbc7da074543639ce7ae02ff1ea72e88379da9f261b080beb5a13. +// +// Solidity: event Initiated(bytes32 indexed callHash, bytes data) +func (_DelayedVetoable *DelayedVetoableFilterer) ParseInitiated(log types.Log) (*DelayedVetoableInitiated, error) { + event := new(DelayedVetoableInitiated) + if err := _DelayedVetoable.contract.UnpackLog(event, "Initiated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelayedVetoableVetoedIterator is returned from FilterVetoed and is used to iterate over the raw logs and unpacked data for Vetoed events raised by the DelayedVetoable contract. +type DelayedVetoableVetoedIterator struct { + Event *DelayedVetoableVetoed // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *DelayedVetoableVetoedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(DelayedVetoableVetoed) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(DelayedVetoableVetoed) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *DelayedVetoableVetoedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelayedVetoableVetoedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelayedVetoableVetoed represents a Vetoed event raised by the DelayedVetoable contract. +type DelayedVetoableVetoed struct { + CallHash [32]byte + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterVetoed is a free log retrieval operation binding the contract event 0xbede6852c1d97d93ff557f676de76670cd0dec861e7fe8beb13aa0ba2b0ab040. +// +// Solidity: event Vetoed(bytes32 indexed callHash, bytes data) +func (_DelayedVetoable *DelayedVetoableFilterer) FilterVetoed(opts *bind.FilterOpts, callHash [][32]byte) (*DelayedVetoableVetoedIterator, error) { + + var callHashRule []interface{} + for _, callHashItem := range callHash { + callHashRule = append(callHashRule, callHashItem) + } + + logs, sub, err := _DelayedVetoable.contract.FilterLogs(opts, "Vetoed", callHashRule) + if err != nil { + return nil, err + } + return &DelayedVetoableVetoedIterator{contract: _DelayedVetoable.contract, event: "Vetoed", logs: logs, sub: sub}, nil +} + +// WatchVetoed is a free log subscription operation binding the contract event 0xbede6852c1d97d93ff557f676de76670cd0dec861e7fe8beb13aa0ba2b0ab040. +// +// Solidity: event Vetoed(bytes32 indexed callHash, bytes data) +func (_DelayedVetoable *DelayedVetoableFilterer) WatchVetoed(opts *bind.WatchOpts, sink chan<- *DelayedVetoableVetoed, callHash [][32]byte) (event.Subscription, error) { + + var callHashRule []interface{} + for _, callHashItem := range callHash { + callHashRule = append(callHashRule, callHashItem) + } + + logs, sub, err := _DelayedVetoable.contract.WatchLogs(opts, "Vetoed", callHashRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(DelayedVetoableVetoed) + if err := _DelayedVetoable.contract.UnpackLog(event, "Vetoed", 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 +} + +// ParseVetoed is a log parse operation binding the contract event 0xbede6852c1d97d93ff557f676de76670cd0dec861e7fe8beb13aa0ba2b0ab040. +// +// Solidity: event Vetoed(bytes32 indexed callHash, bytes data) +func (_DelayedVetoable *DelayedVetoableFilterer) ParseVetoed(log types.Log) (*DelayedVetoableVetoed, error) { + event := new(DelayedVetoableVetoed) + if err := _DelayedVetoable.contract.UnpackLog(event, "Vetoed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-bindings/bindings/delayedvetoable_more.go b/op-bindings/bindings/delayedvetoable_more.go new file mode 100644 index 000000000..3ad43c89e --- /dev/null +++ b/op-bindings/bindings/delayedvetoable_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const DelayedVetoableStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/L1/DelayedVetoable.sol:DelayedVetoable\",\"label\":\"_delay\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint256\"},{\"astId\":1001,\"contract\":\"src/L1/DelayedVetoable.sol:DelayedVetoable\",\"label\":\"_queuedAt\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_mapping(t_bytes32,t_uint256)\"}],\"types\":{\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_bytes32,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_uint256\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"}}}" + +var DelayedVetoableStorageLayout = new(solc.StorageLayout) + +var DelayedVetoableDeployedBin = "0x608060405234801561001057600080fd5b50600436106100725760003560e01c8063b912de5d11610050578063b912de5d14610111578063d4b8399214610124578063d8bff4401461012c57610072565b806354fd4d501461007c5780635c39fcc1146100ce5780636a42b8f8146100fb575b61007a610134565b005b6100b86040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516100c591906106a7565b60405180910390f35b6100d66104fb565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100c5565b610103610532565b6040519081526020016100c5565b61010361011f36600461071a565b610540565b6100d6610567565b6100d6610593565b361580156101425750600054155b15610298573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148015906101c357503373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614155b1561023d576040517f295a81c100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660048201523360248201526044015b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000060008190556040519081527febf28bfb587e28dfffd9173cf71c32ba5d3f0544a0117b5539c9b274a5bba2a89060200160405180910390a1565b600080366040516102aa929190610733565b60405190819003902090503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156103065750600081815260016020526040902054155b1561036c5760005460000361031e5761031e816105bf565b6000818152600160205260408082204290555182917f87a332a414acbc7da074543639ce7ae02ff1ea72e88379da9f261b080beb5a139161036191903690610743565b60405180910390a250565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156103be575060008181526001602052604090205415155b15610406576000818152600160205260408082208290555182917fbede6852c1d97d93ff557f676de76670cd0dec861e7fe8beb13aa0ba2b0ab0409161036191903690610743565b600081815260016020526040812054900361048b576040517f295a81c100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610234565b60008054828252600160205260409091205442916104a891610790565b10156104e0576040517f43dc986d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600160205260408120556104f8816105bf565b50565b60003361052757507f000000000000000000000000000000000000000000000000000000000000000090565b61052f610134565b90565b600033610527575060005490565b60003361055a575060009081526001602052604090205490565b610562610134565b919050565b60003361052757507f000000000000000000000000000000000000000000000000000000000000000090565b60003361052757507f000000000000000000000000000000000000000000000000000000000000000090565b807f4c109d85bcd0bb5c735b4be850953d652afe4cd9aa2e0b1426a65a4dcb2e12296000366040516105f2929190610743565b60405180910390a26000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16600036604051610645929190610733565b6000604051808303816000865af19150503d8060008114610682576040519150601f19603f3d011682016040523d82523d6000602084013e610687565b606091505b50909250905081151560010361069f57805160208201f35b805160208201fd5b600060208083528351808285015260005b818110156106d4578581018301518582016040015282016106b8565b818111156106e6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561072c57600080fd5b5035919050565b8183823760009101908152919050565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b600082198211156107ca577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(DelayedVetoableStorageLayoutJSON), DelayedVetoableStorageLayout); err != nil { + panic(err) + } + + layouts["DelayedVetoable"] = DelayedVetoableStorageLayout + deployedBytecodes["DelayedVetoable"] = DelayedVetoableDeployedBin +} diff --git a/op-bindings/bindings/deployerwhitelist.go b/op-bindings/bindings/deployerwhitelist.go new file mode 100644 index 000000000..4e66b0af4 --- /dev/null +++ b/op-bindings/bindings/deployerwhitelist.go @@ -0,0 +1,793 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// DeployerWhitelistMetaData contains all meta data concerning the DeployerWhitelist contract. +var DeployerWhitelistMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldOwner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldOwner\",\"type\":\"address\"}],\"name\":\"WhitelistDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"deployer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"whitelisted\",\"type\":\"bool\"}],\"name\":\"WhitelistStatusChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"enableArbitraryContractDeployment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_deployer\",\"type\":\"address\"}],\"name\":\"isDeployerAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"setOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_deployer\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_isWhitelisted\",\"type\":\"bool\"}],\"name\":\"setWhitelistedDeployer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"whitelist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b506107bc806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100fc5780639b19251a14610141578063b1540a0114610174578063bdc7b54f1461018757600080fd5b806308fd63221461008257806313af40351461009757806354fd4d50146100aa575b600080fd5b6100956100903660046106de565b61018f565b005b6100956100a536600461071a565b6102ef565b6100e66040518060400160405280600581526020017f312e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516100f3919061073c565b60405180910390f35b60005461011c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f3565b61016461014f36600461071a565b60016020526000908152604090205460ff1681565b60405190151581526020016100f3565b61016461018236600461071a565b610520565b610095610571565b60005473ffffffffffffffffffffffffffffffffffffffff163314610261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f4465706c6f79657257686974656c6973743a2066756e6374696f6e2063616e2060448201527f6f6e6c792062652063616c6c656420627920746865206f776e6572206f66207460648201527f68697320636f6e74726163740000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168515159081179091558251938452908301527f8daaf060c3306c38e068a75c054bf96ecd85a3db1252712c4d93632744c42e0d910160405180910390a15050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f4465706c6f79657257686974656c6973743a2066756e6374696f6e2063616e2060448201527f6f6e6c792062652063616c6c656420627920746865206f776e6572206f66207460648201527f68697320636f6e74726163740000000000000000000000000000000000000000608482015260a401610258565b73ffffffffffffffffffffffffffffffffffffffff8116610485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f4465706c6f79657257686974656c6973743a2063616e206f6e6c79206265206460448201527f697361626c65642076696120656e61626c65417262697472617279436f6e747260648201527f6163744465706c6f796d656e7400000000000000000000000000000000000000608482015260a401610258565b6000546040805173ffffffffffffffffffffffffffffffffffffffff928316815291831660208301527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c910160405180910390a1600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000805473ffffffffffffffffffffffffffffffffffffffff16158061056b575073ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff165b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461063e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f4465706c6f79657257686974656c6973743a2066756e6374696f6e2063616e2060448201527f6f6e6c792062652063616c6c656420627920746865206f776e6572206f66207460648201527f68697320636f6e74726163740000000000000000000000000000000000000000608482015260a401610258565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681527fc0e106cf568e50698fdbde1eff56f5a5c966cc7958e37e276918e9e4ccdf8cd49060200160405180910390a1600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d957600080fd5b919050565b600080604083850312156106f157600080fd5b6106fa836106b5565b91506020830135801515811461070f57600080fd5b809150509250929050565b60006020828403121561072c57600080fd5b610735826106b5565b9392505050565b600060208083528351808285015260005b818110156107695785810183015185820160400152820161074d565b8181111561077b576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea164736f6c634300080f000a", +} + +// DeployerWhitelistABI is the input ABI used to generate the binding from. +// Deprecated: Use DeployerWhitelistMetaData.ABI instead. +var DeployerWhitelistABI = DeployerWhitelistMetaData.ABI + +// DeployerWhitelistBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use DeployerWhitelistMetaData.Bin instead. +var DeployerWhitelistBin = DeployerWhitelistMetaData.Bin + +// DeployDeployerWhitelist deploys a new Ethereum contract, binding an instance of DeployerWhitelist to it. +func DeployDeployerWhitelist(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *DeployerWhitelist, error) { + parsed, err := DeployerWhitelistMetaData.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(DeployerWhitelistBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &DeployerWhitelist{DeployerWhitelistCaller: DeployerWhitelistCaller{contract: contract}, DeployerWhitelistTransactor: DeployerWhitelistTransactor{contract: contract}, DeployerWhitelistFilterer: DeployerWhitelistFilterer{contract: contract}}, nil +} + +// DeployerWhitelist is an auto generated Go binding around an Ethereum contract. +type DeployerWhitelist struct { + DeployerWhitelistCaller // Read-only binding to the contract + DeployerWhitelistTransactor // Write-only binding to the contract + DeployerWhitelistFilterer // Log filterer for contract events +} + +// DeployerWhitelistCaller is an auto generated read-only Go binding around an Ethereum contract. +type DeployerWhitelistCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// DeployerWhitelistTransactor is an auto generated write-only Go binding around an Ethereum contract. +type DeployerWhitelistTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// DeployerWhitelistFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type DeployerWhitelistFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// DeployerWhitelistSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type DeployerWhitelistSession struct { + Contract *DeployerWhitelist // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// DeployerWhitelistCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type DeployerWhitelistCallerSession struct { + Contract *DeployerWhitelistCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// DeployerWhitelistTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type DeployerWhitelistTransactorSession struct { + Contract *DeployerWhitelistTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// DeployerWhitelistRaw is an auto generated low-level Go binding around an Ethereum contract. +type DeployerWhitelistRaw struct { + Contract *DeployerWhitelist // Generic contract binding to access the raw methods on +} + +// DeployerWhitelistCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type DeployerWhitelistCallerRaw struct { + Contract *DeployerWhitelistCaller // Generic read-only contract binding to access the raw methods on +} + +// DeployerWhitelistTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type DeployerWhitelistTransactorRaw struct { + Contract *DeployerWhitelistTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewDeployerWhitelist creates a new instance of DeployerWhitelist, bound to a specific deployed contract. +func NewDeployerWhitelist(address common.Address, backend bind.ContractBackend) (*DeployerWhitelist, error) { + contract, err := bindDeployerWhitelist(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &DeployerWhitelist{DeployerWhitelistCaller: DeployerWhitelistCaller{contract: contract}, DeployerWhitelistTransactor: DeployerWhitelistTransactor{contract: contract}, DeployerWhitelistFilterer: DeployerWhitelistFilterer{contract: contract}}, nil +} + +// NewDeployerWhitelistCaller creates a new read-only instance of DeployerWhitelist, bound to a specific deployed contract. +func NewDeployerWhitelistCaller(address common.Address, caller bind.ContractCaller) (*DeployerWhitelistCaller, error) { + contract, err := bindDeployerWhitelist(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &DeployerWhitelistCaller{contract: contract}, nil +} + +// NewDeployerWhitelistTransactor creates a new write-only instance of DeployerWhitelist, bound to a specific deployed contract. +func NewDeployerWhitelistTransactor(address common.Address, transactor bind.ContractTransactor) (*DeployerWhitelistTransactor, error) { + contract, err := bindDeployerWhitelist(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &DeployerWhitelistTransactor{contract: contract}, nil +} + +// NewDeployerWhitelistFilterer creates a new log filterer instance of DeployerWhitelist, bound to a specific deployed contract. +func NewDeployerWhitelistFilterer(address common.Address, filterer bind.ContractFilterer) (*DeployerWhitelistFilterer, error) { + contract, err := bindDeployerWhitelist(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &DeployerWhitelistFilterer{contract: contract}, nil +} + +// bindDeployerWhitelist binds a generic wrapper to an already deployed contract. +func bindDeployerWhitelist(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(DeployerWhitelistABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_DeployerWhitelist *DeployerWhitelistRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _DeployerWhitelist.Contract.DeployerWhitelistCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_DeployerWhitelist *DeployerWhitelistRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _DeployerWhitelist.Contract.DeployerWhitelistTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_DeployerWhitelist *DeployerWhitelistRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _DeployerWhitelist.Contract.DeployerWhitelistTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_DeployerWhitelist *DeployerWhitelistCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _DeployerWhitelist.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_DeployerWhitelist *DeployerWhitelistTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _DeployerWhitelist.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_DeployerWhitelist *DeployerWhitelistTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _DeployerWhitelist.Contract.contract.Transact(opts, method, params...) +} + +// IsDeployerAllowed is a free data retrieval call binding the contract method 0xb1540a01. +// +// Solidity: function isDeployerAllowed(address _deployer) view returns(bool) +func (_DeployerWhitelist *DeployerWhitelistCaller) IsDeployerAllowed(opts *bind.CallOpts, _deployer common.Address) (bool, error) { + var out []interface{} + err := _DeployerWhitelist.contract.Call(opts, &out, "isDeployerAllowed", _deployer) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsDeployerAllowed is a free data retrieval call binding the contract method 0xb1540a01. +// +// Solidity: function isDeployerAllowed(address _deployer) view returns(bool) +func (_DeployerWhitelist *DeployerWhitelistSession) IsDeployerAllowed(_deployer common.Address) (bool, error) { + return _DeployerWhitelist.Contract.IsDeployerAllowed(&_DeployerWhitelist.CallOpts, _deployer) +} + +// IsDeployerAllowed is a free data retrieval call binding the contract method 0xb1540a01. +// +// Solidity: function isDeployerAllowed(address _deployer) view returns(bool) +func (_DeployerWhitelist *DeployerWhitelistCallerSession) IsDeployerAllowed(_deployer common.Address) (bool, error) { + return _DeployerWhitelist.Contract.IsDeployerAllowed(&_DeployerWhitelist.CallOpts, _deployer) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_DeployerWhitelist *DeployerWhitelistCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _DeployerWhitelist.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 + +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_DeployerWhitelist *DeployerWhitelistSession) Owner() (common.Address, error) { + return _DeployerWhitelist.Contract.Owner(&_DeployerWhitelist.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_DeployerWhitelist *DeployerWhitelistCallerSession) Owner() (common.Address, error) { + return _DeployerWhitelist.Contract.Owner(&_DeployerWhitelist.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_DeployerWhitelist *DeployerWhitelistCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _DeployerWhitelist.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_DeployerWhitelist *DeployerWhitelistSession) Version() (string, error) { + return _DeployerWhitelist.Contract.Version(&_DeployerWhitelist.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_DeployerWhitelist *DeployerWhitelistCallerSession) Version() (string, error) { + return _DeployerWhitelist.Contract.Version(&_DeployerWhitelist.CallOpts) +} + +// Whitelist is a free data retrieval call binding the contract method 0x9b19251a. +// +// Solidity: function whitelist(address ) view returns(bool) +func (_DeployerWhitelist *DeployerWhitelistCaller) Whitelist(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var out []interface{} + err := _DeployerWhitelist.contract.Call(opts, &out, "whitelist", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// Whitelist is a free data retrieval call binding the contract method 0x9b19251a. +// +// Solidity: function whitelist(address ) view returns(bool) +func (_DeployerWhitelist *DeployerWhitelistSession) Whitelist(arg0 common.Address) (bool, error) { + return _DeployerWhitelist.Contract.Whitelist(&_DeployerWhitelist.CallOpts, arg0) +} + +// Whitelist is a free data retrieval call binding the contract method 0x9b19251a. +// +// Solidity: function whitelist(address ) view returns(bool) +func (_DeployerWhitelist *DeployerWhitelistCallerSession) Whitelist(arg0 common.Address) (bool, error) { + return _DeployerWhitelist.Contract.Whitelist(&_DeployerWhitelist.CallOpts, arg0) +} + +// EnableArbitraryContractDeployment is a paid mutator transaction binding the contract method 0xbdc7b54f. +// +// Solidity: function enableArbitraryContractDeployment() returns() +func (_DeployerWhitelist *DeployerWhitelistTransactor) EnableArbitraryContractDeployment(opts *bind.TransactOpts) (*types.Transaction, error) { + return _DeployerWhitelist.contract.Transact(opts, "enableArbitraryContractDeployment") +} + +// EnableArbitraryContractDeployment is a paid mutator transaction binding the contract method 0xbdc7b54f. +// +// Solidity: function enableArbitraryContractDeployment() returns() +func (_DeployerWhitelist *DeployerWhitelistSession) EnableArbitraryContractDeployment() (*types.Transaction, error) { + return _DeployerWhitelist.Contract.EnableArbitraryContractDeployment(&_DeployerWhitelist.TransactOpts) +} + +// EnableArbitraryContractDeployment is a paid mutator transaction binding the contract method 0xbdc7b54f. +// +// Solidity: function enableArbitraryContractDeployment() returns() +func (_DeployerWhitelist *DeployerWhitelistTransactorSession) EnableArbitraryContractDeployment() (*types.Transaction, error) { + return _DeployerWhitelist.Contract.EnableArbitraryContractDeployment(&_DeployerWhitelist.TransactOpts) +} + +// SetOwner is a paid mutator transaction binding the contract method 0x13af4035. +// +// Solidity: function setOwner(address _owner) returns() +func (_DeployerWhitelist *DeployerWhitelistTransactor) SetOwner(opts *bind.TransactOpts, _owner common.Address) (*types.Transaction, error) { + return _DeployerWhitelist.contract.Transact(opts, "setOwner", _owner) +} + +// SetOwner is a paid mutator transaction binding the contract method 0x13af4035. +// +// Solidity: function setOwner(address _owner) returns() +func (_DeployerWhitelist *DeployerWhitelistSession) SetOwner(_owner common.Address) (*types.Transaction, error) { + return _DeployerWhitelist.Contract.SetOwner(&_DeployerWhitelist.TransactOpts, _owner) +} + +// SetOwner is a paid mutator transaction binding the contract method 0x13af4035. +// +// Solidity: function setOwner(address _owner) returns() +func (_DeployerWhitelist *DeployerWhitelistTransactorSession) SetOwner(_owner common.Address) (*types.Transaction, error) { + return _DeployerWhitelist.Contract.SetOwner(&_DeployerWhitelist.TransactOpts, _owner) +} + +// SetWhitelistedDeployer is a paid mutator transaction binding the contract method 0x08fd6322. +// +// Solidity: function setWhitelistedDeployer(address _deployer, bool _isWhitelisted) returns() +func (_DeployerWhitelist *DeployerWhitelistTransactor) SetWhitelistedDeployer(opts *bind.TransactOpts, _deployer common.Address, _isWhitelisted bool) (*types.Transaction, error) { + return _DeployerWhitelist.contract.Transact(opts, "setWhitelistedDeployer", _deployer, _isWhitelisted) +} + +// SetWhitelistedDeployer is a paid mutator transaction binding the contract method 0x08fd6322. +// +// Solidity: function setWhitelistedDeployer(address _deployer, bool _isWhitelisted) returns() +func (_DeployerWhitelist *DeployerWhitelistSession) SetWhitelistedDeployer(_deployer common.Address, _isWhitelisted bool) (*types.Transaction, error) { + return _DeployerWhitelist.Contract.SetWhitelistedDeployer(&_DeployerWhitelist.TransactOpts, _deployer, _isWhitelisted) +} + +// SetWhitelistedDeployer is a paid mutator transaction binding the contract method 0x08fd6322. +// +// Solidity: function setWhitelistedDeployer(address _deployer, bool _isWhitelisted) returns() +func (_DeployerWhitelist *DeployerWhitelistTransactorSession) SetWhitelistedDeployer(_deployer common.Address, _isWhitelisted bool) (*types.Transaction, error) { + return _DeployerWhitelist.Contract.SetWhitelistedDeployer(&_DeployerWhitelist.TransactOpts, _deployer, _isWhitelisted) +} + +// DeployerWhitelistOwnerChangedIterator is returned from FilterOwnerChanged and is used to iterate over the raw logs and unpacked data for OwnerChanged events raised by the DeployerWhitelist contract. +type DeployerWhitelistOwnerChangedIterator struct { + Event *DeployerWhitelistOwnerChanged // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *DeployerWhitelistOwnerChangedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(DeployerWhitelistOwnerChanged) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(DeployerWhitelistOwnerChanged) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *DeployerWhitelistOwnerChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DeployerWhitelistOwnerChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DeployerWhitelistOwnerChanged represents a OwnerChanged event raised by the DeployerWhitelist contract. +type DeployerWhitelistOwnerChanged struct { + OldOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnerChanged is a free log retrieval operation binding the contract event 0xb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c. +// +// Solidity: event OwnerChanged(address oldOwner, address newOwner) +func (_DeployerWhitelist *DeployerWhitelistFilterer) FilterOwnerChanged(opts *bind.FilterOpts) (*DeployerWhitelistOwnerChangedIterator, error) { + + logs, sub, err := _DeployerWhitelist.contract.FilterLogs(opts, "OwnerChanged") + if err != nil { + return nil, err + } + return &DeployerWhitelistOwnerChangedIterator{contract: _DeployerWhitelist.contract, event: "OwnerChanged", logs: logs, sub: sub}, nil +} + +// WatchOwnerChanged is a free log subscription operation binding the contract event 0xb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c. +// +// Solidity: event OwnerChanged(address oldOwner, address newOwner) +func (_DeployerWhitelist *DeployerWhitelistFilterer) WatchOwnerChanged(opts *bind.WatchOpts, sink chan<- *DeployerWhitelistOwnerChanged) (event.Subscription, error) { + + logs, sub, err := _DeployerWhitelist.contract.WatchLogs(opts, "OwnerChanged") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(DeployerWhitelistOwnerChanged) + if err := _DeployerWhitelist.contract.UnpackLog(event, "OwnerChanged", 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 +} + +// ParseOwnerChanged is a log parse operation binding the contract event 0xb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c. +// +// Solidity: event OwnerChanged(address oldOwner, address newOwner) +func (_DeployerWhitelist *DeployerWhitelistFilterer) ParseOwnerChanged(log types.Log) (*DeployerWhitelistOwnerChanged, error) { + event := new(DeployerWhitelistOwnerChanged) + if err := _DeployerWhitelist.contract.UnpackLog(event, "OwnerChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DeployerWhitelistWhitelistDisabledIterator is returned from FilterWhitelistDisabled and is used to iterate over the raw logs and unpacked data for WhitelistDisabled events raised by the DeployerWhitelist contract. +type DeployerWhitelistWhitelistDisabledIterator struct { + Event *DeployerWhitelistWhitelistDisabled // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *DeployerWhitelistWhitelistDisabledIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(DeployerWhitelistWhitelistDisabled) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(DeployerWhitelistWhitelistDisabled) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *DeployerWhitelistWhitelistDisabledIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DeployerWhitelistWhitelistDisabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DeployerWhitelistWhitelistDisabled represents a WhitelistDisabled event raised by the DeployerWhitelist contract. +type DeployerWhitelistWhitelistDisabled struct { + OldOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWhitelistDisabled is a free log retrieval operation binding the contract event 0xc0e106cf568e50698fdbde1eff56f5a5c966cc7958e37e276918e9e4ccdf8cd4. +// +// Solidity: event WhitelistDisabled(address oldOwner) +func (_DeployerWhitelist *DeployerWhitelistFilterer) FilterWhitelistDisabled(opts *bind.FilterOpts) (*DeployerWhitelistWhitelistDisabledIterator, error) { + + logs, sub, err := _DeployerWhitelist.contract.FilterLogs(opts, "WhitelistDisabled") + if err != nil { + return nil, err + } + return &DeployerWhitelistWhitelistDisabledIterator{contract: _DeployerWhitelist.contract, event: "WhitelistDisabled", logs: logs, sub: sub}, nil +} + +// WatchWhitelistDisabled is a free log subscription operation binding the contract event 0xc0e106cf568e50698fdbde1eff56f5a5c966cc7958e37e276918e9e4ccdf8cd4. +// +// Solidity: event WhitelistDisabled(address oldOwner) +func (_DeployerWhitelist *DeployerWhitelistFilterer) WatchWhitelistDisabled(opts *bind.WatchOpts, sink chan<- *DeployerWhitelistWhitelistDisabled) (event.Subscription, error) { + + logs, sub, err := _DeployerWhitelist.contract.WatchLogs(opts, "WhitelistDisabled") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(DeployerWhitelistWhitelistDisabled) + if err := _DeployerWhitelist.contract.UnpackLog(event, "WhitelistDisabled", 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 +} + +// ParseWhitelistDisabled is a log parse operation binding the contract event 0xc0e106cf568e50698fdbde1eff56f5a5c966cc7958e37e276918e9e4ccdf8cd4. +// +// Solidity: event WhitelistDisabled(address oldOwner) +func (_DeployerWhitelist *DeployerWhitelistFilterer) ParseWhitelistDisabled(log types.Log) (*DeployerWhitelistWhitelistDisabled, error) { + event := new(DeployerWhitelistWhitelistDisabled) + if err := _DeployerWhitelist.contract.UnpackLog(event, "WhitelistDisabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DeployerWhitelistWhitelistStatusChangedIterator is returned from FilterWhitelistStatusChanged and is used to iterate over the raw logs and unpacked data for WhitelistStatusChanged events raised by the DeployerWhitelist contract. +type DeployerWhitelistWhitelistStatusChangedIterator struct { + Event *DeployerWhitelistWhitelistStatusChanged // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *DeployerWhitelistWhitelistStatusChangedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(DeployerWhitelistWhitelistStatusChanged) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(DeployerWhitelistWhitelistStatusChanged) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *DeployerWhitelistWhitelistStatusChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DeployerWhitelistWhitelistStatusChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DeployerWhitelistWhitelistStatusChanged represents a WhitelistStatusChanged event raised by the DeployerWhitelist contract. +type DeployerWhitelistWhitelistStatusChanged struct { + Deployer common.Address + Whitelisted bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWhitelistStatusChanged is a free log retrieval operation binding the contract event 0x8daaf060c3306c38e068a75c054bf96ecd85a3db1252712c4d93632744c42e0d. +// +// Solidity: event WhitelistStatusChanged(address deployer, bool whitelisted) +func (_DeployerWhitelist *DeployerWhitelistFilterer) FilterWhitelistStatusChanged(opts *bind.FilterOpts) (*DeployerWhitelistWhitelistStatusChangedIterator, error) { + + logs, sub, err := _DeployerWhitelist.contract.FilterLogs(opts, "WhitelistStatusChanged") + if err != nil { + return nil, err + } + return &DeployerWhitelistWhitelistStatusChangedIterator{contract: _DeployerWhitelist.contract, event: "WhitelistStatusChanged", logs: logs, sub: sub}, nil +} + +// WatchWhitelistStatusChanged is a free log subscription operation binding the contract event 0x8daaf060c3306c38e068a75c054bf96ecd85a3db1252712c4d93632744c42e0d. +// +// Solidity: event WhitelistStatusChanged(address deployer, bool whitelisted) +func (_DeployerWhitelist *DeployerWhitelistFilterer) WatchWhitelistStatusChanged(opts *bind.WatchOpts, sink chan<- *DeployerWhitelistWhitelistStatusChanged) (event.Subscription, error) { + + logs, sub, err := _DeployerWhitelist.contract.WatchLogs(opts, "WhitelistStatusChanged") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(DeployerWhitelistWhitelistStatusChanged) + if err := _DeployerWhitelist.contract.UnpackLog(event, "WhitelistStatusChanged", 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 +} + +// ParseWhitelistStatusChanged is a log parse operation binding the contract event 0x8daaf060c3306c38e068a75c054bf96ecd85a3db1252712c4d93632744c42e0d. +// +// Solidity: event WhitelistStatusChanged(address deployer, bool whitelisted) +func (_DeployerWhitelist *DeployerWhitelistFilterer) ParseWhitelistStatusChanged(log types.Log) (*DeployerWhitelistWhitelistStatusChanged, error) { + event := new(DeployerWhitelistWhitelistStatusChanged) + if err := _DeployerWhitelist.contract.UnpackLog(event, "WhitelistStatusChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-bindings/bindings/deployerwhitelist_more.go b/op-bindings/bindings/deployerwhitelist_more.go new file mode 100644 index 000000000..b19acbdd0 --- /dev/null +++ b/op-bindings/bindings/deployerwhitelist_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const DeployerWhitelistStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/legacy/DeployerWhitelist.sol:DeployerWhitelist\",\"label\":\"owner\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_address\"},{\"astId\":1001,\"contract\":\"src/legacy/DeployerWhitelist.sol:DeployerWhitelist\",\"label\":\"whitelist\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_mapping(t_address,t_bool)\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_mapping(t_address,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_bool\"}}}" + +var DeployerWhitelistStorageLayout = new(solc.StorageLayout) + +var DeployerWhitelistDeployedBin = "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100fc5780639b19251a14610141578063b1540a0114610174578063bdc7b54f1461018757600080fd5b806308fd63221461008257806313af40351461009757806354fd4d50146100aa575b600080fd5b6100956100903660046106de565b61018f565b005b6100956100a536600461071a565b6102ef565b6100e66040518060400160405280600581526020017f312e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516100f3919061073c565b60405180910390f35b60005461011c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f3565b61016461014f36600461071a565b60016020526000908152604090205460ff1681565b60405190151581526020016100f3565b61016461018236600461071a565b610520565b610095610571565b60005473ffffffffffffffffffffffffffffffffffffffff163314610261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f4465706c6f79657257686974656c6973743a2066756e6374696f6e2063616e2060448201527f6f6e6c792062652063616c6c656420627920746865206f776e6572206f66207460648201527f68697320636f6e74726163740000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168515159081179091558251938452908301527f8daaf060c3306c38e068a75c054bf96ecd85a3db1252712c4d93632744c42e0d910160405180910390a15050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f4465706c6f79657257686974656c6973743a2066756e6374696f6e2063616e2060448201527f6f6e6c792062652063616c6c656420627920746865206f776e6572206f66207460648201527f68697320636f6e74726163740000000000000000000000000000000000000000608482015260a401610258565b73ffffffffffffffffffffffffffffffffffffffff8116610485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f4465706c6f79657257686974656c6973743a2063616e206f6e6c79206265206460448201527f697361626c65642076696120656e61626c65417262697472617279436f6e747260648201527f6163744465706c6f796d656e7400000000000000000000000000000000000000608482015260a401610258565b6000546040805173ffffffffffffffffffffffffffffffffffffffff928316815291831660208301527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c910160405180910390a1600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000805473ffffffffffffffffffffffffffffffffffffffff16158061056b575073ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff165b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461063e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f4465706c6f79657257686974656c6973743a2066756e6374696f6e2063616e2060448201527f6f6e6c792062652063616c6c656420627920746865206f776e6572206f66207460648201527f68697320636f6e74726163740000000000000000000000000000000000000000608482015260a401610258565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681527fc0e106cf568e50698fdbde1eff56f5a5c966cc7958e37e276918e9e4ccdf8cd49060200160405180910390a1600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d957600080fd5b919050565b600080604083850312156106f157600080fd5b6106fa836106b5565b91506020830135801515811461070f57600080fd5b809150509250929050565b60006020828403121561072c57600080fd5b610735826106b5565b9392505050565b600060208083528351808285015260005b818110156107695785810183015185820160400152820161074d565b8181111561077b576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(DeployerWhitelistStorageLayoutJSON), DeployerWhitelistStorageLayout); err != nil { + panic(err) + } + + layouts["DeployerWhitelist"] = DeployerWhitelistStorageLayout + deployedBytecodes["DeployerWhitelist"] = DeployerWhitelistDeployedBin +} diff --git a/op-bindings/bindings/disputegamefactory.go b/op-bindings/bindings/disputegamefactory.go new file mode 100644 index 000000000..ab4bab880 --- /dev/null +++ b/op-bindings/bindings/disputegamefactory.go @@ -0,0 +1,1159 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// DisputeGameFactoryMetaData contains all meta data concerning the DisputeGameFactory contract. +var DisputeGameFactoryMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"Hash\",\"name\":\"uuid\",\"type\":\"bytes32\"}],\"name\":\"GameAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"GameType\",\"name\":\"gameType\",\"type\":\"uint8\"}],\"name\":\"NoImplementation\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"disputeProxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"GameType\",\"name\":\"gameType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"Claim\",\"name\":\"rootClaim\",\"type\":\"bytes32\"}],\"name\":\"DisputeGameCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"GameType\",\"name\":\"gameType\",\"type\":\"uint8\"}],\"name\":\"ImplementationSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"GameType\",\"name\":\"_gameType\",\"type\":\"uint8\"},{\"internalType\":\"Claim\",\"name\":\"_rootClaim\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"contractIDisputeGame\",\"name\":\"proxy_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"gameAtIndex\",\"outputs\":[{\"internalType\":\"GameType\",\"name\":\"gameType_\",\"type\":\"uint8\"},{\"internalType\":\"Timestamp\",\"name\":\"timestamp_\",\"type\":\"uint64\"},{\"internalType\":\"contractIDisputeGame\",\"name\":\"proxy_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"gameCount_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"GameType\",\"name\":\"\",\"type\":\"uint8\"}],\"name\":\"gameImpls\",\"outputs\":[{\"internalType\":\"contractIDisputeGame\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"GameType\",\"name\":\"_gameType\",\"type\":\"uint8\"},{\"internalType\":\"Claim\",\"name\":\"_rootClaim\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"games\",\"outputs\":[{\"internalType\":\"contractIDisputeGame\",\"name\":\"proxy_\",\"type\":\"address\"},{\"internalType\":\"Timestamp\",\"name\":\"timestamp_\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"GameType\",\"name\":\"_gameType\",\"type\":\"uint8\"},{\"internalType\":\"Claim\",\"name\":\"_rootClaim\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"getGameUUID\",\"outputs\":[{\"internalType\":\"Hash\",\"name\":\"uuid_\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"GameType\",\"name\":\"_gameType\",\"type\":\"uint8\"},{\"internalType\":\"contractIDisputeGame\",\"name\":\"_impl\",\"type\":\"address\"}],\"name\":\"setImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60806040523480156200001157600080fd5b506200001e600062000024565b62000292565b600054610100900460ff1615808015620000455750600054600160ff909116105b8062000075575062000062306200016260201b6200097e1760201c565b15801562000075575060005460ff166001145b620000de5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000102576000805461ff0019166101001790555b6200010c62000171565b6200011782620001d9565b80156200015e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054610100900460ff16620001cd5760405162461bcd60e51b815260206004820152602b6024820152600080516020620012d183398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000d5565b620001d76200022b565b565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16620002875760405162461bcd60e51b815260206004820152602b6024820152600080516020620012d183398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000d5565b620001d733620001d9565b61102f80620002a26000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80638da5cb5b11610081578063c4d66de81161005b578063c4d66de8146102e8578063dfa162d3146102fb578063f2fde38b1461033157600080fd5b80638da5cb5b14610231578063bb8aa1fc1461024f578063c49d5271146102a057600080fd5b80634d1975b4116100b25780634d1975b4146101d857806354fd4d50146101e0578063715018a61461022957600080fd5b806326daafbe146100d95780633142e55e1461018b57806345583b7a146101c3575b600080fd5b6101786100e7366004610d45565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0810180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0830180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08086018051988652968352606087529451609f0190941683209190925291905291905290565b6040519081526020015b60405180910390f35b61019e610199366004610e2e565b610344565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610182565b6101d66101d1366004610ed7565b6105a6565b005b606754610178565b61021c6040518060400160405280600581526020017f302e302e3600000000000000000000000000000000000000000000000000000081525081565b6040516101829190610f0e565b6101d661062d565b60335473ffffffffffffffffffffffffffffffffffffffff1661019e565b61026261025d366004610f81565b610641565b6040805160ff909416845267ffffffffffffffff909216602084015273ffffffffffffffffffffffffffffffffffffffff1690820152606001610182565b6102b36102ae366004610e2e565b6106a3565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835267ffffffffffffffff909116602083015201610182565b6101d66102f6366004610f9a565b61072b565b61019e610309366004610fbe565b60656020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101d661033f366004610f9a565b6108c7565b60ff841660009081526065602052604081205473ffffffffffffffffffffffffffffffffffffffff16806103ae576040517f44265d6f00000000000000000000000000000000000000000000000000000000815260ff871660048201526024015b60405180910390fd5b6104118585856040516020016103c693929190610fd9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905273ffffffffffffffffffffffffffffffffffffffff83169061099a565b91508173ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561045b57600080fd5b505af115801561046f573d6000803e3d6000fd5b5050505060006104b6878787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506100e792505050565b60008181526066602052604090205490915015610502576040517f014f6fe5000000000000000000000000000000000000000000000000000000008152600481018290526024016103a5565b60004260b81b60f889901b178417600083815260666020526040808220839055606780546001810182559083527f9787eeb91fe3101235e4a76063c7023ecb40f923f97916639c598592fa30d6ae0183905551919250889160ff8b169173ffffffffffffffffffffffffffffffffffffffff8816917ffad0599ff449d8d9685eadecca8cb9e00924c5fd8367c1c09469824939e1ffec9190a4505050949350505050565b6105ae610ace565b60ff821660008181526065602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616908117909155905190917f623713f72f6e427a8044bb8b3bd6834357cf285decbaa21bcc73c1d0632c4d8491a35050565b610635610ace565b61063f6000610b4f565b565b60008060006106966067858154811061065c5761065c610ff3565b906000526020600020015460f881901c9167ffffffffffffffff60b883901c169173ffffffffffffffffffffffffffffffffffffffff1690565b9196909550909350915050565b60008060006106e9878787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506100e792505050565b60009081526066602052604090205473ffffffffffffffffffffffffffffffffffffffff81169860b89190911c67ffffffffffffffff16975095505050505050565b600054610100900460ff161580801561074b5750600054600160ff909116105b806107655750303b158015610765575060005460ff166001145b6107f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016103a5565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561084f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610857610bc6565b61086082610b4f565b80156108c357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6108cf610ace565b73ffffffffffffffffffffffffffffffffffffffff8116610972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016103a5565b61097b81610b4f565b50565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60006002825101603f8101600a81036040518360581b8260e81b177f6100003d81600a3d39f3363d3d373d3d3d3d610000806035363936013d7300001781528660601b601e8201527f5af43d3d93803e603357fd5bf300000000000000000000000000000000000000603282015285519150603f8101602087015b60208410610a5257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09093019260209182019101610a15565b517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602085900360031b1b16815260f085901b9083015282816000f0945084610abf577febfef1880000000000000000000000000000000000000000000000000000000060005260206000fd5b90910160405250909392505050565b60335473ffffffffffffffffffffffffffffffffffffffff16331461063f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103a5565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610c5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016103a5565b61063f600054610100900460ff16610cf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016103a5565b61063f33610b4f565b803560ff81168114610d1157600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600060608486031215610d5a57600080fd5b610d6384610d00565b925060208401359150604084013567ffffffffffffffff80821115610d8757600080fd5b818601915086601f830112610d9b57600080fd5b813581811115610dad57610dad610d16565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610df357610df3610d16565b81604052828152896020848701011115610e0c57600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60008060008060608587031215610e4457600080fd5b610e4d85610d00565b935060208501359250604085013567ffffffffffffffff80821115610e7157600080fd5b818701915087601f830112610e8557600080fd5b813581811115610e9457600080fd5b886020828501011115610ea657600080fd5b95989497505060200194505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461097b57600080fd5b60008060408385031215610eea57600080fd5b610ef383610d00565b91506020830135610f0381610eb5565b809150509250929050565b600060208083528351808285015260005b81811015610f3b57858101830151858201604001528201610f1f565b81811115610f4d576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600060208284031215610f9357600080fd5b5035919050565b600060208284031215610fac57600080fd5b8135610fb781610eb5565b9392505050565b600060208284031215610fd057600080fd5b610fb782610d00565b838152818360208301376000910160200190815292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", +} + +// DisputeGameFactoryABI is the input ABI used to generate the binding from. +// Deprecated: Use DisputeGameFactoryMetaData.ABI instead. +var DisputeGameFactoryABI = DisputeGameFactoryMetaData.ABI + +// DisputeGameFactoryBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use DisputeGameFactoryMetaData.Bin instead. +var DisputeGameFactoryBin = DisputeGameFactoryMetaData.Bin + +// DeployDisputeGameFactory deploys a new Ethereum contract, binding an instance of DisputeGameFactory to it. +func DeployDisputeGameFactory(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *DisputeGameFactory, error) { + parsed, err := DisputeGameFactoryMetaData.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(DisputeGameFactoryBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &DisputeGameFactory{DisputeGameFactoryCaller: DisputeGameFactoryCaller{contract: contract}, DisputeGameFactoryTransactor: DisputeGameFactoryTransactor{contract: contract}, DisputeGameFactoryFilterer: DisputeGameFactoryFilterer{contract: contract}}, nil +} + +// DisputeGameFactory is an auto generated Go binding around an Ethereum contract. +type DisputeGameFactory struct { + DisputeGameFactoryCaller // Read-only binding to the contract + DisputeGameFactoryTransactor // Write-only binding to the contract + DisputeGameFactoryFilterer // Log filterer for contract events +} + +// DisputeGameFactoryCaller is an auto generated read-only Go binding around an Ethereum contract. +type DisputeGameFactoryCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// DisputeGameFactoryTransactor is an auto generated write-only Go binding around an Ethereum contract. +type DisputeGameFactoryTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// DisputeGameFactoryFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type DisputeGameFactoryFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// DisputeGameFactorySession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type DisputeGameFactorySession struct { + Contract *DisputeGameFactory // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// DisputeGameFactoryCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type DisputeGameFactoryCallerSession struct { + Contract *DisputeGameFactoryCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// DisputeGameFactoryTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type DisputeGameFactoryTransactorSession struct { + Contract *DisputeGameFactoryTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// DisputeGameFactoryRaw is an auto generated low-level Go binding around an Ethereum contract. +type DisputeGameFactoryRaw struct { + Contract *DisputeGameFactory // Generic contract binding to access the raw methods on +} + +// DisputeGameFactoryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type DisputeGameFactoryCallerRaw struct { + Contract *DisputeGameFactoryCaller // Generic read-only contract binding to access the raw methods on +} + +// DisputeGameFactoryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type DisputeGameFactoryTransactorRaw struct { + Contract *DisputeGameFactoryTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewDisputeGameFactory creates a new instance of DisputeGameFactory, bound to a specific deployed contract. +func NewDisputeGameFactory(address common.Address, backend bind.ContractBackend) (*DisputeGameFactory, error) { + contract, err := bindDisputeGameFactory(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &DisputeGameFactory{DisputeGameFactoryCaller: DisputeGameFactoryCaller{contract: contract}, DisputeGameFactoryTransactor: DisputeGameFactoryTransactor{contract: contract}, DisputeGameFactoryFilterer: DisputeGameFactoryFilterer{contract: contract}}, nil +} + +// NewDisputeGameFactoryCaller creates a new read-only instance of DisputeGameFactory, bound to a specific deployed contract. +func NewDisputeGameFactoryCaller(address common.Address, caller bind.ContractCaller) (*DisputeGameFactoryCaller, error) { + contract, err := bindDisputeGameFactory(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &DisputeGameFactoryCaller{contract: contract}, nil +} + +// NewDisputeGameFactoryTransactor creates a new write-only instance of DisputeGameFactory, bound to a specific deployed contract. +func NewDisputeGameFactoryTransactor(address common.Address, transactor bind.ContractTransactor) (*DisputeGameFactoryTransactor, error) { + contract, err := bindDisputeGameFactory(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &DisputeGameFactoryTransactor{contract: contract}, nil +} + +// NewDisputeGameFactoryFilterer creates a new log filterer instance of DisputeGameFactory, bound to a specific deployed contract. +func NewDisputeGameFactoryFilterer(address common.Address, filterer bind.ContractFilterer) (*DisputeGameFactoryFilterer, error) { + contract, err := bindDisputeGameFactory(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &DisputeGameFactoryFilterer{contract: contract}, nil +} + +// bindDisputeGameFactory binds a generic wrapper to an already deployed contract. +func bindDisputeGameFactory(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(DisputeGameFactoryABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_DisputeGameFactory *DisputeGameFactoryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _DisputeGameFactory.Contract.DisputeGameFactoryCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_DisputeGameFactory *DisputeGameFactoryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _DisputeGameFactory.Contract.DisputeGameFactoryTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_DisputeGameFactory *DisputeGameFactoryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _DisputeGameFactory.Contract.DisputeGameFactoryTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_DisputeGameFactory *DisputeGameFactoryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _DisputeGameFactory.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_DisputeGameFactory *DisputeGameFactoryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _DisputeGameFactory.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_DisputeGameFactory *DisputeGameFactoryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _DisputeGameFactory.Contract.contract.Transact(opts, method, params...) +} + +// GameAtIndex is a free data retrieval call binding the contract method 0xbb8aa1fc. +// +// Solidity: function gameAtIndex(uint256 _index) view returns(uint8 gameType_, uint64 timestamp_, address proxy_) +func (_DisputeGameFactory *DisputeGameFactoryCaller) GameAtIndex(opts *bind.CallOpts, _index *big.Int) (struct { + GameType uint8 + Timestamp uint64 + Proxy common.Address +}, error) { + var out []interface{} + err := _DisputeGameFactory.contract.Call(opts, &out, "gameAtIndex", _index) + + outstruct := new(struct { + GameType uint8 + Timestamp uint64 + Proxy common.Address + }) + if err != nil { + return *outstruct, err + } + + outstruct.GameType = *abi.ConvertType(out[0], new(uint8)).(*uint8) + outstruct.Timestamp = *abi.ConvertType(out[1], new(uint64)).(*uint64) + outstruct.Proxy = *abi.ConvertType(out[2], new(common.Address)).(*common.Address) + + return *outstruct, err + +} + +// GameAtIndex is a free data retrieval call binding the contract method 0xbb8aa1fc. +// +// Solidity: function gameAtIndex(uint256 _index) view returns(uint8 gameType_, uint64 timestamp_, address proxy_) +func (_DisputeGameFactory *DisputeGameFactorySession) GameAtIndex(_index *big.Int) (struct { + GameType uint8 + Timestamp uint64 + Proxy common.Address +}, error) { + return _DisputeGameFactory.Contract.GameAtIndex(&_DisputeGameFactory.CallOpts, _index) +} + +// GameAtIndex is a free data retrieval call binding the contract method 0xbb8aa1fc. +// +// Solidity: function gameAtIndex(uint256 _index) view returns(uint8 gameType_, uint64 timestamp_, address proxy_) +func (_DisputeGameFactory *DisputeGameFactoryCallerSession) GameAtIndex(_index *big.Int) (struct { + GameType uint8 + Timestamp uint64 + Proxy common.Address +}, error) { + return _DisputeGameFactory.Contract.GameAtIndex(&_DisputeGameFactory.CallOpts, _index) +} + +// GameCount is a free data retrieval call binding the contract method 0x4d1975b4. +// +// Solidity: function gameCount() view returns(uint256 gameCount_) +func (_DisputeGameFactory *DisputeGameFactoryCaller) GameCount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _DisputeGameFactory.contract.Call(opts, &out, "gameCount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GameCount is a free data retrieval call binding the contract method 0x4d1975b4. +// +// Solidity: function gameCount() view returns(uint256 gameCount_) +func (_DisputeGameFactory *DisputeGameFactorySession) GameCount() (*big.Int, error) { + return _DisputeGameFactory.Contract.GameCount(&_DisputeGameFactory.CallOpts) +} + +// GameCount is a free data retrieval call binding the contract method 0x4d1975b4. +// +// Solidity: function gameCount() view returns(uint256 gameCount_) +func (_DisputeGameFactory *DisputeGameFactoryCallerSession) GameCount() (*big.Int, error) { + return _DisputeGameFactory.Contract.GameCount(&_DisputeGameFactory.CallOpts) +} + +// GameImpls is a free data retrieval call binding the contract method 0xdfa162d3. +// +// Solidity: function gameImpls(uint8 ) view returns(address) +func (_DisputeGameFactory *DisputeGameFactoryCaller) GameImpls(opts *bind.CallOpts, arg0 uint8) (common.Address, error) { + var out []interface{} + err := _DisputeGameFactory.contract.Call(opts, &out, "gameImpls", arg0) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GameImpls is a free data retrieval call binding the contract method 0xdfa162d3. +// +// Solidity: function gameImpls(uint8 ) view returns(address) +func (_DisputeGameFactory *DisputeGameFactorySession) GameImpls(arg0 uint8) (common.Address, error) { + return _DisputeGameFactory.Contract.GameImpls(&_DisputeGameFactory.CallOpts, arg0) +} + +// GameImpls is a free data retrieval call binding the contract method 0xdfa162d3. +// +// Solidity: function gameImpls(uint8 ) view returns(address) +func (_DisputeGameFactory *DisputeGameFactoryCallerSession) GameImpls(arg0 uint8) (common.Address, error) { + return _DisputeGameFactory.Contract.GameImpls(&_DisputeGameFactory.CallOpts, arg0) +} + +// Games is a free data retrieval call binding the contract method 0xc49d5271. +// +// Solidity: function games(uint8 _gameType, bytes32 _rootClaim, bytes _extraData) view returns(address proxy_, uint64 timestamp_) +func (_DisputeGameFactory *DisputeGameFactoryCaller) Games(opts *bind.CallOpts, _gameType uint8, _rootClaim [32]byte, _extraData []byte) (struct { + Proxy common.Address + Timestamp uint64 +}, error) { + var out []interface{} + err := _DisputeGameFactory.contract.Call(opts, &out, "games", _gameType, _rootClaim, _extraData) + + outstruct := new(struct { + Proxy common.Address + Timestamp uint64 + }) + if err != nil { + return *outstruct, err + } + + outstruct.Proxy = *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + outstruct.Timestamp = *abi.ConvertType(out[1], new(uint64)).(*uint64) + + return *outstruct, err + +} + +// Games is a free data retrieval call binding the contract method 0xc49d5271. +// +// Solidity: function games(uint8 _gameType, bytes32 _rootClaim, bytes _extraData) view returns(address proxy_, uint64 timestamp_) +func (_DisputeGameFactory *DisputeGameFactorySession) Games(_gameType uint8, _rootClaim [32]byte, _extraData []byte) (struct { + Proxy common.Address + Timestamp uint64 +}, error) { + return _DisputeGameFactory.Contract.Games(&_DisputeGameFactory.CallOpts, _gameType, _rootClaim, _extraData) +} + +// Games is a free data retrieval call binding the contract method 0xc49d5271. +// +// Solidity: function games(uint8 _gameType, bytes32 _rootClaim, bytes _extraData) view returns(address proxy_, uint64 timestamp_) +func (_DisputeGameFactory *DisputeGameFactoryCallerSession) Games(_gameType uint8, _rootClaim [32]byte, _extraData []byte) (struct { + Proxy common.Address + Timestamp uint64 +}, error) { + return _DisputeGameFactory.Contract.Games(&_DisputeGameFactory.CallOpts, _gameType, _rootClaim, _extraData) +} + +// GetGameUUID is a free data retrieval call binding the contract method 0x26daafbe. +// +// Solidity: function getGameUUID(uint8 _gameType, bytes32 _rootClaim, bytes _extraData) pure returns(bytes32 uuid_) +func (_DisputeGameFactory *DisputeGameFactoryCaller) GetGameUUID(opts *bind.CallOpts, _gameType uint8, _rootClaim [32]byte, _extraData []byte) ([32]byte, error) { + var out []interface{} + err := _DisputeGameFactory.contract.Call(opts, &out, "getGameUUID", _gameType, _rootClaim, _extraData) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetGameUUID is a free data retrieval call binding the contract method 0x26daafbe. +// +// Solidity: function getGameUUID(uint8 _gameType, bytes32 _rootClaim, bytes _extraData) pure returns(bytes32 uuid_) +func (_DisputeGameFactory *DisputeGameFactorySession) GetGameUUID(_gameType uint8, _rootClaim [32]byte, _extraData []byte) ([32]byte, error) { + return _DisputeGameFactory.Contract.GetGameUUID(&_DisputeGameFactory.CallOpts, _gameType, _rootClaim, _extraData) +} + +// GetGameUUID is a free data retrieval call binding the contract method 0x26daafbe. +// +// Solidity: function getGameUUID(uint8 _gameType, bytes32 _rootClaim, bytes _extraData) pure returns(bytes32 uuid_) +func (_DisputeGameFactory *DisputeGameFactoryCallerSession) GetGameUUID(_gameType uint8, _rootClaim [32]byte, _extraData []byte) ([32]byte, error) { + return _DisputeGameFactory.Contract.GetGameUUID(&_DisputeGameFactory.CallOpts, _gameType, _rootClaim, _extraData) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_DisputeGameFactory *DisputeGameFactoryCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _DisputeGameFactory.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 + +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_DisputeGameFactory *DisputeGameFactorySession) Owner() (common.Address, error) { + return _DisputeGameFactory.Contract.Owner(&_DisputeGameFactory.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_DisputeGameFactory *DisputeGameFactoryCallerSession) Owner() (common.Address, error) { + return _DisputeGameFactory.Contract.Owner(&_DisputeGameFactory.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_DisputeGameFactory *DisputeGameFactoryCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _DisputeGameFactory.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_DisputeGameFactory *DisputeGameFactorySession) Version() (string, error) { + return _DisputeGameFactory.Contract.Version(&_DisputeGameFactory.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_DisputeGameFactory *DisputeGameFactoryCallerSession) Version() (string, error) { + return _DisputeGameFactory.Contract.Version(&_DisputeGameFactory.CallOpts) +} + +// Create is a paid mutator transaction binding the contract method 0x3142e55e. +// +// Solidity: function create(uint8 _gameType, bytes32 _rootClaim, bytes _extraData) returns(address proxy_) +func (_DisputeGameFactory *DisputeGameFactoryTransactor) Create(opts *bind.TransactOpts, _gameType uint8, _rootClaim [32]byte, _extraData []byte) (*types.Transaction, error) { + return _DisputeGameFactory.contract.Transact(opts, "create", _gameType, _rootClaim, _extraData) +} + +// Create is a paid mutator transaction binding the contract method 0x3142e55e. +// +// Solidity: function create(uint8 _gameType, bytes32 _rootClaim, bytes _extraData) returns(address proxy_) +func (_DisputeGameFactory *DisputeGameFactorySession) Create(_gameType uint8, _rootClaim [32]byte, _extraData []byte) (*types.Transaction, error) { + return _DisputeGameFactory.Contract.Create(&_DisputeGameFactory.TransactOpts, _gameType, _rootClaim, _extraData) +} + +// Create is a paid mutator transaction binding the contract method 0x3142e55e. +// +// Solidity: function create(uint8 _gameType, bytes32 _rootClaim, bytes _extraData) returns(address proxy_) +func (_DisputeGameFactory *DisputeGameFactoryTransactorSession) Create(_gameType uint8, _rootClaim [32]byte, _extraData []byte) (*types.Transaction, error) { + return _DisputeGameFactory.Contract.Create(&_DisputeGameFactory.TransactOpts, _gameType, _rootClaim, _extraData) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _owner) returns() +func (_DisputeGameFactory *DisputeGameFactoryTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address) (*types.Transaction, error) { + return _DisputeGameFactory.contract.Transact(opts, "initialize", _owner) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _owner) returns() +func (_DisputeGameFactory *DisputeGameFactorySession) Initialize(_owner common.Address) (*types.Transaction, error) { + return _DisputeGameFactory.Contract.Initialize(&_DisputeGameFactory.TransactOpts, _owner) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _owner) returns() +func (_DisputeGameFactory *DisputeGameFactoryTransactorSession) Initialize(_owner common.Address) (*types.Transaction, error) { + return _DisputeGameFactory.Contract.Initialize(&_DisputeGameFactory.TransactOpts, _owner) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_DisputeGameFactory *DisputeGameFactoryTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _DisputeGameFactory.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_DisputeGameFactory *DisputeGameFactorySession) RenounceOwnership() (*types.Transaction, error) { + return _DisputeGameFactory.Contract.RenounceOwnership(&_DisputeGameFactory.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_DisputeGameFactory *DisputeGameFactoryTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _DisputeGameFactory.Contract.RenounceOwnership(&_DisputeGameFactory.TransactOpts) +} + +// SetImplementation is a paid mutator transaction binding the contract method 0x45583b7a. +// +// Solidity: function setImplementation(uint8 _gameType, address _impl) returns() +func (_DisputeGameFactory *DisputeGameFactoryTransactor) SetImplementation(opts *bind.TransactOpts, _gameType uint8, _impl common.Address) (*types.Transaction, error) { + return _DisputeGameFactory.contract.Transact(opts, "setImplementation", _gameType, _impl) +} + +// SetImplementation is a paid mutator transaction binding the contract method 0x45583b7a. +// +// Solidity: function setImplementation(uint8 _gameType, address _impl) returns() +func (_DisputeGameFactory *DisputeGameFactorySession) SetImplementation(_gameType uint8, _impl common.Address) (*types.Transaction, error) { + return _DisputeGameFactory.Contract.SetImplementation(&_DisputeGameFactory.TransactOpts, _gameType, _impl) +} + +// SetImplementation is a paid mutator transaction binding the contract method 0x45583b7a. +// +// Solidity: function setImplementation(uint8 _gameType, address _impl) returns() +func (_DisputeGameFactory *DisputeGameFactoryTransactorSession) SetImplementation(_gameType uint8, _impl common.Address) (*types.Transaction, error) { + return _DisputeGameFactory.Contract.SetImplementation(&_DisputeGameFactory.TransactOpts, _gameType, _impl) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_DisputeGameFactory *DisputeGameFactoryTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _DisputeGameFactory.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_DisputeGameFactory *DisputeGameFactorySession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _DisputeGameFactory.Contract.TransferOwnership(&_DisputeGameFactory.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_DisputeGameFactory *DisputeGameFactoryTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _DisputeGameFactory.Contract.TransferOwnership(&_DisputeGameFactory.TransactOpts, newOwner) +} + +// DisputeGameFactoryDisputeGameCreatedIterator is returned from FilterDisputeGameCreated and is used to iterate over the raw logs and unpacked data for DisputeGameCreated events raised by the DisputeGameFactory contract. +type DisputeGameFactoryDisputeGameCreatedIterator struct { + Event *DisputeGameFactoryDisputeGameCreated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *DisputeGameFactoryDisputeGameCreatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(DisputeGameFactoryDisputeGameCreated) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(DisputeGameFactoryDisputeGameCreated) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *DisputeGameFactoryDisputeGameCreatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DisputeGameFactoryDisputeGameCreatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DisputeGameFactoryDisputeGameCreated represents a DisputeGameCreated event raised by the DisputeGameFactory contract. +type DisputeGameFactoryDisputeGameCreated struct { + DisputeProxy common.Address + GameType uint8 + RootClaim [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDisputeGameCreated is a free log retrieval operation binding the contract event 0xfad0599ff449d8d9685eadecca8cb9e00924c5fd8367c1c09469824939e1ffec. +// +// Solidity: event DisputeGameCreated(address indexed disputeProxy, uint8 indexed gameType, bytes32 indexed rootClaim) +func (_DisputeGameFactory *DisputeGameFactoryFilterer) FilterDisputeGameCreated(opts *bind.FilterOpts, disputeProxy []common.Address, gameType []uint8, rootClaim [][32]byte) (*DisputeGameFactoryDisputeGameCreatedIterator, error) { + + var disputeProxyRule []interface{} + for _, disputeProxyItem := range disputeProxy { + disputeProxyRule = append(disputeProxyRule, disputeProxyItem) + } + var gameTypeRule []interface{} + for _, gameTypeItem := range gameType { + gameTypeRule = append(gameTypeRule, gameTypeItem) + } + var rootClaimRule []interface{} + for _, rootClaimItem := range rootClaim { + rootClaimRule = append(rootClaimRule, rootClaimItem) + } + + logs, sub, err := _DisputeGameFactory.contract.FilterLogs(opts, "DisputeGameCreated", disputeProxyRule, gameTypeRule, rootClaimRule) + if err != nil { + return nil, err + } + return &DisputeGameFactoryDisputeGameCreatedIterator{contract: _DisputeGameFactory.contract, event: "DisputeGameCreated", logs: logs, sub: sub}, nil +} + +// WatchDisputeGameCreated is a free log subscription operation binding the contract event 0xfad0599ff449d8d9685eadecca8cb9e00924c5fd8367c1c09469824939e1ffec. +// +// Solidity: event DisputeGameCreated(address indexed disputeProxy, uint8 indexed gameType, bytes32 indexed rootClaim) +func (_DisputeGameFactory *DisputeGameFactoryFilterer) WatchDisputeGameCreated(opts *bind.WatchOpts, sink chan<- *DisputeGameFactoryDisputeGameCreated, disputeProxy []common.Address, gameType []uint8, rootClaim [][32]byte) (event.Subscription, error) { + + var disputeProxyRule []interface{} + for _, disputeProxyItem := range disputeProxy { + disputeProxyRule = append(disputeProxyRule, disputeProxyItem) + } + var gameTypeRule []interface{} + for _, gameTypeItem := range gameType { + gameTypeRule = append(gameTypeRule, gameTypeItem) + } + var rootClaimRule []interface{} + for _, rootClaimItem := range rootClaim { + rootClaimRule = append(rootClaimRule, rootClaimItem) + } + + logs, sub, err := _DisputeGameFactory.contract.WatchLogs(opts, "DisputeGameCreated", disputeProxyRule, gameTypeRule, rootClaimRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(DisputeGameFactoryDisputeGameCreated) + if err := _DisputeGameFactory.contract.UnpackLog(event, "DisputeGameCreated", 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 +} + +// ParseDisputeGameCreated is a log parse operation binding the contract event 0xfad0599ff449d8d9685eadecca8cb9e00924c5fd8367c1c09469824939e1ffec. +// +// Solidity: event DisputeGameCreated(address indexed disputeProxy, uint8 indexed gameType, bytes32 indexed rootClaim) +func (_DisputeGameFactory *DisputeGameFactoryFilterer) ParseDisputeGameCreated(log types.Log) (*DisputeGameFactoryDisputeGameCreated, error) { + event := new(DisputeGameFactoryDisputeGameCreated) + if err := _DisputeGameFactory.contract.UnpackLog(event, "DisputeGameCreated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DisputeGameFactoryImplementationSetIterator is returned from FilterImplementationSet and is used to iterate over the raw logs and unpacked data for ImplementationSet events raised by the DisputeGameFactory contract. +type DisputeGameFactoryImplementationSetIterator struct { + Event *DisputeGameFactoryImplementationSet // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *DisputeGameFactoryImplementationSetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(DisputeGameFactoryImplementationSet) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(DisputeGameFactoryImplementationSet) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *DisputeGameFactoryImplementationSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DisputeGameFactoryImplementationSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DisputeGameFactoryImplementationSet represents a ImplementationSet event raised by the DisputeGameFactory contract. +type DisputeGameFactoryImplementationSet struct { + Impl common.Address + GameType uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterImplementationSet is a free log retrieval operation binding the contract event 0x623713f72f6e427a8044bb8b3bd6834357cf285decbaa21bcc73c1d0632c4d84. +// +// Solidity: event ImplementationSet(address indexed impl, uint8 indexed gameType) +func (_DisputeGameFactory *DisputeGameFactoryFilterer) FilterImplementationSet(opts *bind.FilterOpts, impl []common.Address, gameType []uint8) (*DisputeGameFactoryImplementationSetIterator, error) { + + var implRule []interface{} + for _, implItem := range impl { + implRule = append(implRule, implItem) + } + var gameTypeRule []interface{} + for _, gameTypeItem := range gameType { + gameTypeRule = append(gameTypeRule, gameTypeItem) + } + + logs, sub, err := _DisputeGameFactory.contract.FilterLogs(opts, "ImplementationSet", implRule, gameTypeRule) + if err != nil { + return nil, err + } + return &DisputeGameFactoryImplementationSetIterator{contract: _DisputeGameFactory.contract, event: "ImplementationSet", logs: logs, sub: sub}, nil +} + +// WatchImplementationSet is a free log subscription operation binding the contract event 0x623713f72f6e427a8044bb8b3bd6834357cf285decbaa21bcc73c1d0632c4d84. +// +// Solidity: event ImplementationSet(address indexed impl, uint8 indexed gameType) +func (_DisputeGameFactory *DisputeGameFactoryFilterer) WatchImplementationSet(opts *bind.WatchOpts, sink chan<- *DisputeGameFactoryImplementationSet, impl []common.Address, gameType []uint8) (event.Subscription, error) { + + var implRule []interface{} + for _, implItem := range impl { + implRule = append(implRule, implItem) + } + var gameTypeRule []interface{} + for _, gameTypeItem := range gameType { + gameTypeRule = append(gameTypeRule, gameTypeItem) + } + + logs, sub, err := _DisputeGameFactory.contract.WatchLogs(opts, "ImplementationSet", implRule, gameTypeRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(DisputeGameFactoryImplementationSet) + if err := _DisputeGameFactory.contract.UnpackLog(event, "ImplementationSet", 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 +} + +// ParseImplementationSet is a log parse operation binding the contract event 0x623713f72f6e427a8044bb8b3bd6834357cf285decbaa21bcc73c1d0632c4d84. +// +// Solidity: event ImplementationSet(address indexed impl, uint8 indexed gameType) +func (_DisputeGameFactory *DisputeGameFactoryFilterer) ParseImplementationSet(log types.Log) (*DisputeGameFactoryImplementationSet, error) { + event := new(DisputeGameFactoryImplementationSet) + if err := _DisputeGameFactory.contract.UnpackLog(event, "ImplementationSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DisputeGameFactoryInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the DisputeGameFactory contract. +type DisputeGameFactoryInitializedIterator struct { + Event *DisputeGameFactoryInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *DisputeGameFactoryInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(DisputeGameFactoryInitialized) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(DisputeGameFactoryInitialized) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *DisputeGameFactoryInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DisputeGameFactoryInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DisputeGameFactoryInitialized represents a Initialized event raised by the DisputeGameFactory contract. +type DisputeGameFactoryInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_DisputeGameFactory *DisputeGameFactoryFilterer) FilterInitialized(opts *bind.FilterOpts) (*DisputeGameFactoryInitializedIterator, error) { + + logs, sub, err := _DisputeGameFactory.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &DisputeGameFactoryInitializedIterator{contract: _DisputeGameFactory.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_DisputeGameFactory *DisputeGameFactoryFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *DisputeGameFactoryInitialized) (event.Subscription, error) { + + logs, sub, err := _DisputeGameFactory.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: + // New log arrived, parse the event and forward to the user + event := new(DisputeGameFactoryInitialized) + if err := _DisputeGameFactory.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 +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_DisputeGameFactory *DisputeGameFactoryFilterer) ParseInitialized(log types.Log) (*DisputeGameFactoryInitialized, error) { + event := new(DisputeGameFactoryInitialized) + if err := _DisputeGameFactory.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DisputeGameFactoryOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the DisputeGameFactory contract. +type DisputeGameFactoryOwnershipTransferredIterator struct { + Event *DisputeGameFactoryOwnershipTransferred // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *DisputeGameFactoryOwnershipTransferredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(DisputeGameFactoryOwnershipTransferred) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(DisputeGameFactoryOwnershipTransferred) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *DisputeGameFactoryOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DisputeGameFactoryOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DisputeGameFactoryOwnershipTransferred represents a OwnershipTransferred event raised by the DisputeGameFactory contract. +type DisputeGameFactoryOwnershipTransferred struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_DisputeGameFactory *DisputeGameFactoryFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*DisputeGameFactoryOwnershipTransferredIterator, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _DisputeGameFactory.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &DisputeGameFactoryOwnershipTransferredIterator{contract: _DisputeGameFactory.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_DisputeGameFactory *DisputeGameFactoryFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *DisputeGameFactoryOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _DisputeGameFactory.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(DisputeGameFactoryOwnershipTransferred) + if err := _DisputeGameFactory.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 +} + +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_DisputeGameFactory *DisputeGameFactoryFilterer) ParseOwnershipTransferred(log types.Log) (*DisputeGameFactoryOwnershipTransferred, error) { + event := new(DisputeGameFactoryOwnershipTransferred) + if err := _DisputeGameFactory.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-bindings/bindings/disputegamefactory_more.go b/op-bindings/bindings/disputegamefactory_more.go new file mode 100644 index 000000000..6869e051e --- /dev/null +++ b/op-bindings/bindings/disputegamefactory_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const DisputeGameFactoryStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/dispute/DisputeGameFactory.sol:DisputeGameFactory\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"src/dispute/DisputeGameFactory.sol:DisputeGameFactory\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"src/dispute/DisputeGameFactory.sol:DisputeGameFactory\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)50_storage\"},{\"astId\":1003,\"contract\":\"src/dispute/DisputeGameFactory.sol:DisputeGameFactory\",\"label\":\"_owner\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_address\"},{\"astId\":1004,\"contract\":\"src/dispute/DisputeGameFactory.sol:DisputeGameFactory\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_array(t_uint256)49_storage\"},{\"astId\":1005,\"contract\":\"src/dispute/DisputeGameFactory.sol:DisputeGameFactory\",\"label\":\"gameImpls\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_mapping(t_userDefinedValueType(GameType)1010,t_contract(IDisputeGame)1008)\"},{\"astId\":1006,\"contract\":\"src/dispute/DisputeGameFactory.sol:DisputeGameFactory\",\"label\":\"_disputeGames\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_mapping(t_userDefinedValueType(Hash)1011,t_userDefinedValueType(GameId)1009)\"},{\"astId\":1007,\"contract\":\"src/dispute/DisputeGameFactory.sol:DisputeGameFactory\",\"label\":\"_disputeGameList\",\"offset\":0,\"slot\":\"103\",\"type\":\"t_array(t_userDefinedValueType(GameId)1009)dyn_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)49_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\",\"base\":\"t_uint256\"},\"t_array(t_uint256)50_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\",\"base\":\"t_uint256\"},\"t_array(t_userDefinedValueType(GameId)1009)dyn_storage\":{\"encoding\":\"dynamic_array\",\"label\":\"GameId[]\",\"numberOfBytes\":\"32\",\"base\":\"t_userDefinedValueType(GameId)1009\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_contract(IDisputeGame)1008\":{\"encoding\":\"inplace\",\"label\":\"contract IDisputeGame\",\"numberOfBytes\":\"20\"},\"t_mapping(t_userDefinedValueType(GameType)1010,t_contract(IDisputeGame)1008)\":{\"encoding\":\"mapping\",\"label\":\"mapping(GameType =\u003e contract IDisputeGame)\",\"numberOfBytes\":\"32\",\"key\":\"t_userDefinedValueType(GameType)1010\",\"value\":\"t_contract(IDisputeGame)1008\"},\"t_mapping(t_userDefinedValueType(Hash)1011,t_userDefinedValueType(GameId)1009)\":{\"encoding\":\"mapping\",\"label\":\"mapping(Hash =\u003e GameId)\",\"numberOfBytes\":\"32\",\"key\":\"t_userDefinedValueType(Hash)1011\",\"value\":\"t_userDefinedValueType(GameId)1009\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"},\"t_userDefinedValueType(GameId)1009\":{\"encoding\":\"inplace\",\"label\":\"GameId\",\"numberOfBytes\":\"32\"},\"t_userDefinedValueType(GameType)1010\":{\"encoding\":\"inplace\",\"label\":\"GameType\",\"numberOfBytes\":\"1\"},\"t_userDefinedValueType(Hash)1011\":{\"encoding\":\"inplace\",\"label\":\"Hash\",\"numberOfBytes\":\"32\"}}}" + +var DisputeGameFactoryStorageLayout = new(solc.StorageLayout) + +var DisputeGameFactoryDeployedBin = "0x608060405234801561001057600080fd5b50600436106100d45760003560e01c80638da5cb5b11610081578063c4d66de81161005b578063c4d66de8146102e8578063dfa162d3146102fb578063f2fde38b1461033157600080fd5b80638da5cb5b14610231578063bb8aa1fc1461024f578063c49d5271146102a057600080fd5b80634d1975b4116100b25780634d1975b4146101d857806354fd4d50146101e0578063715018a61461022957600080fd5b806326daafbe146100d95780633142e55e1461018b57806345583b7a146101c3575b600080fd5b6101786100e7366004610d45565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0810180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0830180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08086018051988652968352606087529451609f0190941683209190925291905291905290565b6040519081526020015b60405180910390f35b61019e610199366004610e2e565b610344565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610182565b6101d66101d1366004610ed7565b6105a6565b005b606754610178565b61021c6040518060400160405280600581526020017f302e302e3600000000000000000000000000000000000000000000000000000081525081565b6040516101829190610f0e565b6101d661062d565b60335473ffffffffffffffffffffffffffffffffffffffff1661019e565b61026261025d366004610f81565b610641565b6040805160ff909416845267ffffffffffffffff909216602084015273ffffffffffffffffffffffffffffffffffffffff1690820152606001610182565b6102b36102ae366004610e2e565b6106a3565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835267ffffffffffffffff909116602083015201610182565b6101d66102f6366004610f9a565b61072b565b61019e610309366004610fbe565b60656020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101d661033f366004610f9a565b6108c7565b60ff841660009081526065602052604081205473ffffffffffffffffffffffffffffffffffffffff16806103ae576040517f44265d6f00000000000000000000000000000000000000000000000000000000815260ff871660048201526024015b60405180910390fd5b6104118585856040516020016103c693929190610fd9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905273ffffffffffffffffffffffffffffffffffffffff83169061099a565b91508173ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561045b57600080fd5b505af115801561046f573d6000803e3d6000fd5b5050505060006104b6878787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506100e792505050565b60008181526066602052604090205490915015610502576040517f014f6fe5000000000000000000000000000000000000000000000000000000008152600481018290526024016103a5565b60004260b81b60f889901b178417600083815260666020526040808220839055606780546001810182559083527f9787eeb91fe3101235e4a76063c7023ecb40f923f97916639c598592fa30d6ae0183905551919250889160ff8b169173ffffffffffffffffffffffffffffffffffffffff8816917ffad0599ff449d8d9685eadecca8cb9e00924c5fd8367c1c09469824939e1ffec9190a4505050949350505050565b6105ae610ace565b60ff821660008181526065602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616908117909155905190917f623713f72f6e427a8044bb8b3bd6834357cf285decbaa21bcc73c1d0632c4d8491a35050565b610635610ace565b61063f6000610b4f565b565b60008060006106966067858154811061065c5761065c610ff3565b906000526020600020015460f881901c9167ffffffffffffffff60b883901c169173ffffffffffffffffffffffffffffffffffffffff1690565b9196909550909350915050565b60008060006106e9878787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506100e792505050565b60009081526066602052604090205473ffffffffffffffffffffffffffffffffffffffff81169860b89190911c67ffffffffffffffff16975095505050505050565b600054610100900460ff161580801561074b5750600054600160ff909116105b806107655750303b158015610765575060005460ff166001145b6107f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016103a5565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561084f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610857610bc6565b61086082610b4f565b80156108c357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6108cf610ace565b73ffffffffffffffffffffffffffffffffffffffff8116610972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016103a5565b61097b81610b4f565b50565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60006002825101603f8101600a81036040518360581b8260e81b177f6100003d81600a3d39f3363d3d373d3d3d3d610000806035363936013d7300001781528660601b601e8201527f5af43d3d93803e603357fd5bf300000000000000000000000000000000000000603282015285519150603f8101602087015b60208410610a5257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09093019260209182019101610a15565b517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602085900360031b1b16815260f085901b9083015282816000f0945084610abf577febfef1880000000000000000000000000000000000000000000000000000000060005260206000fd5b90910160405250909392505050565b60335473ffffffffffffffffffffffffffffffffffffffff16331461063f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103a5565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610c5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016103a5565b61063f600054610100900460ff16610cf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016103a5565b61063f33610b4f565b803560ff81168114610d1157600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600060608486031215610d5a57600080fd5b610d6384610d00565b925060208401359150604084013567ffffffffffffffff80821115610d8757600080fd5b818601915086601f830112610d9b57600080fd5b813581811115610dad57610dad610d16565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610df357610df3610d16565b81604052828152896020848701011115610e0c57600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60008060008060608587031215610e4457600080fd5b610e4d85610d00565b935060208501359250604085013567ffffffffffffffff80821115610e7157600080fd5b818701915087601f830112610e8557600080fd5b813581811115610e9457600080fd5b886020828501011115610ea657600080fd5b95989497505060200194505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461097b57600080fd5b60008060408385031215610eea57600080fd5b610ef383610d00565b91506020830135610f0381610eb5565b809150509250929050565b600060208083528351808285015260005b81811015610f3b57858101830151858201604001528201610f1f565b81811115610f4d576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600060208284031215610f9357600080fd5b5035919050565b600060208284031215610fac57600080fd5b8135610fb781610eb5565b9392505050565b600060208284031215610fd057600080fd5b610fb782610d00565b838152818360208301376000910160200190815292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(DisputeGameFactoryStorageLayoutJSON), DisputeGameFactoryStorageLayout); err != nil { + panic(err) + } + + layouts["DisputeGameFactory"] = DisputeGameFactoryStorageLayout + deployedBytecodes["DisputeGameFactory"] = DisputeGameFactoryDeployedBin +} diff --git a/op-bindings/bindings/eas.go b/op-bindings/bindings/eas.go new file mode 100644 index 000000000..623166d4e --- /dev/null +++ b/op-bindings/bindings/eas.go @@ -0,0 +1,1693 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// Attestation is an auto generated low-level Go binding around an user-defined struct. +type Attestation struct { + Uid [32]byte + Schema [32]byte + Time uint64 + ExpirationTime uint64 + RevocationTime uint64 + RefUID [32]byte + Recipient common.Address + Attester common.Address + Revocable bool + Data []byte +} + +// AttestationRequest is an auto generated low-level Go binding around an user-defined struct. +type AttestationRequest struct { + Schema [32]byte + Data AttestationRequestData +} + +// AttestationRequestData is an auto generated low-level Go binding around an user-defined struct. +type AttestationRequestData struct { + Recipient common.Address + ExpirationTime uint64 + Revocable bool + RefUID [32]byte + Data []byte + Value *big.Int +} + +// DelegatedAttestationRequest is an auto generated low-level Go binding around an user-defined struct. +type DelegatedAttestationRequest struct { + Schema [32]byte + Data AttestationRequestData + Signature Signature + Attester common.Address + Deadline uint64 +} + +// DelegatedRevocationRequest is an auto generated low-level Go binding around an user-defined struct. +type DelegatedRevocationRequest struct { + Schema [32]byte + Data RevocationRequestData + Signature Signature + Revoker common.Address + Deadline uint64 +} + +// MultiAttestationRequest is an auto generated low-level Go binding around an user-defined struct. +type MultiAttestationRequest struct { + Schema [32]byte + Data []AttestationRequestData +} + +// MultiDelegatedAttestationRequest is an auto generated low-level Go binding around an user-defined struct. +type MultiDelegatedAttestationRequest struct { + Schema [32]byte + Data []AttestationRequestData + Signatures []Signature + Attester common.Address + Deadline uint64 +} + +// MultiDelegatedRevocationRequest is an auto generated low-level Go binding around an user-defined struct. +type MultiDelegatedRevocationRequest struct { + Schema [32]byte + Data []RevocationRequestData + Signatures []Signature + Revoker common.Address + Deadline uint64 +} + +// MultiRevocationRequest is an auto generated low-level Go binding around an user-defined struct. +type MultiRevocationRequest struct { + Schema [32]byte + Data []RevocationRequestData +} + +// RevocationRequest is an auto generated low-level Go binding around an user-defined struct. +type RevocationRequest struct { + Schema [32]byte + Data RevocationRequestData +} + +// RevocationRequestData is an auto generated low-level Go binding around an user-defined struct. +type RevocationRequestData struct { + Uid [32]byte + Value *big.Int +} + +// Signature is an auto generated low-level Go binding around an user-defined struct. +type Signature struct { + V uint8 + R [32]byte + S [32]byte +} + +// EASMetaData contains all meta data concerning the EAS contract. +var EASMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessDenied\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyRevoked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyRevokedOffchain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyTimestamped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DeadlineExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAttestation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAttestations\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExpirationTime\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidOffset\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRegistry\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRevocation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRevocations\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSchema\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidVerifier\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Irrevocable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongSchema\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"uid\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"schemaUID\",\"type\":\"bytes32\"}],\"name\":\"Attested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldNonce\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newNonce\",\"type\":\"uint256\"}],\"name\":\"NonceIncreased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"uid\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"schemaUID\",\"type\":\"bytes32\"}],\"name\":\"Revoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"revoker\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"data\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"name\":\"RevokedOffchain\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"data\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"name\":\"Timestamped\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"schema\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"expirationTime\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"revocable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"refUID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"structAttestationRequestData\",\"name\":\"data\",\"type\":\"tuple\"}],\"internalType\":\"structAttestationRequest\",\"name\":\"request\",\"type\":\"tuple\"}],\"name\":\"attest\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"schema\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"expirationTime\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"revocable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"refUID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"structAttestationRequestData\",\"name\":\"data\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"structSignature\",\"name\":\"signature\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"deadline\",\"type\":\"uint64\"}],\"internalType\":\"structDelegatedAttestationRequest\",\"name\":\"delegatedRequest\",\"type\":\"tuple\"}],\"name\":\"attestByDelegation\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAttestTypeHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uid\",\"type\":\"bytes32\"}],\"name\":\"getAttestation\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"uid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"schema\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"time\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"expirationTime\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"revocationTime\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"refUID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"revocable\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"structAttestation\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDomainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getName\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"revoker\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"data\",\"type\":\"bytes32\"}],\"name\":\"getRevokeOffchain\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRevokeTypeHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSchemaRegistry\",\"outputs\":[{\"internalType\":\"contractISchemaRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"data\",\"type\":\"bytes32\"}],\"name\":\"getTimestamp\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newNonce\",\"type\":\"uint256\"}],\"name\":\"increaseNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uid\",\"type\":\"bytes32\"}],\"name\":\"isAttestationValid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"schema\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"expirationTime\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"revocable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"refUID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"structAttestationRequestData[]\",\"name\":\"data\",\"type\":\"tuple[]\"}],\"internalType\":\"structMultiAttestationRequest[]\",\"name\":\"multiRequests\",\"type\":\"tuple[]\"}],\"name\":\"multiAttest\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"schema\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"expirationTime\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"revocable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"refUID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"structAttestationRequestData[]\",\"name\":\"data\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"structSignature[]\",\"name\":\"signatures\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"deadline\",\"type\":\"uint64\"}],\"internalType\":\"structMultiDelegatedAttestationRequest[]\",\"name\":\"multiDelegatedRequests\",\"type\":\"tuple[]\"}],\"name\":\"multiAttestByDelegation\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"schema\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"uid\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"structRevocationRequestData[]\",\"name\":\"data\",\"type\":\"tuple[]\"}],\"internalType\":\"structMultiRevocationRequest[]\",\"name\":\"multiRequests\",\"type\":\"tuple[]\"}],\"name\":\"multiRevoke\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"schema\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"uid\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"structRevocationRequestData[]\",\"name\":\"data\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"structSignature[]\",\"name\":\"signatures\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"revoker\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"deadline\",\"type\":\"uint64\"}],\"internalType\":\"structMultiDelegatedRevocationRequest[]\",\"name\":\"multiDelegatedRequests\",\"type\":\"tuple[]\"}],\"name\":\"multiRevokeByDelegation\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"data\",\"type\":\"bytes32[]\"}],\"name\":\"multiRevokeOffchain\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"data\",\"type\":\"bytes32[]\"}],\"name\":\"multiTimestamp\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"schema\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"uid\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"structRevocationRequestData\",\"name\":\"data\",\"type\":\"tuple\"}],\"internalType\":\"structRevocationRequest\",\"name\":\"request\",\"type\":\"tuple\"}],\"name\":\"revoke\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"schema\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"uid\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"structRevocationRequestData\",\"name\":\"data\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"structSignature\",\"name\":\"signature\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"revoker\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"deadline\",\"type\":\"uint64\"}],\"internalType\":\"structDelegatedRevocationRequest\",\"name\":\"delegatedRequest\",\"type\":\"tuple\"}],\"name\":\"revokeByDelegation\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"data\",\"type\":\"bytes32\"}],\"name\":\"revokeOffchain\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"data\",\"type\":\"bytes32\"}],\"name\":\"timestamp\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x61016060405234801561001157600080fd5b50604080518082018252600381526245415360e81b60208083019182528351808501855260058152640312e322e360dc1b908201529151812060e08190527fe374587661e69268352d25204d81b23ce801573f4b09f3545e69536dc085a37a6101008190524660a081815286517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818801819052818901959095526060810193909352608080840192909252308382018190528751808503909201825260c093840190975280519501949094209093529290915261012091909152516101405260805160a05160c05160e05161010051610120516101405161454d61014b600039600061073701526000612753015260006127a20152600061277d015260006126d6015260006127000152600061272a015261454d6000f3fe60806040526004361061018b5760003560e01c806395411525116100d6578063d45c44351161007f578063ed24911d11610059578063ed24911d146104fd578063f10b5cc814610512578063f17325e71461054157600080fd5b8063d45c443514610467578063e30bb5631461049e578063e71ff365146104dd57600080fd5b8063b469318d116100b0578063b469318d146103ba578063b83010d314610414578063cf190f341461044757600080fd5b80639541152514610367578063a3112a641461037a578063a6d4dbc7146103a757600080fd5b806344adc90e116101385780634d003070116101125780634d003070146102de57806354fd4d50146102fe57806379f7573a1461034757600080fd5b806344adc90e1461029857806346926267146102b85780634cb7e9e5146102cb57600080fd5b806317d7de7c1161016957806317d7de7c146102205780632d0335ab146102425780633c0427151461028557600080fd5b80630eabf6601461019057806312b11a17146101a557806313893f61146101e7575b600080fd5b6101a361019e366004613497565b610554565b005b3480156101b157600080fd5b507ff83bb2b0ede93a840239f7e701a54d9bc35f03701f51ae153d601c6947ff3d3f5b6040519081526020015b60405180910390f35b3480156101f357600080fd5b50610207610202366004613497565b6106eb565b60405167ffffffffffffffff90911681526020016101de565b34801561022c57600080fd5b50610235610730565b6040516101de9190613547565b34801561024e57600080fd5b506101d461025d36600461358c565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101d46102933660046135a9565b610760565b6102ab6102a6366004613497565b610863565b6040516101de91906135e4565b6101a36102c6366004613628565b6109e4565b6101a36102d9366004613497565b610a68565b3480156102ea57600080fd5b506102076102f9366004613640565b610b4b565b34801561030a57600080fd5b506102356040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b34801561035357600080fd5b506101a3610362366004613640565b610b58565b6102ab610375366004613497565b610bef565b34801561038657600080fd5b5061039a610395366004613640565b610e62565b6040516101de9190613740565b6101a36103b5366004613753565b611025565b3480156103c657600080fd5b506102076103d5366004613766565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152603460209081526040808320938352929052205467ffffffffffffffff1690565b34801561042057600080fd5b507f2d4116d8c9824e4c316453e5c2843a1885580374159ce8768603c49085ef424c6101d4565b34801561045357600080fd5b50610207610462366004613640565b6110ca565b34801561047357600080fd5b50610207610482366004613640565b60009081526033602052604090205467ffffffffffffffff1690565b3480156104aa57600080fd5b506104cd6104b9366004613640565b600090815260326020526040902054151590565b60405190151581526020016101de565b3480156104e957600080fd5b506102076104f8366004613497565b6110d8565b34801561050957600080fd5b506101d4611110565b34801561051e57600080fd5b5060405173420000000000000000000000000000000000002081526020016101de565b6101d461054f366004613792565b61111a565b348160005b818110156106e4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82018114600086868481811061059a5761059a6137cd565b90506020028101906105ac91906137fc565b6105b590613a92565b60208101518051919250908015806105d257508260400151518114155b15610609576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ad576106a56040518060a001604052808660000151815260200185848151811061063e5761063e6137cd565b6020026020010151815260200186604001518481518110610661576106616137cd565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff168152506111d8565b60010161060c565b506106c383600001518385606001518a886113c5565b6106cd9088613bbc565b9650505050506106dd8160010190565b9050610559565b5050505050565b60004282825b818110156107245761071c3387878481811061070f5761070f6137cd565b90506020020135856119f4565b6001016106f1565b50909150505b92915050565b606061075b7f0000000000000000000000000000000000000000000000000000000000000000611af3565b905090565b600061077361076e83613cf1565b611c81565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161078a5790505090506107f86020840184613d6c565b61080190613da0565b81600081518110610814576108146137cd565b602090810291909101015261083d83358261083560c0870160a0880161358c565b346001611dfe565b60200151600081518110610853576108536137cd565b6020026020010151915050919050565b60608160008167ffffffffffffffff8111156108815761088161383a565b6040519080825280602002602001820160405280156108b457816020015b606081526020019060019003908161089f5790505b509050600034815b848110156109ce577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85018114368989848181106108fc576108fc6137cd565b905060200281019061090e9190613dac565b905061091d6020820182613de0565b9050600003610958576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061097d823561096c6020850185613de0565b61097591613e48565b338887611dfe565b805190915061098c9086613bbc565b945080602001518785815181106109a5576109a56137cd565b6020026020010181905250806020015151860195505050506109c78160010190565b90506108bc565b506109d98383612510565b979650505050505050565b604080516001808252818301909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816109fb579050509050610a3636839003830160208401613ebc565b81600081518110610a4957610a496137cd565b6020908102919091010152610a63823582333460016113c5565b505050565b348160005b818110156106e4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610aad57610aad6137cd565b9050602002810190610abf9190613dac565b9050610b2c8135610ad36020840184613ed8565b808060200260200160405190810160405280939291908181526020016000905b82821015610b1f57610b1060408302860136819003810190613ebc565b81526020019060010190610af3565b50505050503388866113c5565b610b369086613bbc565b94505050610b448160010190565b9050610a6d565b60004261072a83826125fa565b33600090815260208190526040902054808211610ba1576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152602081815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b60608160008167ffffffffffffffff811115610c0d57610c0d61383a565b604051908082528060200260200182016040528015610c4057816020015b6060815260200190600190039081610c2b5790505b509050600034815b848110156109ce577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610c8857610c886137cd565b9050602002810190610c9a91906137fc565b9050366000610cac6020840184613de0565b909250905080801580610ccd5750610cc76040850185613f40565b90508114155b15610d04576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610de557610ddd6040518060a0016040528087600001358152602001868685818110610d3957610d396137cd565b9050602002810190610d4b9190613d6c565b610d5490613da0565b8152602001610d666040890189613f40565b85818110610d7657610d766137cd565b905060600201803603810190610d8c9190613fa7565b8152602001610da16080890160608a0161358c565b73ffffffffffffffffffffffffffffffffffffffff168152602001610dcc60a0890160808a01613fc3565b67ffffffffffffffff169052611c81565b600101610d07565b506000610e0e8535610df78587613e48565b610e076080890160608a0161358c565b8b8a611dfe565b8051909150610e1d9089613bbc565b975080602001518a8881518110610e3657610e366137cd565b602002602001018190525080602001515189019850505050505050610e5b8160010190565b9050610c48565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526032602090815260409182902082516101408101845281548152600182015492810192909252600281015467ffffffffffffffff808216948401949094526801000000000000000081048416606084015270010000000000000000000000000000000090049092166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff16151561010082015260068201805491929161012084019190610f9c90613fde565b80601f0160208091040260200160405190810160405280929190818152602001828054610fc890613fde565b80156110155780601f10610fea57610100808354040283529160200191611015565b820191906000526020600020905b815481529060010190602001808311610ff857829003601f168201915b5050505050815250509050919050565b61103c6110373683900383018361402b565b6111d8565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161105357905050905061108e36839003830160208401613ebc565b816000815181106110a1576110a16137cd565b6020908102919091010152610a638235826110c260e0860160c0870161358c565b3460016113c5565b60004261072a3384836119f4565b60004282825b81811015610724576111088686838181106110fb576110fb6137cd565b90506020020135846125fa565b6001016110de565b600061075b6126bc565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816111345790505090506111a26020840184613d6c565b6111ab90613da0565b816000815181106111be576111be6137cd565b602090810291909101015261083d83358233346001611dfe565b608081015167ffffffffffffffff161580159061120c57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611243576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401518451835184860151606088015173ffffffffffffffffffffffffffffffffffffffff166000908152968790529386208054959693959394611313947f2d4116d8c9824e4c316453e5c2843a1885580374159ce8768603c49085ef424c949392876112b883614099565b909155506080808b015160408051602081019890985287019590955260608601939093529184015260a083015267ffffffffffffffff1660c082015260e0015b604051602081830303815290604052805190602001206127f0565b905061138984606001518284602001518560400151866000015160405160200161137593929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b604051602081830303815290604052612803565b6113bf576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e0000000000000000000000000000000000000000000000000000000081526004810186905260009081907342000000000000000000000000000000000000209063a2ea7c6e90602401600060405180830381865afa158015611433573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261147991908101906140d1565b80519091506114b4576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156114d1576114d161383a565b60405190808252806020026020018201604052801561157057816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816114ef5790505b50905060008267ffffffffffffffff81111561158e5761158e61383a565b6040519080825280602002602001820160405280156115b7578160200160208202803683370190505b50905060005b838110156119d65760008a82815181106115d9576115d96137cd565b6020908102919091018101518051600090815260329092526040909120805491925090611632576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c81600101541461166f576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c81169116146116c5576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff1661171b576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff1615611775576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff161515610100820152600682018054839161012084019161188190613fde565b80601f01602080910402602001604051908101604052809291908181526020018280546118ad90613fde565b80156118fa5780601f106118cf576101008083540402835291602001916118fa565b820191906000526020600020905b8154815290600101906020018083116118dd57829003601f168201915b505050505081525050858481518110611915576119156137cd565b60200260200101819052508160200151848481518110611937576119376137cd565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff1686858151811061196d5761196d6137cd565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f61585600001516040516119c491815260200190565b60405180910390a450506001016115bd565b506119e684838360018b8b6129d2565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603460209081526040808320858452918290529091205467ffffffffffffffff1615611a68576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b604080516020808252818301909252606091600091906020820181803683370190505090506000805b6020811015611bbe576000858260208110611b3957611b396137cd565b1a60f81b90507fff000000000000000000000000000000000000000000000000000000000000008116600003611b6f5750611bbe565b80848481518110611b8257611b826137cd565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060019182019101611b1c565b5060008167ffffffffffffffff811115611bda57611bda61383a565b6040519080825280601f01601f191660200182016040528015611c04576020820181803683370190505b50905060005b82811015611c7857838181518110611c2457611c246137cd565b602001015160f81c60f81b828281518110611c4157611c416137cd565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101611c0a565b50949350505050565b608081015167ffffffffffffffff1615801590611cb557504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611cec576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015160408084015184518351848601518486015160608088015160808901518051908b012060a08a0151928c015173ffffffffffffffffffffffffffffffffffffffff1660009081529a8b9052978a208054999a97999798611313987ff83bb2b0ede93a840239f7e701a54d9bc35f03701f51ae153d601c6947ff3d3f989796959491928b611d7e83614099565b909155506080808f015160408051602081019c909c528b019990995273ffffffffffffffffffffffffffffffffffffffff90971660608a015267ffffffffffffffff9586169689019690965292151560a088015260c087019190915260e086015261010085015261012084019190915216610140820152610160016112f8565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611e4357611e4361383a565b604051908082528060200260200182016040528015611e6c578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907342000000000000000000000000000000000000209063a2ea7c6e90602401600060405180830381865afa158015611ede573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611f2491908101906140d1565b8051909150611f5f576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff811115611f7a57611f7a61383a565b60405190808252806020026020018201604052801561201957816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181611f985790505b50905060008467ffffffffffffffff8111156120375761203761383a565b604051908082528060200260200182016040528015612060578160200160208202803683370190505b50905060005b858110156124ef5760008b8281518110612082576120826137cd565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff16141580156120cd57504267ffffffffffffffff16816020015167ffffffffffffffff1611155b15612104576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8460400151158015612117575080604001515b1561214e576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f81526020016121724290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b6122148382612dc3565b600081815260326020526040902054909250156122335760010161220a565b81835260008281526032602090815260409182902085518155908501516001820155908401516002820180546060870151608088015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0840151600382015560c084015160048201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff000000000000000000000000000000000000000000909116929093169190911791909117905561012084015184919060068201906123b390826141f7565b50505060608401511561240a57606084015160009081526032602052604090205461240a576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8287868151811061241d5761241d6137cd565b60200260200101819052508360a0015186868151811061243f5761243f6137cd565b6020026020010181815250508189602001518681518110612462576124626137cd565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35856040516124d291815260200190565b60405180910390a4505050506124e88160010190565b9050612066565b506124ff83838360008c8c6129d2565b845250919998505050505050505050565b606060008267ffffffffffffffff81111561252d5761252d61383a565b604051908082528060200260200182016040528015612556578160200160208202803683370190505b508451909150600090815b818110156125ef57600087828151811061257d5761257d6137cd565b6020026020010151905060008151905060005b818110156125db578281815181106125aa576125aa6137cd565b60200260200101518787815181106125c4576125c46137cd565b602090810291909101015260019586019501612590565b5050506125e88160010190565b9050612561565b509195945050505050565b60008281526033602052604090205467ffffffffffffffff161561264a576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526033602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561272257507f000000000000000000000000000000000000000000000000000000000000000046145b1561274c57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600061072a6127fd6126bc565b83612e22565b60008060006128128585612e64565b9092509050600081600481111561282b5761282b614311565b14801561286357508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15612873576001925050506129cb565b6000808773ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b88886040516024016128a8929190614340565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516129319190614361565b600060405180830381855afa9150503d806000811461296c576040519150601f19603f3d011682016040523d82523d6000602084013e612971565b606091505b5091509150818015612984575080516020145b80156129c4575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906129c29083016020908101908401614373565b145b9450505050505b9392505050565b84516000906001819003612a2a57612a2288886000815181106129f7576129f76137cd565b602002602001015188600081518110612a1257612a126137cd565b6020026020010151888888612ea9565b915050612db9565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612acb5760005b82811015612ab057878181518110612a6757612a676137cd565b6020026020010151600014612aa8576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612a4d565b508315612ac057612ac0856131c8565b600092505050612db9565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3d919061438c565b905060005b84811015612bfa5760008a8281518110612b5e57612b5e6137cd565b6020026020010151905080600003612b765750612bf2565b82612bad576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612be7576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612b42565b508715612cd5576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612c57908e908e906004016143a9565b60206040518083038185885af1158015612c75573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c9a919061438c565b612cd0576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612da4565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612d2b908e908e906004016143a9565b60206040518083038185885af1158015612d49573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d6e919061438c565b612da4576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612db357612db3876131c8565b50925050505b9695505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612e0499989796918c9101614462565b60405160208183030381529060405280519060200120905092915050565b6040517f190100000000000000000000000000000000000000000000000000000000000060208201526022810183905260428101829052600090606201612e04565b6000808251604103612e9a5760208301516040840151606085015160001a612e8e878285856131db565b94509450505050612ea2565b506000905060025b9250929050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff8116612f1d578515612f04576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8215612f1357612f13846131c8565b6000915050612db9565b8515613008578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f92919061438c565b612fc8576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613002576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b84156130e0576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e1908890613062908b90600401613740565b60206040518083038185885af1158015613080573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130a5919061438c565b6130db576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6131ad565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613134908b90600401613740565b60206040518083038185885af1158015613152573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613177919061438c565b6131ad576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156131bc576131bc846131c8565b50939695505050505050565b80156131d8576131d833826132f3565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561321257506000905060036132ea565b8460ff16601b1415801561322a57508460ff16601c14155b1561323b57506000905060046132ea565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561328f573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166132e3576000600192509250506132ea565b9150600090505b94509492505050565b80471015613362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146133bc576040519150601f19603f3d011682016040523d82523d6000602084013e6133c1565b606091505b5050905080610a63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401613359565b60008083601f84011261346457600080fd5b50813567ffffffffffffffff81111561347c57600080fd5b6020830191508360208260051b8501011115612ea257600080fd5b600080602083850312156134aa57600080fd5b823567ffffffffffffffff8111156134c157600080fd5b6134cd85828601613452565b90969095509350505050565b60005b838110156134f45781810151838201526020016134dc565b50506000910152565b600081518084526135158160208601602086016134d9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129cb60208301846134fd565b73ffffffffffffffffffffffffffffffffffffffff811681146131d857600080fd5b80356135878161355a565b919050565b60006020828403121561359e57600080fd5b81356129cb8161355a565b6000602082840312156135bb57600080fd5b813567ffffffffffffffff8111156135d257600080fd5b820160e081850312156129cb57600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561361c57835183529284019291840191600101613600565b50909695505050505050565b60006060828403121561363a57600080fd5b50919050565b60006020828403121561365257600080fd5b5035919050565b600061014082518452602083015160208501526040830151613687604086018267ffffffffffffffff169052565b5060608301516136a3606086018267ffffffffffffffff169052565b5060808301516136bf608086018267ffffffffffffffff169052565b5060a083015160a085015260c08301516136f160c086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e083015161371960e086018273ffffffffffffffffffffffffffffffffffffffff169052565b506101008381015115159085015261012080840151818601839052612db9838701826134fd565b6020815260006129cb6020830184613659565b6000610100828403121561363a57600080fd5b6000806040838503121561377957600080fd5b82356137848161355a565b946020939093013593505050565b6000602082840312156137a457600080fd5b813567ffffffffffffffff8111156137bb57600080fd5b8201604081850312156129cb57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6183360301811261383057600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561388c5761388c61383a565b60405290565b60405160c0810167ffffffffffffffff8111828210171561388c5761388c61383a565b6040516080810167ffffffffffffffff8111828210171561388c5761388c61383a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561391f5761391f61383a565b604052919050565b600067ffffffffffffffff8211156139415761394161383a565b5060051b60200190565b60006040828403121561395d57600080fd5b6040516040810181811067ffffffffffffffff821117156139805761398061383a565b604052823581526020928301359281019290925250919050565b6000606082840312156139ac57600080fd5b6040516060810181811067ffffffffffffffff821117156139cf576139cf61383a565b604052905080823560ff811681146139e657600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112613a1657600080fd5b81356020613a2b613a2683613927565b6138d8565b82815260609283028501820192828201919087851115613a4a57600080fd5b8387015b85811015613a6d57613a60898261399a565b8452928401928101613a4e565b5090979650505050505050565b803567ffffffffffffffff8116811461358757600080fd5b600060a08236031215613aa457600080fd5b613aac613869565b8235815260208084013567ffffffffffffffff80821115613acc57600080fd5b9085019036601f830112613adf57600080fd5b8135613aed613a2682613927565b81815260069190911b83018401908481019036831115613b0c57600080fd5b938501935b82851015613b3557613b23368661394b565b82528582019150604085019450613b11565b80868801525050506040860135925080831115613b5157600080fd5b5050613b5f36828601613a05565b604083015250613b716060840161357c565b6060820152613b8260808401613a7a565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561072a5761072a613b8d565b80151581146131d857600080fd5b600067ffffffffffffffff821115613bf757613bf761383a565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c08284031215613c3557600080fd5b613c3d613892565b90508135613c4a8161355a565b81526020613c59838201613a7a565b818301526040830135613c6b81613bcf565b604083015260608381013590830152608083013567ffffffffffffffff811115613c9457600080fd5b8301601f81018513613ca557600080fd5b8035613cb3613a2682613bdd565b8181528684838501011115613cc757600080fd5b818484018583013760008483830101528060808601525050505060a082013560a082015292915050565b600060e08236031215613d0357600080fd5b613d0b613869565b82358152602083013567ffffffffffffffff811115613d2957600080fd5b613d3536828601613c23565b602083015250613d48366040850161399a565b604082015260a0830135613d5b8161355a565b6060820152613b8260c08401613a7a565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4183360301811261383057600080fd5b600061072a3683613c23565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261383057600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613e1557600080fd5b83018035915067ffffffffffffffff821115613e3057600080fd5b6020019150600581901b3603821315612ea257600080fd5b6000613e56613a2684613927565b80848252602080830192508560051b850136811115613e7457600080fd5b855b81811015613eb057803567ffffffffffffffff811115613e965760008081fd5b613ea236828a01613c23565b865250938201938201613e76565b50919695505050505050565b600060408284031215613ece57600080fd5b6129cb838361394b565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f0d57600080fd5b83018035915067ffffffffffffffff821115613f2857600080fd5b6020019150600681901b3603821315612ea257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f7557600080fd5b83018035915067ffffffffffffffff821115613f9057600080fd5b6020019150606081023603821315612ea257600080fd5b600060608284031215613fb957600080fd5b6129cb838361399a565b600060208284031215613fd557600080fd5b6129cb82613a7a565b600181811c90821680613ff257607f821691505b60208210810361363a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000610100828403121561403e57600080fd5b614046613869565b82358152614057846020850161394b565b6020820152614069846060850161399a565b604082015260c083013561407c8161355a565b606082015261408d60e08401613a7a565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036140ca576140ca613b8d565b5060010190565b600060208083850312156140e457600080fd5b825167ffffffffffffffff808211156140fc57600080fd5b908401906080828703121561411057600080fd5b6141186138b5565b82518152838301516141298161355a565b81850152604083015161413b81613bcf565b604082015260608301518281111561415257600080fd5b80840193505086601f84011261416757600080fd5b82519150614177613a2683613bdd565b828152878584860101111561418b57600080fd5b61419a838683018787016134d9565b60608201529695505050505050565b601f821115610a6357600081815260208120601f850160051c810160208610156141d05750805b601f850160051c820191505b818110156141ef578281556001016141dc565b505050505050565b815167ffffffffffffffff8111156142115761421161383a565b6142258161421f8454613fde565b846141a9565b602080601f83116001811461427857600084156142425750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556141ef565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156142c5578886015182559484019460019091019084016142a6565b508582101561430157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b82815260406020820152600061435960408301846134fd565b949350505050565b600082516138308184602087016134d9565b60006020828403121561438557600080fd5b5051919050565b60006020828403121561439e57600080fd5b81516129cb81613bcf565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b8381101561441e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa088870301855261440c868351613659565b955093820193908201906001016143d2565b50508584038187015286518085528782019482019350915060005b8281101561445557845184529381019392810192600101614439565b5091979650505050505050565b89815260007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b166020840152808a60601b166034840152507fffffffffffffffff000000000000000000000000000000000000000000000000808960c01b166048840152808860c01b1660508401525085151560f81b605883015284605983015283516144fb8160798501602088016134d9565b80830190507fffffffff000000000000000000000000000000000000000000000000000000008460e01b166079820152607d81019150509a995050505050505050505056fea164736f6c6343000813000a", +} + +// EASABI is the input ABI used to generate the binding from. +// Deprecated: Use EASMetaData.ABI instead. +var EASABI = EASMetaData.ABI + +// EASBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use EASMetaData.Bin instead. +var EASBin = EASMetaData.Bin + +// DeployEAS deploys a new Ethereum contract, binding an instance of EAS to it. +func DeployEAS(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *EAS, error) { + parsed, err := EASMetaData.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(EASBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &EAS{EASCaller: EASCaller{contract: contract}, EASTransactor: EASTransactor{contract: contract}, EASFilterer: EASFilterer{contract: contract}}, nil +} + +// EAS is an auto generated Go binding around an Ethereum contract. +type EAS struct { + EASCaller // Read-only binding to the contract + EASTransactor // Write-only binding to the contract + EASFilterer // Log filterer for contract events +} + +// EASCaller is an auto generated read-only Go binding around an Ethereum contract. +type EASCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EASTransactor is an auto generated write-only Go binding around an Ethereum contract. +type EASTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EASFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type EASFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// EASSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type EASSession struct { + Contract *EAS // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// EASCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type EASCallerSession struct { + Contract *EASCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// EASTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type EASTransactorSession struct { + Contract *EASTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// EASRaw is an auto generated low-level Go binding around an Ethereum contract. +type EASRaw struct { + Contract *EAS // Generic contract binding to access the raw methods on +} + +// EASCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type EASCallerRaw struct { + Contract *EASCaller // Generic read-only contract binding to access the raw methods on +} + +// EASTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type EASTransactorRaw struct { + Contract *EASTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewEAS creates a new instance of EAS, bound to a specific deployed contract. +func NewEAS(address common.Address, backend bind.ContractBackend) (*EAS, error) { + contract, err := bindEAS(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &EAS{EASCaller: EASCaller{contract: contract}, EASTransactor: EASTransactor{contract: contract}, EASFilterer: EASFilterer{contract: contract}}, nil +} + +// NewEASCaller creates a new read-only instance of EAS, bound to a specific deployed contract. +func NewEASCaller(address common.Address, caller bind.ContractCaller) (*EASCaller, error) { + contract, err := bindEAS(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &EASCaller{contract: contract}, nil +} + +// NewEASTransactor creates a new write-only instance of EAS, bound to a specific deployed contract. +func NewEASTransactor(address common.Address, transactor bind.ContractTransactor) (*EASTransactor, error) { + contract, err := bindEAS(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &EASTransactor{contract: contract}, nil +} + +// NewEASFilterer creates a new log filterer instance of EAS, bound to a specific deployed contract. +func NewEASFilterer(address common.Address, filterer bind.ContractFilterer) (*EASFilterer, error) { + contract, err := bindEAS(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &EASFilterer{contract: contract}, nil +} + +// bindEAS binds a generic wrapper to an already deployed contract. +func bindEAS(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(EASABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_EAS *EASRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _EAS.Contract.EASCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_EAS *EASRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EAS.Contract.EASTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_EAS *EASRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _EAS.Contract.EASTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_EAS *EASCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _EAS.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_EAS *EASTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EAS.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_EAS *EASTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _EAS.Contract.contract.Transact(opts, method, params...) +} + +// GetAttestTypeHash is a free data retrieval call binding the contract method 0x12b11a17. +// +// Solidity: function getAttestTypeHash() pure returns(bytes32) +func (_EAS *EASCaller) GetAttestTypeHash(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _EAS.contract.Call(opts, &out, "getAttestTypeHash") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetAttestTypeHash is a free data retrieval call binding the contract method 0x12b11a17. +// +// Solidity: function getAttestTypeHash() pure returns(bytes32) +func (_EAS *EASSession) GetAttestTypeHash() ([32]byte, error) { + return _EAS.Contract.GetAttestTypeHash(&_EAS.CallOpts) +} + +// GetAttestTypeHash is a free data retrieval call binding the contract method 0x12b11a17. +// +// Solidity: function getAttestTypeHash() pure returns(bytes32) +func (_EAS *EASCallerSession) GetAttestTypeHash() ([32]byte, error) { + return _EAS.Contract.GetAttestTypeHash(&_EAS.CallOpts) +} + +// GetAttestation is a free data retrieval call binding the contract method 0xa3112a64. +// +// Solidity: function getAttestation(bytes32 uid) view returns((bytes32,bytes32,uint64,uint64,uint64,bytes32,address,address,bool,bytes)) +func (_EAS *EASCaller) GetAttestation(opts *bind.CallOpts, uid [32]byte) (Attestation, error) { + var out []interface{} + err := _EAS.contract.Call(opts, &out, "getAttestation", uid) + + if err != nil { + return *new(Attestation), err + } + + out0 := *abi.ConvertType(out[0], new(Attestation)).(*Attestation) + + return out0, err + +} + +// GetAttestation is a free data retrieval call binding the contract method 0xa3112a64. +// +// Solidity: function getAttestation(bytes32 uid) view returns((bytes32,bytes32,uint64,uint64,uint64,bytes32,address,address,bool,bytes)) +func (_EAS *EASSession) GetAttestation(uid [32]byte) (Attestation, error) { + return _EAS.Contract.GetAttestation(&_EAS.CallOpts, uid) +} + +// GetAttestation is a free data retrieval call binding the contract method 0xa3112a64. +// +// Solidity: function getAttestation(bytes32 uid) view returns((bytes32,bytes32,uint64,uint64,uint64,bytes32,address,address,bool,bytes)) +func (_EAS *EASCallerSession) GetAttestation(uid [32]byte) (Attestation, error) { + return _EAS.Contract.GetAttestation(&_EAS.CallOpts, uid) +} + +// GetDomainSeparator is a free data retrieval call binding the contract method 0xed24911d. +// +// Solidity: function getDomainSeparator() view returns(bytes32) +func (_EAS *EASCaller) GetDomainSeparator(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _EAS.contract.Call(opts, &out, "getDomainSeparator") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetDomainSeparator is a free data retrieval call binding the contract method 0xed24911d. +// +// Solidity: function getDomainSeparator() view returns(bytes32) +func (_EAS *EASSession) GetDomainSeparator() ([32]byte, error) { + return _EAS.Contract.GetDomainSeparator(&_EAS.CallOpts) +} + +// GetDomainSeparator is a free data retrieval call binding the contract method 0xed24911d. +// +// Solidity: function getDomainSeparator() view returns(bytes32) +func (_EAS *EASCallerSession) GetDomainSeparator() ([32]byte, error) { + return _EAS.Contract.GetDomainSeparator(&_EAS.CallOpts) +} + +// GetName is a free data retrieval call binding the contract method 0x17d7de7c. +// +// Solidity: function getName() view returns(string) +func (_EAS *EASCaller) GetName(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _EAS.contract.Call(opts, &out, "getName") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// GetName is a free data retrieval call binding the contract method 0x17d7de7c. +// +// Solidity: function getName() view returns(string) +func (_EAS *EASSession) GetName() (string, error) { + return _EAS.Contract.GetName(&_EAS.CallOpts) +} + +// GetName is a free data retrieval call binding the contract method 0x17d7de7c. +// +// Solidity: function getName() view returns(string) +func (_EAS *EASCallerSession) GetName() (string, error) { + return _EAS.Contract.GetName(&_EAS.CallOpts) +} + +// GetNonce is a free data retrieval call binding the contract method 0x2d0335ab. +// +// Solidity: function getNonce(address account) view returns(uint256) +func (_EAS *EASCaller) GetNonce(opts *bind.CallOpts, account common.Address) (*big.Int, error) { + var out []interface{} + err := _EAS.contract.Call(opts, &out, "getNonce", account) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetNonce is a free data retrieval call binding the contract method 0x2d0335ab. +// +// Solidity: function getNonce(address account) view returns(uint256) +func (_EAS *EASSession) GetNonce(account common.Address) (*big.Int, error) { + return _EAS.Contract.GetNonce(&_EAS.CallOpts, account) +} + +// GetNonce is a free data retrieval call binding the contract method 0x2d0335ab. +// +// Solidity: function getNonce(address account) view returns(uint256) +func (_EAS *EASCallerSession) GetNonce(account common.Address) (*big.Int, error) { + return _EAS.Contract.GetNonce(&_EAS.CallOpts, account) +} + +// GetRevokeOffchain is a free data retrieval call binding the contract method 0xb469318d. +// +// Solidity: function getRevokeOffchain(address revoker, bytes32 data) view returns(uint64) +func (_EAS *EASCaller) GetRevokeOffchain(opts *bind.CallOpts, revoker common.Address, data [32]byte) (uint64, error) { + var out []interface{} + err := _EAS.contract.Call(opts, &out, "getRevokeOffchain", revoker, data) + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// GetRevokeOffchain is a free data retrieval call binding the contract method 0xb469318d. +// +// Solidity: function getRevokeOffchain(address revoker, bytes32 data) view returns(uint64) +func (_EAS *EASSession) GetRevokeOffchain(revoker common.Address, data [32]byte) (uint64, error) { + return _EAS.Contract.GetRevokeOffchain(&_EAS.CallOpts, revoker, data) +} + +// GetRevokeOffchain is a free data retrieval call binding the contract method 0xb469318d. +// +// Solidity: function getRevokeOffchain(address revoker, bytes32 data) view returns(uint64) +func (_EAS *EASCallerSession) GetRevokeOffchain(revoker common.Address, data [32]byte) (uint64, error) { + return _EAS.Contract.GetRevokeOffchain(&_EAS.CallOpts, revoker, data) +} + +// GetRevokeTypeHash is a free data retrieval call binding the contract method 0xb83010d3. +// +// Solidity: function getRevokeTypeHash() pure returns(bytes32) +func (_EAS *EASCaller) GetRevokeTypeHash(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _EAS.contract.Call(opts, &out, "getRevokeTypeHash") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetRevokeTypeHash is a free data retrieval call binding the contract method 0xb83010d3. +// +// Solidity: function getRevokeTypeHash() pure returns(bytes32) +func (_EAS *EASSession) GetRevokeTypeHash() ([32]byte, error) { + return _EAS.Contract.GetRevokeTypeHash(&_EAS.CallOpts) +} + +// GetRevokeTypeHash is a free data retrieval call binding the contract method 0xb83010d3. +// +// Solidity: function getRevokeTypeHash() pure returns(bytes32) +func (_EAS *EASCallerSession) GetRevokeTypeHash() ([32]byte, error) { + return _EAS.Contract.GetRevokeTypeHash(&_EAS.CallOpts) +} + +// GetSchemaRegistry is a free data retrieval call binding the contract method 0xf10b5cc8. +// +// Solidity: function getSchemaRegistry() pure returns(address) +func (_EAS *EASCaller) GetSchemaRegistry(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _EAS.contract.Call(opts, &out, "getSchemaRegistry") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetSchemaRegistry is a free data retrieval call binding the contract method 0xf10b5cc8. +// +// Solidity: function getSchemaRegistry() pure returns(address) +func (_EAS *EASSession) GetSchemaRegistry() (common.Address, error) { + return _EAS.Contract.GetSchemaRegistry(&_EAS.CallOpts) +} + +// GetSchemaRegistry is a free data retrieval call binding the contract method 0xf10b5cc8. +// +// Solidity: function getSchemaRegistry() pure returns(address) +func (_EAS *EASCallerSession) GetSchemaRegistry() (common.Address, error) { + return _EAS.Contract.GetSchemaRegistry(&_EAS.CallOpts) +} + +// GetTimestamp is a free data retrieval call binding the contract method 0xd45c4435. +// +// Solidity: function getTimestamp(bytes32 data) view returns(uint64) +func (_EAS *EASCaller) GetTimestamp(opts *bind.CallOpts, data [32]byte) (uint64, error) { + var out []interface{} + err := _EAS.contract.Call(opts, &out, "getTimestamp", data) + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// GetTimestamp is a free data retrieval call binding the contract method 0xd45c4435. +// +// Solidity: function getTimestamp(bytes32 data) view returns(uint64) +func (_EAS *EASSession) GetTimestamp(data [32]byte) (uint64, error) { + return _EAS.Contract.GetTimestamp(&_EAS.CallOpts, data) +} + +// GetTimestamp is a free data retrieval call binding the contract method 0xd45c4435. +// +// Solidity: function getTimestamp(bytes32 data) view returns(uint64) +func (_EAS *EASCallerSession) GetTimestamp(data [32]byte) (uint64, error) { + return _EAS.Contract.GetTimestamp(&_EAS.CallOpts, data) +} + +// IsAttestationValid is a free data retrieval call binding the contract method 0xe30bb563. +// +// Solidity: function isAttestationValid(bytes32 uid) view returns(bool) +func (_EAS *EASCaller) IsAttestationValid(opts *bind.CallOpts, uid [32]byte) (bool, error) { + var out []interface{} + err := _EAS.contract.Call(opts, &out, "isAttestationValid", uid) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsAttestationValid is a free data retrieval call binding the contract method 0xe30bb563. +// +// Solidity: function isAttestationValid(bytes32 uid) view returns(bool) +func (_EAS *EASSession) IsAttestationValid(uid [32]byte) (bool, error) { + return _EAS.Contract.IsAttestationValid(&_EAS.CallOpts, uid) +} + +// IsAttestationValid is a free data retrieval call binding the contract method 0xe30bb563. +// +// Solidity: function isAttestationValid(bytes32 uid) view returns(bool) +func (_EAS *EASCallerSession) IsAttestationValid(uid [32]byte) (bool, error) { + return _EAS.Contract.IsAttestationValid(&_EAS.CallOpts, uid) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_EAS *EASCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _EAS.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_EAS *EASSession) Version() (string, error) { + return _EAS.Contract.Version(&_EAS.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_EAS *EASCallerSession) Version() (string, error) { + return _EAS.Contract.Version(&_EAS.CallOpts) +} + +// Attest is a paid mutator transaction binding the contract method 0xf17325e7. +// +// Solidity: function attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)) request) payable returns(bytes32) +func (_EAS *EASTransactor) Attest(opts *bind.TransactOpts, request AttestationRequest) (*types.Transaction, error) { + return _EAS.contract.Transact(opts, "attest", request) +} + +// Attest is a paid mutator transaction binding the contract method 0xf17325e7. +// +// Solidity: function attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)) request) payable returns(bytes32) +func (_EAS *EASSession) Attest(request AttestationRequest) (*types.Transaction, error) { + return _EAS.Contract.Attest(&_EAS.TransactOpts, request) +} + +// Attest is a paid mutator transaction binding the contract method 0xf17325e7. +// +// Solidity: function attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)) request) payable returns(bytes32) +func (_EAS *EASTransactorSession) Attest(request AttestationRequest) (*types.Transaction, error) { + return _EAS.Contract.Attest(&_EAS.TransactOpts, request) +} + +// AttestByDelegation is a paid mutator transaction binding the contract method 0x3c042715. +// +// Solidity: function attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64) delegatedRequest) payable returns(bytes32) +func (_EAS *EASTransactor) AttestByDelegation(opts *bind.TransactOpts, delegatedRequest DelegatedAttestationRequest) (*types.Transaction, error) { + return _EAS.contract.Transact(opts, "attestByDelegation", delegatedRequest) +} + +// AttestByDelegation is a paid mutator transaction binding the contract method 0x3c042715. +// +// Solidity: function attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64) delegatedRequest) payable returns(bytes32) +func (_EAS *EASSession) AttestByDelegation(delegatedRequest DelegatedAttestationRequest) (*types.Transaction, error) { + return _EAS.Contract.AttestByDelegation(&_EAS.TransactOpts, delegatedRequest) +} + +// AttestByDelegation is a paid mutator transaction binding the contract method 0x3c042715. +// +// Solidity: function attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64) delegatedRequest) payable returns(bytes32) +func (_EAS *EASTransactorSession) AttestByDelegation(delegatedRequest DelegatedAttestationRequest) (*types.Transaction, error) { + return _EAS.Contract.AttestByDelegation(&_EAS.TransactOpts, delegatedRequest) +} + +// IncreaseNonce is a paid mutator transaction binding the contract method 0x79f7573a. +// +// Solidity: function increaseNonce(uint256 newNonce) returns() +func (_EAS *EASTransactor) IncreaseNonce(opts *bind.TransactOpts, newNonce *big.Int) (*types.Transaction, error) { + return _EAS.contract.Transact(opts, "increaseNonce", newNonce) +} + +// IncreaseNonce is a paid mutator transaction binding the contract method 0x79f7573a. +// +// Solidity: function increaseNonce(uint256 newNonce) returns() +func (_EAS *EASSession) IncreaseNonce(newNonce *big.Int) (*types.Transaction, error) { + return _EAS.Contract.IncreaseNonce(&_EAS.TransactOpts, newNonce) +} + +// IncreaseNonce is a paid mutator transaction binding the contract method 0x79f7573a. +// +// Solidity: function increaseNonce(uint256 newNonce) returns() +func (_EAS *EASTransactorSession) IncreaseNonce(newNonce *big.Int) (*types.Transaction, error) { + return _EAS.Contract.IncreaseNonce(&_EAS.TransactOpts, newNonce) +} + +// MultiAttest is a paid mutator transaction binding the contract method 0x44adc90e. +// +// Solidity: function multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[] multiRequests) payable returns(bytes32[]) +func (_EAS *EASTransactor) MultiAttest(opts *bind.TransactOpts, multiRequests []MultiAttestationRequest) (*types.Transaction, error) { + return _EAS.contract.Transact(opts, "multiAttest", multiRequests) +} + +// MultiAttest is a paid mutator transaction binding the contract method 0x44adc90e. +// +// Solidity: function multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[] multiRequests) payable returns(bytes32[]) +func (_EAS *EASSession) MultiAttest(multiRequests []MultiAttestationRequest) (*types.Transaction, error) { + return _EAS.Contract.MultiAttest(&_EAS.TransactOpts, multiRequests) +} + +// MultiAttest is a paid mutator transaction binding the contract method 0x44adc90e. +// +// Solidity: function multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[] multiRequests) payable returns(bytes32[]) +func (_EAS *EASTransactorSession) MultiAttest(multiRequests []MultiAttestationRequest) (*types.Transaction, error) { + return _EAS.Contract.MultiAttest(&_EAS.TransactOpts, multiRequests) +} + +// MultiAttestByDelegation is a paid mutator transaction binding the contract method 0x95411525. +// +// Solidity: function multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[] multiDelegatedRequests) payable returns(bytes32[]) +func (_EAS *EASTransactor) MultiAttestByDelegation(opts *bind.TransactOpts, multiDelegatedRequests []MultiDelegatedAttestationRequest) (*types.Transaction, error) { + return _EAS.contract.Transact(opts, "multiAttestByDelegation", multiDelegatedRequests) +} + +// MultiAttestByDelegation is a paid mutator transaction binding the contract method 0x95411525. +// +// Solidity: function multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[] multiDelegatedRequests) payable returns(bytes32[]) +func (_EAS *EASSession) MultiAttestByDelegation(multiDelegatedRequests []MultiDelegatedAttestationRequest) (*types.Transaction, error) { + return _EAS.Contract.MultiAttestByDelegation(&_EAS.TransactOpts, multiDelegatedRequests) +} + +// MultiAttestByDelegation is a paid mutator transaction binding the contract method 0x95411525. +// +// Solidity: function multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[] multiDelegatedRequests) payable returns(bytes32[]) +func (_EAS *EASTransactorSession) MultiAttestByDelegation(multiDelegatedRequests []MultiDelegatedAttestationRequest) (*types.Transaction, error) { + return _EAS.Contract.MultiAttestByDelegation(&_EAS.TransactOpts, multiDelegatedRequests) +} + +// MultiRevoke is a paid mutator transaction binding the contract method 0x4cb7e9e5. +// +// Solidity: function multiRevoke((bytes32,(bytes32,uint256)[])[] multiRequests) payable returns() +func (_EAS *EASTransactor) MultiRevoke(opts *bind.TransactOpts, multiRequests []MultiRevocationRequest) (*types.Transaction, error) { + return _EAS.contract.Transact(opts, "multiRevoke", multiRequests) +} + +// MultiRevoke is a paid mutator transaction binding the contract method 0x4cb7e9e5. +// +// Solidity: function multiRevoke((bytes32,(bytes32,uint256)[])[] multiRequests) payable returns() +func (_EAS *EASSession) MultiRevoke(multiRequests []MultiRevocationRequest) (*types.Transaction, error) { + return _EAS.Contract.MultiRevoke(&_EAS.TransactOpts, multiRequests) +} + +// MultiRevoke is a paid mutator transaction binding the contract method 0x4cb7e9e5. +// +// Solidity: function multiRevoke((bytes32,(bytes32,uint256)[])[] multiRequests) payable returns() +func (_EAS *EASTransactorSession) MultiRevoke(multiRequests []MultiRevocationRequest) (*types.Transaction, error) { + return _EAS.Contract.MultiRevoke(&_EAS.TransactOpts, multiRequests) +} + +// MultiRevokeByDelegation is a paid mutator transaction binding the contract method 0x0eabf660. +// +// Solidity: function multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[] multiDelegatedRequests) payable returns() +func (_EAS *EASTransactor) MultiRevokeByDelegation(opts *bind.TransactOpts, multiDelegatedRequests []MultiDelegatedRevocationRequest) (*types.Transaction, error) { + return _EAS.contract.Transact(opts, "multiRevokeByDelegation", multiDelegatedRequests) +} + +// MultiRevokeByDelegation is a paid mutator transaction binding the contract method 0x0eabf660. +// +// Solidity: function multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[] multiDelegatedRequests) payable returns() +func (_EAS *EASSession) MultiRevokeByDelegation(multiDelegatedRequests []MultiDelegatedRevocationRequest) (*types.Transaction, error) { + return _EAS.Contract.MultiRevokeByDelegation(&_EAS.TransactOpts, multiDelegatedRequests) +} + +// MultiRevokeByDelegation is a paid mutator transaction binding the contract method 0x0eabf660. +// +// Solidity: function multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[] multiDelegatedRequests) payable returns() +func (_EAS *EASTransactorSession) MultiRevokeByDelegation(multiDelegatedRequests []MultiDelegatedRevocationRequest) (*types.Transaction, error) { + return _EAS.Contract.MultiRevokeByDelegation(&_EAS.TransactOpts, multiDelegatedRequests) +} + +// MultiRevokeOffchain is a paid mutator transaction binding the contract method 0x13893f61. +// +// Solidity: function multiRevokeOffchain(bytes32[] data) returns(uint64) +func (_EAS *EASTransactor) MultiRevokeOffchain(opts *bind.TransactOpts, data [][32]byte) (*types.Transaction, error) { + return _EAS.contract.Transact(opts, "multiRevokeOffchain", data) +} + +// MultiRevokeOffchain is a paid mutator transaction binding the contract method 0x13893f61. +// +// Solidity: function multiRevokeOffchain(bytes32[] data) returns(uint64) +func (_EAS *EASSession) MultiRevokeOffchain(data [][32]byte) (*types.Transaction, error) { + return _EAS.Contract.MultiRevokeOffchain(&_EAS.TransactOpts, data) +} + +// MultiRevokeOffchain is a paid mutator transaction binding the contract method 0x13893f61. +// +// Solidity: function multiRevokeOffchain(bytes32[] data) returns(uint64) +func (_EAS *EASTransactorSession) MultiRevokeOffchain(data [][32]byte) (*types.Transaction, error) { + return _EAS.Contract.MultiRevokeOffchain(&_EAS.TransactOpts, data) +} + +// MultiTimestamp is a paid mutator transaction binding the contract method 0xe71ff365. +// +// Solidity: function multiTimestamp(bytes32[] data) returns(uint64) +func (_EAS *EASTransactor) MultiTimestamp(opts *bind.TransactOpts, data [][32]byte) (*types.Transaction, error) { + return _EAS.contract.Transact(opts, "multiTimestamp", data) +} + +// MultiTimestamp is a paid mutator transaction binding the contract method 0xe71ff365. +// +// Solidity: function multiTimestamp(bytes32[] data) returns(uint64) +func (_EAS *EASSession) MultiTimestamp(data [][32]byte) (*types.Transaction, error) { + return _EAS.Contract.MultiTimestamp(&_EAS.TransactOpts, data) +} + +// MultiTimestamp is a paid mutator transaction binding the contract method 0xe71ff365. +// +// Solidity: function multiTimestamp(bytes32[] data) returns(uint64) +func (_EAS *EASTransactorSession) MultiTimestamp(data [][32]byte) (*types.Transaction, error) { + return _EAS.Contract.MultiTimestamp(&_EAS.TransactOpts, data) +} + +// Revoke is a paid mutator transaction binding the contract method 0x46926267. +// +// Solidity: function revoke((bytes32,(bytes32,uint256)) request) payable returns() +func (_EAS *EASTransactor) Revoke(opts *bind.TransactOpts, request RevocationRequest) (*types.Transaction, error) { + return _EAS.contract.Transact(opts, "revoke", request) +} + +// Revoke is a paid mutator transaction binding the contract method 0x46926267. +// +// Solidity: function revoke((bytes32,(bytes32,uint256)) request) payable returns() +func (_EAS *EASSession) Revoke(request RevocationRequest) (*types.Transaction, error) { + return _EAS.Contract.Revoke(&_EAS.TransactOpts, request) +} + +// Revoke is a paid mutator transaction binding the contract method 0x46926267. +// +// Solidity: function revoke((bytes32,(bytes32,uint256)) request) payable returns() +func (_EAS *EASTransactorSession) Revoke(request RevocationRequest) (*types.Transaction, error) { + return _EAS.Contract.Revoke(&_EAS.TransactOpts, request) +} + +// RevokeByDelegation is a paid mutator transaction binding the contract method 0xa6d4dbc7. +// +// Solidity: function revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64) delegatedRequest) payable returns() +func (_EAS *EASTransactor) RevokeByDelegation(opts *bind.TransactOpts, delegatedRequest DelegatedRevocationRequest) (*types.Transaction, error) { + return _EAS.contract.Transact(opts, "revokeByDelegation", delegatedRequest) +} + +// RevokeByDelegation is a paid mutator transaction binding the contract method 0xa6d4dbc7. +// +// Solidity: function revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64) delegatedRequest) payable returns() +func (_EAS *EASSession) RevokeByDelegation(delegatedRequest DelegatedRevocationRequest) (*types.Transaction, error) { + return _EAS.Contract.RevokeByDelegation(&_EAS.TransactOpts, delegatedRequest) +} + +// RevokeByDelegation is a paid mutator transaction binding the contract method 0xa6d4dbc7. +// +// Solidity: function revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64) delegatedRequest) payable returns() +func (_EAS *EASTransactorSession) RevokeByDelegation(delegatedRequest DelegatedRevocationRequest) (*types.Transaction, error) { + return _EAS.Contract.RevokeByDelegation(&_EAS.TransactOpts, delegatedRequest) +} + +// RevokeOffchain is a paid mutator transaction binding the contract method 0xcf190f34. +// +// Solidity: function revokeOffchain(bytes32 data) returns(uint64) +func (_EAS *EASTransactor) RevokeOffchain(opts *bind.TransactOpts, data [32]byte) (*types.Transaction, error) { + return _EAS.contract.Transact(opts, "revokeOffchain", data) +} + +// RevokeOffchain is a paid mutator transaction binding the contract method 0xcf190f34. +// +// Solidity: function revokeOffchain(bytes32 data) returns(uint64) +func (_EAS *EASSession) RevokeOffchain(data [32]byte) (*types.Transaction, error) { + return _EAS.Contract.RevokeOffchain(&_EAS.TransactOpts, data) +} + +// RevokeOffchain is a paid mutator transaction binding the contract method 0xcf190f34. +// +// Solidity: function revokeOffchain(bytes32 data) returns(uint64) +func (_EAS *EASTransactorSession) RevokeOffchain(data [32]byte) (*types.Transaction, error) { + return _EAS.Contract.RevokeOffchain(&_EAS.TransactOpts, data) +} + +// Timestamp is a paid mutator transaction binding the contract method 0x4d003070. +// +// Solidity: function timestamp(bytes32 data) returns(uint64) +func (_EAS *EASTransactor) Timestamp(opts *bind.TransactOpts, data [32]byte) (*types.Transaction, error) { + return _EAS.contract.Transact(opts, "timestamp", data) +} + +// Timestamp is a paid mutator transaction binding the contract method 0x4d003070. +// +// Solidity: function timestamp(bytes32 data) returns(uint64) +func (_EAS *EASSession) Timestamp(data [32]byte) (*types.Transaction, error) { + return _EAS.Contract.Timestamp(&_EAS.TransactOpts, data) +} + +// Timestamp is a paid mutator transaction binding the contract method 0x4d003070. +// +// Solidity: function timestamp(bytes32 data) returns(uint64) +func (_EAS *EASTransactorSession) Timestamp(data [32]byte) (*types.Transaction, error) { + return _EAS.Contract.Timestamp(&_EAS.TransactOpts, data) +} + +// EASAttestedIterator is returned from FilterAttested and is used to iterate over the raw logs and unpacked data for Attested events raised by the EAS contract. +type EASAttestedIterator struct { + Event *EASAttested // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *EASAttestedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(EASAttested) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(EASAttested) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *EASAttestedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EASAttestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EASAttested represents a Attested event raised by the EAS contract. +type EASAttested struct { + Recipient common.Address + Attester common.Address + Uid [32]byte + SchemaUID [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterAttested is a free log retrieval operation binding the contract event 0x8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35. +// +// Solidity: event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID) +func (_EAS *EASFilterer) FilterAttested(opts *bind.FilterOpts, recipient []common.Address, attester []common.Address, schemaUID [][32]byte) (*EASAttestedIterator, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + var attesterRule []interface{} + for _, attesterItem := range attester { + attesterRule = append(attesterRule, attesterItem) + } + + var schemaUIDRule []interface{} + for _, schemaUIDItem := range schemaUID { + schemaUIDRule = append(schemaUIDRule, schemaUIDItem) + } + + logs, sub, err := _EAS.contract.FilterLogs(opts, "Attested", recipientRule, attesterRule, schemaUIDRule) + if err != nil { + return nil, err + } + return &EASAttestedIterator{contract: _EAS.contract, event: "Attested", logs: logs, sub: sub}, nil +} + +// WatchAttested is a free log subscription operation binding the contract event 0x8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35. +// +// Solidity: event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID) +func (_EAS *EASFilterer) WatchAttested(opts *bind.WatchOpts, sink chan<- *EASAttested, recipient []common.Address, attester []common.Address, schemaUID [][32]byte) (event.Subscription, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + var attesterRule []interface{} + for _, attesterItem := range attester { + attesterRule = append(attesterRule, attesterItem) + } + + var schemaUIDRule []interface{} + for _, schemaUIDItem := range schemaUID { + schemaUIDRule = append(schemaUIDRule, schemaUIDItem) + } + + logs, sub, err := _EAS.contract.WatchLogs(opts, "Attested", recipientRule, attesterRule, schemaUIDRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(EASAttested) + if err := _EAS.contract.UnpackLog(event, "Attested", 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 +} + +// ParseAttested is a log parse operation binding the contract event 0x8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35. +// +// Solidity: event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID) +func (_EAS *EASFilterer) ParseAttested(log types.Log) (*EASAttested, error) { + event := new(EASAttested) + if err := _EAS.contract.UnpackLog(event, "Attested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EASNonceIncreasedIterator is returned from FilterNonceIncreased and is used to iterate over the raw logs and unpacked data for NonceIncreased events raised by the EAS contract. +type EASNonceIncreasedIterator struct { + Event *EASNonceIncreased // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *EASNonceIncreasedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(EASNonceIncreased) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(EASNonceIncreased) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *EASNonceIncreasedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EASNonceIncreasedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EASNonceIncreased represents a NonceIncreased event raised by the EAS contract. +type EASNonceIncreased struct { + OldNonce *big.Int + NewNonce *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterNonceIncreased is a free log retrieval operation binding the contract event 0x57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7. +// +// Solidity: event NonceIncreased(uint256 oldNonce, uint256 newNonce) +func (_EAS *EASFilterer) FilterNonceIncreased(opts *bind.FilterOpts) (*EASNonceIncreasedIterator, error) { + + logs, sub, err := _EAS.contract.FilterLogs(opts, "NonceIncreased") + if err != nil { + return nil, err + } + return &EASNonceIncreasedIterator{contract: _EAS.contract, event: "NonceIncreased", logs: logs, sub: sub}, nil +} + +// WatchNonceIncreased is a free log subscription operation binding the contract event 0x57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7. +// +// Solidity: event NonceIncreased(uint256 oldNonce, uint256 newNonce) +func (_EAS *EASFilterer) WatchNonceIncreased(opts *bind.WatchOpts, sink chan<- *EASNonceIncreased) (event.Subscription, error) { + + logs, sub, err := _EAS.contract.WatchLogs(opts, "NonceIncreased") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(EASNonceIncreased) + if err := _EAS.contract.UnpackLog(event, "NonceIncreased", 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 +} + +// ParseNonceIncreased is a log parse operation binding the contract event 0x57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7. +// +// Solidity: event NonceIncreased(uint256 oldNonce, uint256 newNonce) +func (_EAS *EASFilterer) ParseNonceIncreased(log types.Log) (*EASNonceIncreased, error) { + event := new(EASNonceIncreased) + if err := _EAS.contract.UnpackLog(event, "NonceIncreased", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EASRevokedIterator is returned from FilterRevoked and is used to iterate over the raw logs and unpacked data for Revoked events raised by the EAS contract. +type EASRevokedIterator struct { + Event *EASRevoked // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *EASRevokedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(EASRevoked) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(EASRevoked) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *EASRevokedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EASRevokedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EASRevoked represents a Revoked event raised by the EAS contract. +type EASRevoked struct { + Recipient common.Address + Attester common.Address + Uid [32]byte + SchemaUID [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRevoked is a free log retrieval operation binding the contract event 0xf930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615. +// +// Solidity: event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID) +func (_EAS *EASFilterer) FilterRevoked(opts *bind.FilterOpts, recipient []common.Address, attester []common.Address, schemaUID [][32]byte) (*EASRevokedIterator, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + var attesterRule []interface{} + for _, attesterItem := range attester { + attesterRule = append(attesterRule, attesterItem) + } + + var schemaUIDRule []interface{} + for _, schemaUIDItem := range schemaUID { + schemaUIDRule = append(schemaUIDRule, schemaUIDItem) + } + + logs, sub, err := _EAS.contract.FilterLogs(opts, "Revoked", recipientRule, attesterRule, schemaUIDRule) + if err != nil { + return nil, err + } + return &EASRevokedIterator{contract: _EAS.contract, event: "Revoked", logs: logs, sub: sub}, nil +} + +// WatchRevoked is a free log subscription operation binding the contract event 0xf930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615. +// +// Solidity: event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID) +func (_EAS *EASFilterer) WatchRevoked(opts *bind.WatchOpts, sink chan<- *EASRevoked, recipient []common.Address, attester []common.Address, schemaUID [][32]byte) (event.Subscription, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + var attesterRule []interface{} + for _, attesterItem := range attester { + attesterRule = append(attesterRule, attesterItem) + } + + var schemaUIDRule []interface{} + for _, schemaUIDItem := range schemaUID { + schemaUIDRule = append(schemaUIDRule, schemaUIDItem) + } + + logs, sub, err := _EAS.contract.WatchLogs(opts, "Revoked", recipientRule, attesterRule, schemaUIDRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(EASRevoked) + if err := _EAS.contract.UnpackLog(event, "Revoked", 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 +} + +// ParseRevoked is a log parse operation binding the contract event 0xf930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615. +// +// Solidity: event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID) +func (_EAS *EASFilterer) ParseRevoked(log types.Log) (*EASRevoked, error) { + event := new(EASRevoked) + if err := _EAS.contract.UnpackLog(event, "Revoked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EASRevokedOffchainIterator is returned from FilterRevokedOffchain and is used to iterate over the raw logs and unpacked data for RevokedOffchain events raised by the EAS contract. +type EASRevokedOffchainIterator struct { + Event *EASRevokedOffchain // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *EASRevokedOffchainIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(EASRevokedOffchain) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(EASRevokedOffchain) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *EASRevokedOffchainIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EASRevokedOffchainIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EASRevokedOffchain represents a RevokedOffchain event raised by the EAS contract. +type EASRevokedOffchain struct { + Revoker common.Address + Data [32]byte + Timestamp uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRevokedOffchain is a free log retrieval operation binding the contract event 0x92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a2229. +// +// Solidity: event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp) +func (_EAS *EASFilterer) FilterRevokedOffchain(opts *bind.FilterOpts, revoker []common.Address, data [][32]byte, timestamp []uint64) (*EASRevokedOffchainIterator, error) { + + var revokerRule []interface{} + for _, revokerItem := range revoker { + revokerRule = append(revokerRule, revokerItem) + } + var dataRule []interface{} + for _, dataItem := range data { + dataRule = append(dataRule, dataItem) + } + var timestampRule []interface{} + for _, timestampItem := range timestamp { + timestampRule = append(timestampRule, timestampItem) + } + + logs, sub, err := _EAS.contract.FilterLogs(opts, "RevokedOffchain", revokerRule, dataRule, timestampRule) + if err != nil { + return nil, err + } + return &EASRevokedOffchainIterator{contract: _EAS.contract, event: "RevokedOffchain", logs: logs, sub: sub}, nil +} + +// WatchRevokedOffchain is a free log subscription operation binding the contract event 0x92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a2229. +// +// Solidity: event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp) +func (_EAS *EASFilterer) WatchRevokedOffchain(opts *bind.WatchOpts, sink chan<- *EASRevokedOffchain, revoker []common.Address, data [][32]byte, timestamp []uint64) (event.Subscription, error) { + + var revokerRule []interface{} + for _, revokerItem := range revoker { + revokerRule = append(revokerRule, revokerItem) + } + var dataRule []interface{} + for _, dataItem := range data { + dataRule = append(dataRule, dataItem) + } + var timestampRule []interface{} + for _, timestampItem := range timestamp { + timestampRule = append(timestampRule, timestampItem) + } + + logs, sub, err := _EAS.contract.WatchLogs(opts, "RevokedOffchain", revokerRule, dataRule, timestampRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(EASRevokedOffchain) + if err := _EAS.contract.UnpackLog(event, "RevokedOffchain", 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 +} + +// ParseRevokedOffchain is a log parse operation binding the contract event 0x92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a2229. +// +// Solidity: event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp) +func (_EAS *EASFilterer) ParseRevokedOffchain(log types.Log) (*EASRevokedOffchain, error) { + event := new(EASRevokedOffchain) + if err := _EAS.contract.UnpackLog(event, "RevokedOffchain", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// EASTimestampedIterator is returned from FilterTimestamped and is used to iterate over the raw logs and unpacked data for Timestamped events raised by the EAS contract. +type EASTimestampedIterator struct { + Event *EASTimestamped // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *EASTimestampedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(EASTimestamped) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(EASTimestamped) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *EASTimestampedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *EASTimestampedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// EASTimestamped represents a Timestamped event raised by the EAS contract. +type EASTimestamped struct { + Data [32]byte + Timestamp uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTimestamped is a free log retrieval operation binding the contract event 0x5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f. +// +// Solidity: event Timestamped(bytes32 indexed data, uint64 indexed timestamp) +func (_EAS *EASFilterer) FilterTimestamped(opts *bind.FilterOpts, data [][32]byte, timestamp []uint64) (*EASTimestampedIterator, error) { + + var dataRule []interface{} + for _, dataItem := range data { + dataRule = append(dataRule, dataItem) + } + var timestampRule []interface{} + for _, timestampItem := range timestamp { + timestampRule = append(timestampRule, timestampItem) + } + + logs, sub, err := _EAS.contract.FilterLogs(opts, "Timestamped", dataRule, timestampRule) + if err != nil { + return nil, err + } + return &EASTimestampedIterator{contract: _EAS.contract, event: "Timestamped", logs: logs, sub: sub}, nil +} + +// WatchTimestamped is a free log subscription operation binding the contract event 0x5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f. +// +// Solidity: event Timestamped(bytes32 indexed data, uint64 indexed timestamp) +func (_EAS *EASFilterer) WatchTimestamped(opts *bind.WatchOpts, sink chan<- *EASTimestamped, data [][32]byte, timestamp []uint64) (event.Subscription, error) { + + var dataRule []interface{} + for _, dataItem := range data { + dataRule = append(dataRule, dataItem) + } + var timestampRule []interface{} + for _, timestampItem := range timestamp { + timestampRule = append(timestampRule, timestampItem) + } + + logs, sub, err := _EAS.contract.WatchLogs(opts, "Timestamped", dataRule, timestampRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(EASTimestamped) + if err := _EAS.contract.UnpackLog(event, "Timestamped", 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 +} + +// ParseTimestamped is a log parse operation binding the contract event 0x5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f. +// +// Solidity: event Timestamped(bytes32 indexed data, uint64 indexed timestamp) +func (_EAS *EASFilterer) ParseTimestamped(log types.Log) (*EASTimestamped, error) { + event := new(EASTimestamped) + if err := _EAS.contract.UnpackLog(event, "Timestamped", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-bindings/bindings/eas_more.go b/op-bindings/bindings/eas_more.go new file mode 100644 index 000000000..56cb953e5 --- /dev/null +++ b/op-bindings/bindings/eas_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const EASStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/EAS/EAS.sol:EAS\",\"label\":\"_nonces\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_mapping(t_address,t_uint256)\"},{\"astId\":1001,\"contract\":\"src/EAS/EAS.sol:EAS\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)49_storage\"},{\"astId\":1002,\"contract\":\"src/EAS/EAS.sol:EAS\",\"label\":\"_db\",\"offset\":0,\"slot\":\"50\",\"type\":\"t_mapping(t_bytes32,t_struct(Attestation)1006_storage)\"},{\"astId\":1003,\"contract\":\"src/EAS/EAS.sol:EAS\",\"label\":\"_timestamps\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_mapping(t_bytes32,t_uint64)\"},{\"astId\":1004,\"contract\":\"src/EAS/EAS.sol:EAS\",\"label\":\"_revocationsOffchain\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_mapping(t_address,t_mapping(t_bytes32,t_uint64))\"},{\"astId\":1005,\"contract\":\"src/EAS/EAS.sol:EAS\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"53\",\"type\":\"t_array(t_uint256)47_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)47_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[47]\",\"numberOfBytes\":\"1504\",\"base\":\"t_uint256\"},\"t_array(t_uint256)49_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\",\"base\":\"t_uint256\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_bytes_storage\":{\"encoding\":\"bytes\",\"label\":\"bytes\",\"numberOfBytes\":\"32\"},\"t_mapping(t_address,t_mapping(t_bytes32,t_uint64))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(bytes32 =\u003e uint64))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_bytes32,t_uint64)\"},\"t_mapping(t_address,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint256\"},\"t_mapping(t_bytes32,t_struct(Attestation)1006_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e struct Attestation)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_struct(Attestation)1006_storage\"},\"t_mapping(t_bytes32,t_uint64)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e uint64)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_uint64\"},\"t_struct(Attestation)1006_storage\":{\"encoding\":\"inplace\",\"label\":\"struct Attestation\",\"numberOfBytes\":\"224\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint64\":{\"encoding\":\"inplace\",\"label\":\"uint64\",\"numberOfBytes\":\"8\"}}}" + +var EASStorageLayout = new(solc.StorageLayout) + +var EASDeployedBin = "0x60806040526004361061018b5760003560e01c806395411525116100d6578063d45c44351161007f578063ed24911d11610059578063ed24911d146104fd578063f10b5cc814610512578063f17325e71461054157600080fd5b8063d45c443514610467578063e30bb5631461049e578063e71ff365146104dd57600080fd5b8063b469318d116100b0578063b469318d146103ba578063b83010d314610414578063cf190f341461044757600080fd5b80639541152514610367578063a3112a641461037a578063a6d4dbc7146103a757600080fd5b806344adc90e116101385780634d003070116101125780634d003070146102de57806354fd4d50146102fe57806379f7573a1461034757600080fd5b806344adc90e1461029857806346926267146102b85780634cb7e9e5146102cb57600080fd5b806317d7de7c1161016957806317d7de7c146102205780632d0335ab146102425780633c0427151461028557600080fd5b80630eabf6601461019057806312b11a17146101a557806313893f61146101e7575b600080fd5b6101a361019e366004613497565b610554565b005b3480156101b157600080fd5b507ff83bb2b0ede93a840239f7e701a54d9bc35f03701f51ae153d601c6947ff3d3f5b6040519081526020015b60405180910390f35b3480156101f357600080fd5b50610207610202366004613497565b6106eb565b60405167ffffffffffffffff90911681526020016101de565b34801561022c57600080fd5b50610235610730565b6040516101de9190613547565b34801561024e57600080fd5b506101d461025d36600461358c565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101d46102933660046135a9565b610760565b6102ab6102a6366004613497565b610863565b6040516101de91906135e4565b6101a36102c6366004613628565b6109e4565b6101a36102d9366004613497565b610a68565b3480156102ea57600080fd5b506102076102f9366004613640565b610b4b565b34801561030a57600080fd5b506102356040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b34801561035357600080fd5b506101a3610362366004613640565b610b58565b6102ab610375366004613497565b610bef565b34801561038657600080fd5b5061039a610395366004613640565b610e62565b6040516101de9190613740565b6101a36103b5366004613753565b611025565b3480156103c657600080fd5b506102076103d5366004613766565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152603460209081526040808320938352929052205467ffffffffffffffff1690565b34801561042057600080fd5b507f2d4116d8c9824e4c316453e5c2843a1885580374159ce8768603c49085ef424c6101d4565b34801561045357600080fd5b50610207610462366004613640565b6110ca565b34801561047357600080fd5b50610207610482366004613640565b60009081526033602052604090205467ffffffffffffffff1690565b3480156104aa57600080fd5b506104cd6104b9366004613640565b600090815260326020526040902054151590565b60405190151581526020016101de565b3480156104e957600080fd5b506102076104f8366004613497565b6110d8565b34801561050957600080fd5b506101d4611110565b34801561051e57600080fd5b5060405173420000000000000000000000000000000000002081526020016101de565b6101d461054f366004613792565b61111a565b348160005b818110156106e4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82018114600086868481811061059a5761059a6137cd565b90506020028101906105ac91906137fc565b6105b590613a92565b60208101518051919250908015806105d257508260400151518114155b15610609576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156106ad576106a56040518060a001604052808660000151815260200185848151811061063e5761063e6137cd565b6020026020010151815260200186604001518481518110610661576106616137cd565b60200260200101518152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015167ffffffffffffffff168152506111d8565b60010161060c565b506106c383600001518385606001518a886113c5565b6106cd9088613bbc565b9650505050506106dd8160010190565b9050610559565b5050505050565b60004282825b818110156107245761071c3387878481811061070f5761070f6137cd565b90506020020135856119f4565b6001016106f1565b50909150505b92915050565b606061075b7f0000000000000000000000000000000000000000000000000000000000000000611af3565b905090565b600061077361076e83613cf1565b611c81565b604080516001808252818301909252600091816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161078a5790505090506107f86020840184613d6c565b61080190613da0565b81600081518110610814576108146137cd565b602090810291909101015261083d83358261083560c0870160a0880161358c565b346001611dfe565b60200151600081518110610853576108536137cd565b6020026020010151915050919050565b60608160008167ffffffffffffffff8111156108815761088161383a565b6040519080825280602002602001820160405280156108b457816020015b606081526020019060019003908161089f5790505b509050600034815b848110156109ce577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85018114368989848181106108fc576108fc6137cd565b905060200281019061090e9190613dac565b905061091d6020820182613de0565b9050600003610958576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061097d823561096c6020850185613de0565b61097591613e48565b338887611dfe565b805190915061098c9086613bbc565b945080602001518785815181106109a5576109a56137cd565b6020026020010181905250806020015151860195505050506109c78160010190565b90506108bc565b506109d98383612510565b979650505050505050565b604080516001808252818301909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816109fb579050509050610a3636839003830160208401613ebc565b81600081518110610a4957610a496137cd565b6020908102919091010152610a63823582333460016113c5565b505050565b348160005b818110156106e4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201811436868684818110610aad57610aad6137cd565b9050602002810190610abf9190613dac565b9050610b2c8135610ad36020840184613ed8565b808060200260200160405190810160405280939291908181526020016000905b82821015610b1f57610b1060408302860136819003810190613ebc565b81526020019060010190610af3565b50505050503388866113c5565b610b369086613bbc565b94505050610b448160010190565b9050610a6d565b60004261072a83826125fa565b33600090815260208190526040902054808211610ba1576040517f756688fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152602081815260409182902084905581518381529081018490527f57b09af877df9068fd60a69d7b21f5576b8b38955812d6ae4ac52942f1e38fb7910160405180910390a15050565b60608160008167ffffffffffffffff811115610c0d57610c0d61383a565b604051908082528060200260200182016040528015610c4057816020015b6060815260200190600190039081610c2b5790505b509050600034815b848110156109ce577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501811436898984818110610c8857610c886137cd565b9050602002810190610c9a91906137fc565b9050366000610cac6020840184613de0565b909250905080801580610ccd5750610cc76040850185613f40565b90508114155b15610d04576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610de557610ddd6040518060a0016040528087600001358152602001868685818110610d3957610d396137cd565b9050602002810190610d4b9190613d6c565b610d5490613da0565b8152602001610d666040890189613f40565b85818110610d7657610d766137cd565b905060600201803603810190610d8c9190613fa7565b8152602001610da16080890160608a0161358c565b73ffffffffffffffffffffffffffffffffffffffff168152602001610dcc60a0890160808a01613fc3565b67ffffffffffffffff169052611c81565b600101610d07565b506000610e0e8535610df78587613e48565b610e076080890160608a0161358c565b8b8a611dfe565b8051909150610e1d9089613bbc565b975080602001518a8881518110610e3657610e366137cd565b602002602001018190525080602001515189019850505050505050610e5b8160010190565b9050610c48565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082019290925261012081019190915260008281526032602090815260409182902082516101408101845281548152600182015492810192909252600281015467ffffffffffffffff808216948401949094526801000000000000000081048416606084015270010000000000000000000000000000000090049092166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff16151561010082015260068201805491929161012084019190610f9c90613fde565b80601f0160208091040260200160405190810160405280929190818152602001828054610fc890613fde565b80156110155780601f10610fea57610100808354040283529160200191611015565b820191906000526020600020905b815481529060010190602001808311610ff857829003601f168201915b5050505050815250509050919050565b61103c6110373683900383018361402b565b6111d8565b604080516001808252818301909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161105357905050905061108e36839003830160208401613ebc565b816000815181106110a1576110a16137cd565b6020908102919091010152610a638235826110c260e0860160c0870161358c565b3460016113c5565b60004261072a3384836119f4565b60004282825b81811015610724576111088686838181106110fb576110fb6137cd565b90506020020135846125fa565b6001016110de565b600061075b6126bc565b604080516001808252818301909252600091829190816020015b6040805160c081018252600080825260208083018290529282018190526060808301829052608083015260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816111345790505090506111a26020840184613d6c565b6111ab90613da0565b816000815181106111be576111be6137cd565b602090810291909101015261083d83358233346001611dfe565b608081015167ffffffffffffffff161580159061120c57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611243576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516040808401518451835184860151606088015173ffffffffffffffffffffffffffffffffffffffff166000908152968790529386208054959693959394611313947f2d4116d8c9824e4c316453e5c2843a1885580374159ce8768603c49085ef424c949392876112b883614099565b909155506080808b015160408051602081019890985287019590955260608601939093529184015260a083015267ffffffffffffffff1660c082015260e0015b604051602081830303815290604052805190602001206127f0565b905061138984606001518284602001518560400151866000015160405160200161137593929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b604051602081830303815290604052612803565b6113bf576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040517fa2ea7c6e0000000000000000000000000000000000000000000000000000000081526004810186905260009081907342000000000000000000000000000000000000209063a2ea7c6e90602401600060405180830381865afa158015611433573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261147991908101906140d1565b80519091506114b4576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855160008167ffffffffffffffff8111156114d1576114d161383a565b60405190808252806020026020018201604052801561157057816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816114ef5790505b50905060008267ffffffffffffffff81111561158e5761158e61383a565b6040519080825280602002602001820160405280156115b7578160200160208202803683370190505b50905060005b838110156119d65760008a82815181106115d9576115d96137cd565b6020908102919091018101518051600090815260329092526040909120805491925090611632576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c81600101541461166f576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015473ffffffffffffffffffffffffffffffffffffffff8c81169116146116c5576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581015474010000000000000000000000000000000000000000900460ff1661171b576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810154700100000000000000000000000000000000900467ffffffffffffffff1615611775576040517f905e710700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811670010000000000000000000000000000000067ffffffffffffffff948516810291821793849055604080516101408101825287548152600188015460208201529386169286169290921791830191909152680100000000000000008304841660608301529091049091166080820152600382015460a0820152600482015473ffffffffffffffffffffffffffffffffffffffff90811660c0830152600583015490811660e083015274010000000000000000000000000000000000000000900460ff161515610100820152600682018054839161012084019161188190613fde565b80601f01602080910402602001604051908101604052809291908181526020018280546118ad90613fde565b80156118fa5780601f106118cf576101008083540402835291602001916118fa565b820191906000526020600020905b8154815290600101906020018083116118dd57829003601f168201915b505050505081525050858481518110611915576119156137cd565b60200260200101819052508160200151848481518110611937576119376137cd565b6020026020010181815250508c8b73ffffffffffffffffffffffffffffffffffffffff1686858151811061196d5761196d6137cd565b602002602001015160c0015173ffffffffffffffffffffffffffffffffffffffff167ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f61585600001516040516119c491815260200190565b60405180910390a450506001016115bd565b506119e684838360018b8b6129d2565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603460209081526040808320858452918290529091205467ffffffffffffffff1615611a68576040517fec9d6eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526020829052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861690811790915590519091859173ffffffffffffffffffffffffffffffffffffffff8816917f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a222991a450505050565b604080516020808252818301909252606091600091906020820181803683370190505090506000805b6020811015611bbe576000858260208110611b3957611b396137cd565b1a60f81b90507fff000000000000000000000000000000000000000000000000000000000000008116600003611b6f5750611bbe565b80848481518110611b8257611b826137cd565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060019182019101611b1c565b5060008167ffffffffffffffff811115611bda57611bda61383a565b6040519080825280601f01601f191660200182016040528015611c04576020820181803683370190505b50905060005b82811015611c7857838181518110611c2457611c246137cd565b602001015160f81c60f81b828281518110611c4157611c416137cd565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101611c0a565b50949350505050565b608081015167ffffffffffffffff1615801590611cb557504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611cec576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015160408084015184518351848601518486015160608088015160808901518051908b012060a08a0151928c015173ffffffffffffffffffffffffffffffffffffffff1660009081529a8b9052978a208054999a97999798611313987ff83bb2b0ede93a840239f7e701a54d9bc35f03701f51ae153d601c6947ff3d3f989796959491928b611d7e83614099565b909155506080808f015160408051602081019c909c528b019990995273ffffffffffffffffffffffffffffffffffffffff90971660608a015267ffffffffffffffff9586169689019690965292151560a088015260c087019190915260e086015261010085015261012084019190915216610140820152610160016112f8565b60408051808201909152600081526060602082015284516040805180820190915260008152606060208201528167ffffffffffffffff811115611e4357611e4361383a565b604051908082528060200260200182016040528015611e6c578160200160208202803683370190505b5060208201526040517fa2ea7c6e000000000000000000000000000000000000000000000000000000008152600481018990526000907342000000000000000000000000000000000000209063a2ea7c6e90602401600060405180830381865afa158015611ede573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611f2491908101906140d1565b8051909150611f5f576040517fbf37b20e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff811115611f7a57611f7a61383a565b60405190808252806020026020018201604052801561201957816020015b60408051610140810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083019190915261012082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181611f985790505b50905060008467ffffffffffffffff8111156120375761203761383a565b604051908082528060200260200182016040528015612060578160200160208202803683370190505b50905060005b858110156124ef5760008b8281518110612082576120826137cd565b60200260200101519050600067ffffffffffffffff16816020015167ffffffffffffffff16141580156120cd57504267ffffffffffffffff16816020015167ffffffffffffffff1611155b15612104576040517f08e8b93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8460400151158015612117575080604001515b1561214e576040517f157bd4c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518061014001604052806000801b81526020018f81526020016121724290565b67ffffffffffffffff168152602001836020015167ffffffffffffffff168152602001600067ffffffffffffffff16815260200183606001518152602001836000015173ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815260200183604001511515815260200183608001518152509050600080600090505b6122148382612dc3565b600081815260326020526040902054909250156122335760010161220a565b81835260008281526032602090815260409182902085518155908501516001820155908401516002820180546060870151608088015167ffffffffffffffff908116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff92821668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169190951617919091171691909117905560a0840151600382015560c084015160048201805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905560e0850151600583018054610100880151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff000000000000000000000000000000000000000000909116929093169190911791909117905561012084015184919060068201906123b390826141f7565b50505060608401511561240a57606084015160009081526032602052604090205461240a576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8287868151811061241d5761241d6137cd565b60200260200101819052508360a0015186868151811061243f5761243f6137cd565b6020026020010181815250508189602001518681518110612462576124626137cd565b6020026020010181815250508f8e73ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35856040516124d291815260200190565b60405180910390a4505050506124e88160010190565b9050612066565b506124ff83838360008c8c6129d2565b845250919998505050505050505050565b606060008267ffffffffffffffff81111561252d5761252d61383a565b604051908082528060200260200182016040528015612556578160200160208202803683370190505b508451909150600090815b818110156125ef57600087828151811061257d5761257d6137cd565b6020026020010151905060008151905060005b818110156125db578281815181106125aa576125aa6137cd565b60200260200101518787815181106125c4576125c46137cd565b602090810291909101015260019586019501612590565b5050506125e88160010190565b9050612561565b509195945050505050565b60008281526033602052604090205467ffffffffffffffff161561264a576040517f2e26794600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526033602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051909184917f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f9190a35050565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561272257507f000000000000000000000000000000000000000000000000000000000000000046145b1561274c57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600061072a6127fd6126bc565b83612e22565b60008060006128128585612e64565b9092509050600081600481111561282b5761282b614311565b14801561286357508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15612873576001925050506129cb565b6000808773ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b88886040516024016128a8929190614340565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516129319190614361565b600060405180830381855afa9150503d806000811461296c576040519150601f19603f3d011682016040523d82523d6000602084013e612971565b606091505b5091509150818015612984575080516020145b80156129c4575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906129c29083016020908101908401614373565b145b9450505050505b9392505050565b84516000906001819003612a2a57612a2288886000815181106129f7576129f76137cd565b602002602001015188600081518110612a1257612a126137cd565b6020026020010151888888612ea9565b915050612db9565b602088015173ffffffffffffffffffffffffffffffffffffffff8116612acb5760005b82811015612ab057878181518110612a6757612a676137cd565b6020026020010151600014612aa8576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101612a4d565b508315612ac057612ac0856131c8565b600092505050612db9565b6000808273ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3d919061438c565b905060005b84811015612bfa5760008a8281518110612b5e57612b5e6137cd565b6020026020010151905080600003612b765750612bf2565b82612bad576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88811115612be7576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b978890039792909201915b600101612b42565b508715612cd5576040517f88e5b2d900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906388e5b2d9908490612c57908e908e906004016143a9565b60206040518083038185885af1158015612c75573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c9a919061438c565b612cd0576040517fbf2f3a8b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612da4565b6040517f91db0b7e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906391db0b7e908490612d2b908e908e906004016143a9565b60206040518083038185885af1158015612d49573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d6e919061438c565b612da4576040517fe8bee83900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8515612db357612db3876131c8565b50925050505b9695505050505050565b60208083015160c084015160e0850151604080870151606088015161010089015160a08a01516101208b01519451600099612e0499989796918c9101614462565b60405160208183030381529060405280519060200120905092915050565b6040517f190100000000000000000000000000000000000000000000000000000000000060208201526022810183905260428101829052600090606201612e04565b6000808251604103612e9a5760208301516040840151606085015160001a612e8e878285856131db565b94509450505050612ea2565b506000905060025b9250929050565b602086015160009073ffffffffffffffffffffffffffffffffffffffff8116612f1d578515612f04576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8215612f1357612f13846131c8565b6000915050612db9565b8515613008578073ffffffffffffffffffffffffffffffffffffffff1663ce46e0466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f92919061438c565b612fc8576040517f1574f9f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83861115613002576040517f1101129400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85840393505b84156130e0576040517fe49617e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e49617e1908890613062908b90600401613740565b60206040518083038185885af1158015613080573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130a5919061438c565b6130db576040517fccf3bb2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6131ad565b6040517fe60c350500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e60c3505908890613134908b90600401613740565b60206040518083038185885af1158015613152573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613177919061438c565b6131ad576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82156131bc576131bc846131c8565b50939695505050505050565b80156131d8576131d833826132f3565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561321257506000905060036132ea565b8460ff16601b1415801561322a57508460ff16601c14155b1561323b57506000905060046132ea565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561328f573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166132e3576000600192509250506132ea565b9150600090505b94509492505050565b80471015613362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146133bc576040519150601f19603f3d011682016040523d82523d6000602084013e6133c1565b606091505b5050905080610a63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401613359565b60008083601f84011261346457600080fd5b50813567ffffffffffffffff81111561347c57600080fd5b6020830191508360208260051b8501011115612ea257600080fd5b600080602083850312156134aa57600080fd5b823567ffffffffffffffff8111156134c157600080fd5b6134cd85828601613452565b90969095509350505050565b60005b838110156134f45781810151838201526020016134dc565b50506000910152565b600081518084526135158160208601602086016134d9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129cb60208301846134fd565b73ffffffffffffffffffffffffffffffffffffffff811681146131d857600080fd5b80356135878161355a565b919050565b60006020828403121561359e57600080fd5b81356129cb8161355a565b6000602082840312156135bb57600080fd5b813567ffffffffffffffff8111156135d257600080fd5b820160e081850312156129cb57600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561361c57835183529284019291840191600101613600565b50909695505050505050565b60006060828403121561363a57600080fd5b50919050565b60006020828403121561365257600080fd5b5035919050565b600061014082518452602083015160208501526040830151613687604086018267ffffffffffffffff169052565b5060608301516136a3606086018267ffffffffffffffff169052565b5060808301516136bf608086018267ffffffffffffffff169052565b5060a083015160a085015260c08301516136f160c086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e083015161371960e086018273ffffffffffffffffffffffffffffffffffffffff169052565b506101008381015115159085015261012080840151818601839052612db9838701826134fd565b6020815260006129cb6020830184613659565b6000610100828403121561363a57600080fd5b6000806040838503121561377957600080fd5b82356137848161355a565b946020939093013593505050565b6000602082840312156137a457600080fd5b813567ffffffffffffffff8111156137bb57600080fd5b8201604081850312156129cb57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6183360301811261383057600080fd5b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561388c5761388c61383a565b60405290565b60405160c0810167ffffffffffffffff8111828210171561388c5761388c61383a565b6040516080810167ffffffffffffffff8111828210171561388c5761388c61383a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561391f5761391f61383a565b604052919050565b600067ffffffffffffffff8211156139415761394161383a565b5060051b60200190565b60006040828403121561395d57600080fd5b6040516040810181811067ffffffffffffffff821117156139805761398061383a565b604052823581526020928301359281019290925250919050565b6000606082840312156139ac57600080fd5b6040516060810181811067ffffffffffffffff821117156139cf576139cf61383a565b604052905080823560ff811681146139e657600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112613a1657600080fd5b81356020613a2b613a2683613927565b6138d8565b82815260609283028501820192828201919087851115613a4a57600080fd5b8387015b85811015613a6d57613a60898261399a565b8452928401928101613a4e565b5090979650505050505050565b803567ffffffffffffffff8116811461358757600080fd5b600060a08236031215613aa457600080fd5b613aac613869565b8235815260208084013567ffffffffffffffff80821115613acc57600080fd5b9085019036601f830112613adf57600080fd5b8135613aed613a2682613927565b81815260069190911b83018401908481019036831115613b0c57600080fd5b938501935b82851015613b3557613b23368661394b565b82528582019150604085019450613b11565b80868801525050506040860135925080831115613b5157600080fd5b5050613b5f36828601613a05565b604083015250613b716060840161357c565b6060820152613b8260808401613a7a565b608082015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561072a5761072a613b8d565b80151581146131d857600080fd5b600067ffffffffffffffff821115613bf757613bf761383a565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600060c08284031215613c3557600080fd5b613c3d613892565b90508135613c4a8161355a565b81526020613c59838201613a7a565b818301526040830135613c6b81613bcf565b604083015260608381013590830152608083013567ffffffffffffffff811115613c9457600080fd5b8301601f81018513613ca557600080fd5b8035613cb3613a2682613bdd565b8181528684838501011115613cc757600080fd5b818484018583013760008483830101528060808601525050505060a082013560a082015292915050565b600060e08236031215613d0357600080fd5b613d0b613869565b82358152602083013567ffffffffffffffff811115613d2957600080fd5b613d3536828601613c23565b602083015250613d48366040850161399a565b604082015260a0830135613d5b8161355a565b6060820152613b8260c08401613a7a565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4183360301811261383057600080fd5b600061072a3683613c23565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261383057600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613e1557600080fd5b83018035915067ffffffffffffffff821115613e3057600080fd5b6020019150600581901b3603821315612ea257600080fd5b6000613e56613a2684613927565b80848252602080830192508560051b850136811115613e7457600080fd5b855b81811015613eb057803567ffffffffffffffff811115613e965760008081fd5b613ea236828a01613c23565b865250938201938201613e76565b50919695505050505050565b600060408284031215613ece57600080fd5b6129cb838361394b565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f0d57600080fd5b83018035915067ffffffffffffffff821115613f2857600080fd5b6020019150600681901b3603821315612ea257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f7557600080fd5b83018035915067ffffffffffffffff821115613f9057600080fd5b6020019150606081023603821315612ea257600080fd5b600060608284031215613fb957600080fd5b6129cb838361399a565b600060208284031215613fd557600080fd5b6129cb82613a7a565b600181811c90821680613ff257607f821691505b60208210810361363a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000610100828403121561403e57600080fd5b614046613869565b82358152614057846020850161394b565b6020820152614069846060850161399a565b604082015260c083013561407c8161355a565b606082015261408d60e08401613a7a565b60808201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036140ca576140ca613b8d565b5060010190565b600060208083850312156140e457600080fd5b825167ffffffffffffffff808211156140fc57600080fd5b908401906080828703121561411057600080fd5b6141186138b5565b82518152838301516141298161355a565b81850152604083015161413b81613bcf565b604082015260608301518281111561415257600080fd5b80840193505086601f84011261416757600080fd5b82519150614177613a2683613bdd565b828152878584860101111561418b57600080fd5b61419a838683018787016134d9565b60608201529695505050505050565b601f821115610a6357600081815260208120601f850160051c810160208610156141d05750805b601f850160051c820191505b818110156141ef578281556001016141dc565b505050505050565b815167ffffffffffffffff8111156142115761421161383a565b6142258161421f8454613fde565b846141a9565b602080601f83116001811461427857600084156142425750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556141ef565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156142c5578886015182559484019460019091019084016142a6565b508582101561430157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b82815260406020820152600061435960408301846134fd565b949350505050565b600082516138308184602087016134d9565b60006020828403121561438557600080fd5b5051919050565b60006020828403121561439e57600080fd5b81516129cb81613bcf565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b8381101561441e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa088870301855261440c868351613659565b955093820193908201906001016143d2565b50508584038187015286518085528782019482019350915060005b8281101561445557845184529381019392810192600101614439565b5091979650505050505050565b89815260007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b166020840152808a60601b166034840152507fffffffffffffffff000000000000000000000000000000000000000000000000808960c01b166048840152808860c01b1660508401525085151560f81b605883015284605983015283516144fb8160798501602088016134d9565b80830190507fffffffff000000000000000000000000000000000000000000000000000000008460e01b166079820152607d81019150509a995050505050505050505056fea164736f6c6343000813000a" + +func init() { + if err := json.Unmarshal([]byte(EASStorageLayoutJSON), EASStorageLayout); err != nil { + panic(err) + } + + layouts["EAS"] = EASStorageLayout + deployedBytecodes["EAS"] = EASDeployedBin +} diff --git a/op-bindings/bindings/erc20.go b/op-bindings/bindings/erc20.go index bc1fe9009..766f6eb69 100644 --- a/op-bindings/bindings/erc20.go +++ b/op-bindings/bindings/erc20.go @@ -26,13 +26,12 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription - _ = abi.ConvertType ) // ERC20MetaData contains all meta data concerning the ERC20 contract. var ERC20MetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040523480156200001157600080fd5b5060405162000de638038062000de683398101604081905262000034916200011f565b600362000042838262000218565b50600462000051828262000218565b505050620002e4565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200008257600080fd5b81516001600160401b03808211156200009f576200009f6200005a565b604051601f8301601f19908116603f01168101908282118183101715620000ca57620000ca6200005a565b81604052838152602092508683858801011115620000e757600080fd5b600091505b838210156200010b5785820183015181830184015290820190620000ec565b600093810190920192909252949350505050565b600080604083850312156200013357600080fd5b82516001600160401b03808211156200014b57600080fd5b620001598683870162000070565b935060208501519150808211156200017057600080fd5b506200017f8582860162000070565b9150509250929050565b600181811c908216806200019e57607f821691505b602082108103620001bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021357600081815260208120601f850160051c81016020861015620001ee5750805b601f850160051c820191505b818110156200020f57828155600101620001fa565b5050505b505050565b81516001600160401b038111156200023457620002346200005a565b6200024c8162000245845462000189565b84620001c5565b602080601f8311600181146200028457600084156200026b5750858301515b600019600386901b1c1916600185901b1785556200020f565b600085815260208120601f198616915b82811015620002b55788860151825594840194600190910190840162000294565b5085821015620002d45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610af280620002f46000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80633950935111610081578063a457c2d71161005b578063a457c2d714610194578063a9059cbb146101a7578063dd62ed3e146101ba57600080fd5b8063395093511461014357806370a082311461015657806395d89b411461018c57600080fd5b806318160ddd116100b257806318160ddd1461010f57806323b872dd14610121578063313ce5671461013457600080fd5b806306fdde03146100ce578063095ea7b3146100ec575b600080fd5b6100d6610200565b6040516100e39190610908565b60405180910390f35b6100ff6100fa36600461099d565b610292565b60405190151581526020016100e3565b6002545b6040519081526020016100e3565b6100ff61012f3660046109c7565b6102ac565b604051601281526020016100e3565b6100ff61015136600461099d565b6102d0565b610113610164366004610a03565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100d661031c565b6100ff6101a236600461099d565b61032b565b6100ff6101b536600461099d565b610401565b6101136101c8366004610a25565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461020f90610a58565b80601f016020809104026020016040519081016040528092919081815260200182805461023b90610a58565b80156102885780601f1061025d57610100808354040283529160200191610288565b820191906000526020600020905b81548152906001019060200180831161026b57829003601f168201915b5050505050905090565b6000336102a081858561040f565b60019150505b92915050565b6000336102ba8582856105c2565b6102c5858585610699565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906102a09082908690610317908790610aab565b61040f565b60606004805461020f90610a58565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6102c5828686840361040f565b6000336102a0818585610699565b73ffffffffffffffffffffffffffffffffffffffff83166104b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016103eb565b73ffffffffffffffffffffffffffffffffffffffff8216610554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016103eb565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146106935781811015610686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103eb565b610693848484840361040f565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831661073c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016103eb565b73ffffffffffffffffffffffffffffffffffffffff82166107df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016103eb565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016103eb565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610693565b600060208083528351808285015260005b8181101561093557858101830151858201604001528201610919565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461099857600080fd5b919050565b600080604083850312156109b057600080fd5b6109b983610974565b946020939093013593505050565b6000806000606084860312156109dc57600080fd5b6109e584610974565b92506109f360208501610974565b9150604084013590509250925092565b600060208284031215610a1557600080fd5b610a1e82610974565b9392505050565b60008060408385031215610a3857600080fd5b610a4183610974565b9150610a4f60208401610974565b90509250929050565b600181811c90821680610a6c57607f821691505b602082108103610aa5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156102a6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea164736f6c6343000813000a", + Bin: "0x60806040523480156200001157600080fd5b5060405162000e3c38038062000e3c833981016040819052620000349162000127565b600362000042838262000220565b50600462000051828262000220565b505050620002ec565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200008257600080fd5b81516001600160401b03808211156200009f576200009f6200005a565b604051601f8301601f19908116603f01168101908282118183101715620000ca57620000ca6200005a565b81604052838152602092508683858801011115620000e757600080fd5b600091505b838210156200010b5785820183015181830184015290820190620000ec565b838211156200011d5760008385830101525b9695505050505050565b600080604083850312156200013b57600080fd5b82516001600160401b03808211156200015357600080fd5b620001618683870162000070565b935060208501519150808211156200017857600080fd5b50620001878582860162000070565b9150509250929050565b600181811c90821680620001a657607f821691505b602082108103620001c757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021b57600081815260208120601f850160051c81016020861015620001f65750805b601f850160051c820191505b81811015620002175782815560010162000202565b5050505b505050565b81516001600160401b038111156200023c576200023c6200005a565b62000254816200024d845462000191565b84620001cd565b602080601f8311600181146200028c5760008415620002735750858301515b600019600386901b1c1916600185901b17855562000217565b600085815260208120601f198616915b82811015620002bd578886015182559484019460019091019084016200029c565b5085821015620002dc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610b4080620002fc6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80633950935111610081578063a457c2d71161005b578063a457c2d714610194578063a9059cbb146101a7578063dd62ed3e146101ba57600080fd5b8063395093511461014357806370a082311461015657806395d89b411461018c57600080fd5b806318160ddd116100b257806318160ddd1461010f57806323b872dd14610121578063313ce5671461013457600080fd5b806306fdde03146100ce578063095ea7b3146100ec575b600080fd5b6100d6610200565b6040516100e3919061094a565b60405180910390f35b6100ff6100fa3660046109e6565b610292565b60405190151581526020016100e3565b6002545b6040519081526020016100e3565b6100ff61012f366004610a10565b6102aa565b604051601281526020016100e3565b6100ff6101513660046109e6565b6102ce565b610113610164366004610a4c565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100d661031a565b6100ff6101a23660046109e6565b610329565b6100ff6101b53660046109e6565b6103ff565b6101136101c8366004610a6e565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461020f90610aa1565b80601f016020809104026020016040519081016040528092919081815260200182805461023b90610aa1565b80156102885780601f1061025d57610100808354040283529160200191610288565b820191906000526020600020905b81548152906001019060200180831161026b57829003601f168201915b5050505050905090565b6000336102a081858561040d565b5060019392505050565b6000336102b88582856105c0565b6102c3858585610697565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906102a09082908690610315908790610af4565b61040d565b60606004805461020f90610aa1565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156103f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6102c3828686840361040d565b6000336102a0818585610697565b73ffffffffffffffffffffffffffffffffffffffff83166104af576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff8216610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146106915781811015610684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103e9565b610691848484840361040d565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831661073a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff82166107dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082208585039055918516815290812080548492906108d7908490610af4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161093d91815260200190565b60405180910390a3610691565b600060208083528351808285015260005b818110156109775785810183015185820160400152820161095b565b81811115610989576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146109e157600080fd5b919050565b600080604083850312156109f957600080fd5b610a02836109bd565b946020939093013593505050565b600080600060608486031215610a2557600080fd5b610a2e846109bd565b9250610a3c602085016109bd565b9150604084013590509250925092565b600060208284031215610a5e57600080fd5b610a67826109bd565b9392505050565b60008060408385031215610a8157600080fd5b610a8a836109bd565b9150610a98602084016109bd565b90509250929050565b600181811c90821680610ab557607f821691505b602082108103610aee577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008219821115610b2e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fea164736f6c634300080f000a", } // ERC20ABI is the input ABI used to generate the binding from. @@ -157,11 +156,11 @@ func NewERC20Filterer(address common.Address, filterer bind.ContractFilterer) (* // bindERC20 binds a generic wrapper to an already deployed contract. func bindERC20(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := ERC20MetaData.GetAbi() + parsed, err := abi.JSON(strings.NewReader(ERC20ABI)) if err != nil { return nil, err } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and diff --git a/op-bindings/bindings/erc20_more.go b/op-bindings/bindings/erc20_more.go new file mode 100644 index 000000000..11a76077e --- /dev/null +++ b/op-bindings/bindings/erc20_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const ERC20StorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol:ERC20\",\"label\":\"_balances\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_mapping(t_address,t_uint256)\"},{\"astId\":1001,\"contract\":\"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol:ERC20\",\"label\":\"_allowances\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_mapping(t_address,t_mapping(t_address,t_uint256))\"},{\"astId\":1002,\"contract\":\"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol:ERC20\",\"label\":\"_totalSupply\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_uint256\"},{\"astId\":1003,\"contract\":\"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol:ERC20\",\"label\":\"_name\",\"offset\":0,\"slot\":\"3\",\"type\":\"t_string_storage\"},{\"astId\":1004,\"contract\":\"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol:ERC20\",\"label\":\"_symbol\",\"offset\":0,\"slot\":\"4\",\"type\":\"t_string_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_mapping(t_address,t_mapping(t_address,t_uint256))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(address =\u003e uint256))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_address,t_uint256)\"},\"t_mapping(t_address,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint256\"},\"t_string_storage\":{\"encoding\":\"bytes\",\"label\":\"string\",\"numberOfBytes\":\"32\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"}}}" + +var ERC20StorageLayout = new(solc.StorageLayout) + +var ERC20DeployedBin = "0x608060405234801561001057600080fd5b50600436106100c95760003560e01c80633950935111610081578063a457c2d71161005b578063a457c2d714610194578063a9059cbb146101a7578063dd62ed3e146101ba57600080fd5b8063395093511461014357806370a082311461015657806395d89b411461018c57600080fd5b806318160ddd116100b257806318160ddd1461010f57806323b872dd14610121578063313ce5671461013457600080fd5b806306fdde03146100ce578063095ea7b3146100ec575b600080fd5b6100d6610200565b6040516100e3919061094a565b60405180910390f35b6100ff6100fa3660046109e6565b610292565b60405190151581526020016100e3565b6002545b6040519081526020016100e3565b6100ff61012f366004610a10565b6102aa565b604051601281526020016100e3565b6100ff6101513660046109e6565b6102ce565b610113610164366004610a4c565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100d661031a565b6100ff6101a23660046109e6565b610329565b6100ff6101b53660046109e6565b6103ff565b6101136101c8366004610a6e565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461020f90610aa1565b80601f016020809104026020016040519081016040528092919081815260200182805461023b90610aa1565b80156102885780601f1061025d57610100808354040283529160200191610288565b820191906000526020600020905b81548152906001019060200180831161026b57829003601f168201915b5050505050905090565b6000336102a081858561040d565b5060019392505050565b6000336102b88582856105c0565b6102c3858585610697565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906102a09082908690610315908790610af4565b61040d565b60606004805461020f90610aa1565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156103f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6102c3828686840361040d565b6000336102a0818585610697565b73ffffffffffffffffffffffffffffffffffffffff83166104af576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff8216610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146106915781811015610684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103e9565b610691848484840361040d565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831661073a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff82166107dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016103e9565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082208585039055918516815290812080548492906108d7908490610af4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161093d91815260200190565b60405180910390a3610691565b600060208083528351808285015260005b818110156109775785810183015185820160400152820161095b565b81811115610989576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146109e157600080fd5b919050565b600080604083850312156109f957600080fd5b610a02836109bd565b946020939093013593505050565b600080600060608486031215610a2557600080fd5b610a2e846109bd565b9250610a3c602085016109bd565b9150604084013590509250925092565b600060208284031215610a5e57600080fd5b610a67826109bd565b9392505050565b60008060408385031215610a8157600080fd5b610a8a836109bd565b9150610a98602084016109bd565b90509250929050565b600181811c90821680610ab557607f821691505b602082108103610aee577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008219821115610b2e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(ERC20StorageLayoutJSON), ERC20StorageLayout); err != nil { + panic(err) + } + + layouts["ERC20"] = ERC20StorageLayout + deployedBytecodes["ERC20"] = ERC20DeployedBin +} diff --git a/op-bindings/bindings/faultdisputegame.go b/op-bindings/bindings/faultdisputegame.go new file mode 100644 index 000000000..b2b9ee9c1 --- /dev/null +++ b/op-bindings/bindings/faultdisputegame.go @@ -0,0 +1,1365 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// IFaultDisputeGameOutputProposal is an auto generated low-level Go binding around an user-defined struct. +type IFaultDisputeGameOutputProposal struct { + Index *big.Int + L2BlockNumber *big.Int + OutputRoot [32]byte +} + +// FaultDisputeGameMetaData contains all meta data concerning the FaultDisputeGame contract. +var FaultDisputeGameMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"GameType\",\"name\":\"_gameType\",\"type\":\"uint8\"},{\"internalType\":\"Claim\",\"name\":\"_absolutePrestate\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_maxGameDepth\",\"type\":\"uint256\"},{\"internalType\":\"Duration\",\"name\":\"_gameDuration\",\"type\":\"uint64\"},{\"internalType\":\"contractIBigStepper\",\"name\":\"_vm\",\"type\":\"address\"},{\"internalType\":\"contractL2OutputOracle\",\"name\":\"_l2oo\",\"type\":\"address\"},{\"internalType\":\"contractBlockOracle\",\"name\":\"_blockOracle\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CannotDefendRootClaim\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClaimAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClaimAlreadyResolved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClockNotExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClockTimeExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GameDepthExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GameNotInProgress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidParent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPrestate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"L1HeadTooOld\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfOrderResolution\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"Claim\",\"name\":\"rootClaim\",\"type\":\"bytes32\"}],\"name\":\"UnexpectedRootClaim\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValidStep\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"parentIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"Claim\",\"name\":\"claim\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"claimant\",\"type\":\"address\"}],\"name\":\"Move\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enumGameStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"Resolved\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ABSOLUTE_PRESTATE\",\"outputs\":[{\"internalType\":\"Claim\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLOCK_ORACLE\",\"outputs\":[{\"internalType\":\"contractBlockOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GAME_DURATION\",\"outputs\":[{\"internalType\":\"Duration\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_OUTPUT_ORACLE\",\"outputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_GAME_DEPTH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VM\",\"outputs\":[{\"internalType\":\"contractIBigStepper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ident\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_partOffset\",\"type\":\"uint256\"}],\"name\":\"addLocalData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_parentIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"}],\"name\":\"attack\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondManager\",\"outputs\":[{\"internalType\":\"contractIBondManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"claimData\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"parentIndex\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"countered\",\"type\":\"bool\"},{\"internalType\":\"Claim\",\"name\":\"claim\",\"type\":\"bytes32\"},{\"internalType\":\"Position\",\"name\":\"position\",\"type\":\"uint128\"},{\"internalType\":\"Clock\",\"name\":\"clock\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimDataLen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"len_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"createdAt\",\"outputs\":[{\"internalType\":\"Timestamp\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_parentIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"}],\"name\":\"defend\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"extraData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"extraData_\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameData\",\"outputs\":[{\"internalType\":\"GameType\",\"name\":\"gameType_\",\"type\":\"uint8\"},{\"internalType\":\"Claim\",\"name\":\"rootClaim_\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"extraData_\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameType\",\"outputs\":[{\"internalType\":\"GameType\",\"name\":\"gameType_\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1BlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"l1BlockNumber_\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1Head\",\"outputs\":[{\"internalType\":\"Hash\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2BlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"l2BlockNumber_\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_challengeIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"_isAttack\",\"type\":\"bool\"}],\"name\":\"move\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposals\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"index\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2BlockNumber\",\"type\":\"uint128\"},{\"internalType\":\"Hash\",\"name\":\"outputRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIFaultDisputeGame.OutputProposal\",\"name\":\"starting\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint128\",\"name\":\"index\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2BlockNumber\",\"type\":\"uint128\"},{\"internalType\":\"Hash\",\"name\":\"outputRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIFaultDisputeGame.OutputProposal\",\"name\":\"disputed\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"enumGameStatus\",\"name\":\"status_\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_claimIndex\",\"type\":\"uint256\"}],\"name\":\"resolveClaim\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rootClaim\",\"outputs\":[{\"internalType\":\"Claim\",\"name\":\"rootClaim_\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"status\",\"outputs\":[{\"internalType\":\"enumGameStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_claimIndex\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_isAttack\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_stateData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_proof\",\"type\":\"bytes\"}],\"name\":\"step\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x6101606040523480156200001257600080fd5b5060405162002b1f38038062002b1f83398101604081905262000035916200008f565b60ff9096166101405260809490945260a0929092526001600160401b031660c0526001600160a01b0390811660e05290811661010052166101205262000133565b6001600160a01b03811681146200008c57600080fd5b50565b600080600080600080600060e0888a031215620000ab57600080fd5b875160ff81168114620000bd57600080fd5b602089015160408a015160608b015192995090975095506001600160401b0381168114620000ea57600080fd5b6080890151909450620000fd8162000076565b60a0890151909350620001108162000076565b60c0890151909250620001238162000076565b8091505092959891949750929550565b60805160a05160c05160e05161010051610120516101405161293d620001e2600039600081816105610152611c3b01526000818161036901526114bc0152600081816105da015281816112890152818161135d015261143601526000818161052b0152818161079701526119ba01526000818161060e01528181610d850152611d2a01526000818161033501528181610bc401526117b901526000818161022c0152611915015261293d6000f3fe6080604052600436106101b75760003560e01c80638129fc1c116100ec578063c31b29ce1161008a578063cf09e0d011610064578063cf09e0d0146106c0578063d8cc1a3c146106e1578063fa24f74314610701578063fdffbb281461072557600080fd5b8063c31b29ce146105fc578063c55cd0c714610649578063c6f0308c1461065c57600080fd5b806392931298116100c65780639293129814610519578063bbdc02db1461054d578063bcef3b551461058b578063c0c3a092146105c857600080fd5b80638129fc1c146104af5780638980e0cc146104c45780638b85902b146104d957600080fd5b80634778efe81161015957806355ef20e61161013357806355ef20e6146103e1578063609d333414610471578063632247ea146104865780636361506d1461049957600080fd5b80634778efe814610323578063529184c91461035757806354fd4d501461038b57600080fd5b80632810e1d6116101955780632810e1d61461025c578063298c90051461027157806335fef567146102b1578063363cc427146102c457600080fd5b80631e27052a146101bc578063200d2ed2146101de578063266198f91461021a575b600080fd5b3480156101c857600080fd5b506101dc6101d736600461228f565b610738565b005b3480156101ea57600080fd5b506000546102049068010000000000000000900460ff1681565b60405161021191906122e0565b60405180910390f35b34801561022657600080fd5b5061024e7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610211565b34801561026857600080fd5b506102046108f7565b34801561027d57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036040013561024e565b6101dc6102bf36600461228f565b610a5b565b3480156102d057600080fd5b506000546102fe906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b34801561032f57600080fd5b5061024e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561036357600080fd5b506102fe7f000000000000000000000000000000000000000000000000000000000000000081565b34801561039757600080fd5b506103d46040518060400160405280600681526020017f302e302e3130000000000000000000000000000000000000000000000000000081525081565b604051610211919061238c565b3480156103ed57600080fd5b5060408051606080820183526003546fffffffffffffffffffffffffffffffff808216845270010000000000000000000000000000000091829004811660208086019190915260045485870152855193840186526005548083168552929092041690820152600654928101929092526104639182565b6040516102119291906123a6565b34801561047d57600080fd5b506103d4610a6b565b6101dc61049436600461240f565b610a79565b3480156104a557600080fd5b5061024e60015481565b3480156104bb57600080fd5b506101dc61108f565b3480156104d057600080fd5b5060025461024e565b3480156104e557600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036020013561024e565b34801561052557600080fd5b506102fe7f000000000000000000000000000000000000000000000000000000000000000081565b34801561055957600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610211565b34801561059757600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033561024e565b3480156105d457600080fd5b506102fe7f000000000000000000000000000000000000000000000000000000000000000081565b34801561060857600080fd5b506106307f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610211565b6101dc61065736600461228f565b611693565b34801561066857600080fd5b5061067c610677366004612444565b61169f565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a001610211565b3480156106cc57600080fd5b506000546106309067ffffffffffffffff1681565b3480156106ed57600080fd5b506101dc6106fc3660046124a6565b611710565b34801561070d57600080fd5b50610716611c39565b60405161021193929190612530565b6101dc610733366004612444565b611c96565b6000805468010000000000000000900460ff16600281111561075c5761075c6122b1565b14610793576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610800573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610824919061255b565b7f9a1f5e7f00000000000000000000000000000000000000000000000000000000601c81905260208590529091506000846001811461088b5760028114610895576003811461089f57600481146108a957600581146108b95763ff137e656000526004601cfd5b60015491506108c0565b60045491506108c0565b60065491506108c0565b60035460801c60c01b91506108c0565b4660c01b91505b50604052600160038511811b6005031b60605260808390526000806084601c82865af16108f1573d6000803e3d6000fd5b50505050565b60008060005468010000000000000000900460ff16600281111561091d5761091d6122b1565b14610954576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60095460ff16610990576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026000815481106109a4576109a4612591565b6000918252602090912060039091020154640100000000900460ff166109cb5760026109ce565b60015b6000805491925082917fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668010000000000000000836002811115610a1557610a156122b1565b021790556002811115610a2a57610a2a6122b1565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a290565b905090565b610a6782826000610a79565b5050565b6060610a5660206040611fc7565b6000805468010000000000000000900460ff166002811115610a9d57610a9d6122b1565b14610ad4576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610ae0575080155b15610b17576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610b2c57610b2c612591565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff80821660608501819052700100000000000000000000000000000000909204166080840152919350610bc09190859061205e16565b90507f0000000000000000000000000000000000000000000000000000000000000000610c7f826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610cc1576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614610d21576002836000015163ffffffff1681548110610cf057610cf0612591565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff1642610d5a846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610d6e91906125ef565b610d789190612607565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff82161115610deb576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42176000888152608086901b6fffffffffffffffffffffffffffffffff8b1617602052604081209192509060008181526007602052604090205490915060ff1615610e69576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260076020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815160a08101835263ffffffff808f1682529381018581529281018d81526fffffffffffffffffffffffffffffffff808c16606084019081528982166080850190815260028054808801825599819052945160039099027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805498511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009099169a909916999099179690961790965590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf8701559351925184167001000000000000000000000000000000000292909316919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad09093019290925580548b908110610fe157610fe1612591565b6000918252602080832060039092029091018054931515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff909416939093179092558a815260089091526040902060025461104590600190612607565b8154600181018355600092835260208320015560405133918a918c917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a4505050505050505050565b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560001a60018114806110cf575060ff81166002145b611135576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335600482015260240160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff815260208101929092526002919081016111ba7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff9081169091528254600181810185556000948552602080862085516003909402018054918601511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921663ffffffff909416939093171782556040840151908201556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016637f0064206112e360207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b6040518263ffffffff1660e01b815260040161130191815260200190565b602060405180830381865afa15801561131e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611342919061261e565b9050600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae55761138d600185612607565b6040518263ffffffff1660e01b81526004016113ab91815260200190565b606060405180830381865afa1580156113c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ec9190612686565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810184905290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa15801561147d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a19190612686565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166399d548aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001356040518263ffffffff1660e01b815260040161152d91815260200190565b6040805180830381865afa158015611549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156d9190612712565b905081602001516fffffffffffffffffffffffffffffffff16816020015167ffffffffffffffff16116115cc576040517f13809ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182529081908101806115e7600189612607565b6fffffffffffffffffffffffffffffffff908116825260408881015182166020808501919091529851928101929092529183528051606081018252978216885285810151821688880152945187860152908501959095528051805181860151908716700100000000000000000000000000000000918816820217600355908401516004559084015180519481015194861694909516029290921760055591909101516006555160015550565b610a6782826001610a79565b600281815481106116af57600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff166002811115611734576117346122b1565b1461176b576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002878154811061178057611780612591565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b90506117df7f000000000000000000000000000000000000000000000000000000000000000060016125ef565b61187b826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16146118bc576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561193f576118e0836fffffffffffffffffffffffffffffffff16612066565b67ffffffffffffffff16156119135761190a6118fd600186612799565b865463ffffffff1661210c565b60010154611935565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611959565b846001015491506119568460016118fd91906127ca565b90505b600882901b60088a8a6040516119709291906127fe565b6040518091039020901b146119b1576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968c8c8c8c6040518563ffffffff1660e01b8152600401611a179493929190612857565b6020604051808303816000875af1158015611a36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5a919061261e565b600284810154929091149250600091611b05906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611ba1886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611bab9190612889565b611bb591906128aa565b67ffffffffffffffff161590508115158103611bfd576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611c8f610a6b565b9050909192565b6000805468010000000000000000900460ff166002811115611cba57611cba6122b1565b14611cf1576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028281548110611d0657611d06612591565b60009182526020909120600260039092020190810154909150677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1690611d7690700100000000000000000000000000000000900467ffffffffffffffff1642612607565b6002830154611da69190700100000000000000000000000000000000900460401c67ffffffffffffffff166125ef565b11611ddd576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260086020526040902082158015611dfb575060095460ff165b15611e32576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8054158015611e4057508215155b15611e77576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b8254811015611f45576000838281548110611e9857611e98612591565b6000918252602080832090910154808352600890915260409091205490915015611eee576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028281548110611f0357611f03612591565b600091825260209091206003909102018054909150640100000000900460ff16611f3257600193505050611f45565b505080611f3e906128f8565b9050611e7b565b5082547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff16640100000000821515021783556000848152600860205260408120611f8e91612255565b836000036108f157600980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550505050565b60606000611ffe84367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036125ef565b90508267ffffffffffffffff1667ffffffffffffffff81111561202357612023612637565b6040519080825280601f01601f19166020018201604052801561204d576020820181803683370190505b509150828160208401375092915050565b151760011b90565b6000806120f3837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b60008061212a846fffffffffffffffffffffffffffffffff166121a9565b90506002838154811061213f5761213f612591565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff8281169116146121a257815460028054909163ffffffff1690811061218d5761218d612591565b90600052602060002090600302019150612150565b5092915050565b6000811960018301168161223d827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b50805460008255906000526020600020908101906122739190612276565b50565b5b8082111561228b5760008155600101612277565b5090565b600080604083850312156122a257600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061231b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000815180845260005b818110156123475760208185018101518683018201520161232b565b81811115612359576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061239f6020830184612321565b9392505050565b82516fffffffffffffffffffffffffffffffff90811682526020808501518216818401526040808601518185015284518316606085015290840151909116608083015282015160a082015260c0810161239f565b8035801515811461240a57600080fd5b919050565b60008060006060848603121561242457600080fd5b833592506020840135915061243b604085016123fa565b90509250925092565b60006020828403121561245657600080fd5b5035919050565b60008083601f84011261246f57600080fd5b50813567ffffffffffffffff81111561248757600080fd5b60208301915083602082850101111561249f57600080fd5b9250929050565b600080600080600080608087890312156124bf57600080fd5b863595506124cf602088016123fa565b9450604087013567ffffffffffffffff808211156124ec57600080fd5b6124f88a838b0161245d565b9096509450606089013591508082111561251157600080fd5b5061251e89828a0161245d565b979a9699509497509295939492505050565b60ff841681528260208201526060604082015260006125526060830184612321565b95945050505050565b60006020828403121561256d57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461239f57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612602576126026125c0565b500190565b600082821015612619576126196125c0565b500390565b60006020828403121561263057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80516fffffffffffffffffffffffffffffffff8116811461240a57600080fd5b60006060828403121561269857600080fd5b6040516060810181811067ffffffffffffffff821117156126e2577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052825181526126f560208401612666565b602082015261270660408401612666565b60408201529392505050565b60006040828403121561272457600080fd5b6040516040810167ffffffffffffffff828210818311171561276f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b816040528451835260208501519150808216821461278c57600080fd5b5060208201529392505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156127c2576127c26125c0565b039392505050565b60006fffffffffffffffffffffffffffffffff8083168185168083038211156127f5576127f56125c0565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60408152600061286b60408301868861280e565b828103602084015261287e81858761280e565b979650505050505050565b600067ffffffffffffffff838116908316818110156127c2576127c26125c0565b600067ffffffffffffffff808416806128ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910692915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612929576129296125c0565b506001019056fea164736f6c634300080f000a", +} + +// FaultDisputeGameABI is the input ABI used to generate the binding from. +// Deprecated: Use FaultDisputeGameMetaData.ABI instead. +var FaultDisputeGameABI = FaultDisputeGameMetaData.ABI + +// FaultDisputeGameBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use FaultDisputeGameMetaData.Bin instead. +var FaultDisputeGameBin = FaultDisputeGameMetaData.Bin + +// DeployFaultDisputeGame deploys a new Ethereum contract, binding an instance of FaultDisputeGame to it. +func DeployFaultDisputeGame(auth *bind.TransactOpts, backend bind.ContractBackend, _gameType uint8, _absolutePrestate [32]byte, _maxGameDepth *big.Int, _gameDuration uint64, _vm common.Address, _l2oo common.Address, _blockOracle common.Address) (common.Address, *types.Transaction, *FaultDisputeGame, error) { + parsed, err := FaultDisputeGameMetaData.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(FaultDisputeGameBin), backend, _gameType, _absolutePrestate, _maxGameDepth, _gameDuration, _vm, _l2oo, _blockOracle) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &FaultDisputeGame{FaultDisputeGameCaller: FaultDisputeGameCaller{contract: contract}, FaultDisputeGameTransactor: FaultDisputeGameTransactor{contract: contract}, FaultDisputeGameFilterer: FaultDisputeGameFilterer{contract: contract}}, nil +} + +// FaultDisputeGame is an auto generated Go binding around an Ethereum contract. +type FaultDisputeGame struct { + FaultDisputeGameCaller // Read-only binding to the contract + FaultDisputeGameTransactor // Write-only binding to the contract + FaultDisputeGameFilterer // Log filterer for contract events +} + +// FaultDisputeGameCaller is an auto generated read-only Go binding around an Ethereum contract. +type FaultDisputeGameCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// FaultDisputeGameTransactor is an auto generated write-only Go binding around an Ethereum contract. +type FaultDisputeGameTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// FaultDisputeGameFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type FaultDisputeGameFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// FaultDisputeGameSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type FaultDisputeGameSession struct { + Contract *FaultDisputeGame // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// FaultDisputeGameCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type FaultDisputeGameCallerSession struct { + Contract *FaultDisputeGameCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// FaultDisputeGameTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type FaultDisputeGameTransactorSession struct { + Contract *FaultDisputeGameTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// FaultDisputeGameRaw is an auto generated low-level Go binding around an Ethereum contract. +type FaultDisputeGameRaw struct { + Contract *FaultDisputeGame // Generic contract binding to access the raw methods on +} + +// FaultDisputeGameCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type FaultDisputeGameCallerRaw struct { + Contract *FaultDisputeGameCaller // Generic read-only contract binding to access the raw methods on +} + +// FaultDisputeGameTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type FaultDisputeGameTransactorRaw struct { + Contract *FaultDisputeGameTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewFaultDisputeGame creates a new instance of FaultDisputeGame, bound to a specific deployed contract. +func NewFaultDisputeGame(address common.Address, backend bind.ContractBackend) (*FaultDisputeGame, error) { + contract, err := bindFaultDisputeGame(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &FaultDisputeGame{FaultDisputeGameCaller: FaultDisputeGameCaller{contract: contract}, FaultDisputeGameTransactor: FaultDisputeGameTransactor{contract: contract}, FaultDisputeGameFilterer: FaultDisputeGameFilterer{contract: contract}}, nil +} + +// NewFaultDisputeGameCaller creates a new read-only instance of FaultDisputeGame, bound to a specific deployed contract. +func NewFaultDisputeGameCaller(address common.Address, caller bind.ContractCaller) (*FaultDisputeGameCaller, error) { + contract, err := bindFaultDisputeGame(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &FaultDisputeGameCaller{contract: contract}, nil +} + +// NewFaultDisputeGameTransactor creates a new write-only instance of FaultDisputeGame, bound to a specific deployed contract. +func NewFaultDisputeGameTransactor(address common.Address, transactor bind.ContractTransactor) (*FaultDisputeGameTransactor, error) { + contract, err := bindFaultDisputeGame(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &FaultDisputeGameTransactor{contract: contract}, nil +} + +// NewFaultDisputeGameFilterer creates a new log filterer instance of FaultDisputeGame, bound to a specific deployed contract. +func NewFaultDisputeGameFilterer(address common.Address, filterer bind.ContractFilterer) (*FaultDisputeGameFilterer, error) { + contract, err := bindFaultDisputeGame(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &FaultDisputeGameFilterer{contract: contract}, nil +} + +// bindFaultDisputeGame binds a generic wrapper to an already deployed contract. +func bindFaultDisputeGame(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(FaultDisputeGameABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_FaultDisputeGame *FaultDisputeGameRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _FaultDisputeGame.Contract.FaultDisputeGameCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_FaultDisputeGame *FaultDisputeGameRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _FaultDisputeGame.Contract.FaultDisputeGameTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_FaultDisputeGame *FaultDisputeGameRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _FaultDisputeGame.Contract.FaultDisputeGameTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_FaultDisputeGame *FaultDisputeGameCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _FaultDisputeGame.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_FaultDisputeGame *FaultDisputeGameTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _FaultDisputeGame.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_FaultDisputeGame *FaultDisputeGameTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _FaultDisputeGame.Contract.contract.Transact(opts, method, params...) +} + +// ABSOLUTEPRESTATE is a free data retrieval call binding the contract method 0x266198f9. +// +// Solidity: function ABSOLUTE_PRESTATE() view returns(bytes32) +func (_FaultDisputeGame *FaultDisputeGameCaller) ABSOLUTEPRESTATE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _FaultDisputeGame.contract.Call(opts, &out, "ABSOLUTE_PRESTATE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ABSOLUTEPRESTATE is a free data retrieval call binding the contract method 0x266198f9. +// +// Solidity: function ABSOLUTE_PRESTATE() view returns(bytes32) +func (_FaultDisputeGame *FaultDisputeGameSession) ABSOLUTEPRESTATE() ([32]byte, error) { + return _FaultDisputeGame.Contract.ABSOLUTEPRESTATE(&_FaultDisputeGame.CallOpts) +} + +// ABSOLUTEPRESTATE is a free data retrieval call binding the contract method 0x266198f9. +// +// Solidity: function ABSOLUTE_PRESTATE() view returns(bytes32) +func (_FaultDisputeGame *FaultDisputeGameCallerSession) ABSOLUTEPRESTATE() ([32]byte, error) { + return _FaultDisputeGame.Contract.ABSOLUTEPRESTATE(&_FaultDisputeGame.CallOpts) +} + +// BLOCKORACLE is a free data retrieval call binding the contract method 0x529184c9. +// +// Solidity: function BLOCK_ORACLE() view returns(address) +func (_FaultDisputeGame *FaultDisputeGameCaller) BLOCKORACLE(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _FaultDisputeGame.contract.Call(opts, &out, "BLOCK_ORACLE") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// BLOCKORACLE is a free data retrieval call binding the contract method 0x529184c9. +// +// Solidity: function BLOCK_ORACLE() view returns(address) +func (_FaultDisputeGame *FaultDisputeGameSession) BLOCKORACLE() (common.Address, error) { + return _FaultDisputeGame.Contract.BLOCKORACLE(&_FaultDisputeGame.CallOpts) +} + +// BLOCKORACLE is a free data retrieval call binding the contract method 0x529184c9. +// +// Solidity: function BLOCK_ORACLE() view returns(address) +func (_FaultDisputeGame *FaultDisputeGameCallerSession) BLOCKORACLE() (common.Address, error) { + return _FaultDisputeGame.Contract.BLOCKORACLE(&_FaultDisputeGame.CallOpts) +} + +// GAMEDURATION is a free data retrieval call binding the contract method 0xc31b29ce. +// +// Solidity: function GAME_DURATION() view returns(uint64) +func (_FaultDisputeGame *FaultDisputeGameCaller) GAMEDURATION(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _FaultDisputeGame.contract.Call(opts, &out, "GAME_DURATION") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// GAMEDURATION is a free data retrieval call binding the contract method 0xc31b29ce. +// +// Solidity: function GAME_DURATION() view returns(uint64) +func (_FaultDisputeGame *FaultDisputeGameSession) GAMEDURATION() (uint64, error) { + return _FaultDisputeGame.Contract.GAMEDURATION(&_FaultDisputeGame.CallOpts) +} + +// GAMEDURATION is a free data retrieval call binding the contract method 0xc31b29ce. +// +// Solidity: function GAME_DURATION() view returns(uint64) +func (_FaultDisputeGame *FaultDisputeGameCallerSession) GAMEDURATION() (uint64, error) { + return _FaultDisputeGame.Contract.GAMEDURATION(&_FaultDisputeGame.CallOpts) +} + +// L2OUTPUTORACLE is a free data retrieval call binding the contract method 0xc0c3a092. +// +// Solidity: function L2_OUTPUT_ORACLE() view returns(address) +func (_FaultDisputeGame *FaultDisputeGameCaller) L2OUTPUTORACLE(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _FaultDisputeGame.contract.Call(opts, &out, "L2_OUTPUT_ORACLE") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// L2OUTPUTORACLE is a free data retrieval call binding the contract method 0xc0c3a092. +// +// Solidity: function L2_OUTPUT_ORACLE() view returns(address) +func (_FaultDisputeGame *FaultDisputeGameSession) L2OUTPUTORACLE() (common.Address, error) { + return _FaultDisputeGame.Contract.L2OUTPUTORACLE(&_FaultDisputeGame.CallOpts) +} + +// L2OUTPUTORACLE is a free data retrieval call binding the contract method 0xc0c3a092. +// +// Solidity: function L2_OUTPUT_ORACLE() view returns(address) +func (_FaultDisputeGame *FaultDisputeGameCallerSession) L2OUTPUTORACLE() (common.Address, error) { + return _FaultDisputeGame.Contract.L2OUTPUTORACLE(&_FaultDisputeGame.CallOpts) +} + +// MAXGAMEDEPTH is a free data retrieval call binding the contract method 0x4778efe8. +// +// Solidity: function MAX_GAME_DEPTH() view returns(uint256) +func (_FaultDisputeGame *FaultDisputeGameCaller) MAXGAMEDEPTH(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _FaultDisputeGame.contract.Call(opts, &out, "MAX_GAME_DEPTH") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MAXGAMEDEPTH is a free data retrieval call binding the contract method 0x4778efe8. +// +// Solidity: function MAX_GAME_DEPTH() view returns(uint256) +func (_FaultDisputeGame *FaultDisputeGameSession) MAXGAMEDEPTH() (*big.Int, error) { + return _FaultDisputeGame.Contract.MAXGAMEDEPTH(&_FaultDisputeGame.CallOpts) +} + +// MAXGAMEDEPTH is a free data retrieval call binding the contract method 0x4778efe8. +// +// Solidity: function MAX_GAME_DEPTH() view returns(uint256) +func (_FaultDisputeGame *FaultDisputeGameCallerSession) MAXGAMEDEPTH() (*big.Int, error) { + return _FaultDisputeGame.Contract.MAXGAMEDEPTH(&_FaultDisputeGame.CallOpts) +} + +// VM is a free data retrieval call binding the contract method 0x92931298. +// +// Solidity: function VM() view returns(address) +func (_FaultDisputeGame *FaultDisputeGameCaller) VM(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _FaultDisputeGame.contract.Call(opts, &out, "VM") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// VM is a free data retrieval call binding the contract method 0x92931298. +// +// Solidity: function VM() view returns(address) +func (_FaultDisputeGame *FaultDisputeGameSession) VM() (common.Address, error) { + return _FaultDisputeGame.Contract.VM(&_FaultDisputeGame.CallOpts) +} + +// VM is a free data retrieval call binding the contract method 0x92931298. +// +// Solidity: function VM() view returns(address) +func (_FaultDisputeGame *FaultDisputeGameCallerSession) VM() (common.Address, error) { + return _FaultDisputeGame.Contract.VM(&_FaultDisputeGame.CallOpts) +} + +// BondManager is a free data retrieval call binding the contract method 0x363cc427. +// +// Solidity: function bondManager() view returns(address) +func (_FaultDisputeGame *FaultDisputeGameCaller) BondManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _FaultDisputeGame.contract.Call(opts, &out, "bondManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// BondManager is a free data retrieval call binding the contract method 0x363cc427. +// +// Solidity: function bondManager() view returns(address) +func (_FaultDisputeGame *FaultDisputeGameSession) BondManager() (common.Address, error) { + return _FaultDisputeGame.Contract.BondManager(&_FaultDisputeGame.CallOpts) +} + +// BondManager is a free data retrieval call binding the contract method 0x363cc427. +// +// Solidity: function bondManager() view returns(address) +func (_FaultDisputeGame *FaultDisputeGameCallerSession) BondManager() (common.Address, error) { + return _FaultDisputeGame.Contract.BondManager(&_FaultDisputeGame.CallOpts) +} + +// ClaimData is a free data retrieval call binding the contract method 0xc6f0308c. +// +// Solidity: function claimData(uint256 ) view returns(uint32 parentIndex, bool countered, bytes32 claim, uint128 position, uint128 clock) +func (_FaultDisputeGame *FaultDisputeGameCaller) ClaimData(opts *bind.CallOpts, arg0 *big.Int) (struct { + ParentIndex uint32 + Countered bool + Claim [32]byte + Position *big.Int + Clock *big.Int +}, error) { + var out []interface{} + err := _FaultDisputeGame.contract.Call(opts, &out, "claimData", arg0) + + outstruct := new(struct { + ParentIndex uint32 + Countered bool + Claim [32]byte + Position *big.Int + Clock *big.Int + }) + if err != nil { + return *outstruct, err + } + + outstruct.ParentIndex = *abi.ConvertType(out[0], new(uint32)).(*uint32) + outstruct.Countered = *abi.ConvertType(out[1], new(bool)).(*bool) + outstruct.Claim = *abi.ConvertType(out[2], new([32]byte)).(*[32]byte) + outstruct.Position = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) + outstruct.Clock = *abi.ConvertType(out[4], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +// ClaimData is a free data retrieval call binding the contract method 0xc6f0308c. +// +// Solidity: function claimData(uint256 ) view returns(uint32 parentIndex, bool countered, bytes32 claim, uint128 position, uint128 clock) +func (_FaultDisputeGame *FaultDisputeGameSession) ClaimData(arg0 *big.Int) (struct { + ParentIndex uint32 + Countered bool + Claim [32]byte + Position *big.Int + Clock *big.Int +}, error) { + return _FaultDisputeGame.Contract.ClaimData(&_FaultDisputeGame.CallOpts, arg0) +} + +// ClaimData is a free data retrieval call binding the contract method 0xc6f0308c. +// +// Solidity: function claimData(uint256 ) view returns(uint32 parentIndex, bool countered, bytes32 claim, uint128 position, uint128 clock) +func (_FaultDisputeGame *FaultDisputeGameCallerSession) ClaimData(arg0 *big.Int) (struct { + ParentIndex uint32 + Countered bool + Claim [32]byte + Position *big.Int + Clock *big.Int +}, error) { + return _FaultDisputeGame.Contract.ClaimData(&_FaultDisputeGame.CallOpts, arg0) +} + +// ClaimDataLen is a free data retrieval call binding the contract method 0x8980e0cc. +// +// Solidity: function claimDataLen() view returns(uint256 len_) +func (_FaultDisputeGame *FaultDisputeGameCaller) ClaimDataLen(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _FaultDisputeGame.contract.Call(opts, &out, "claimDataLen") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ClaimDataLen is a free data retrieval call binding the contract method 0x8980e0cc. +// +// Solidity: function claimDataLen() view returns(uint256 len_) +func (_FaultDisputeGame *FaultDisputeGameSession) ClaimDataLen() (*big.Int, error) { + return _FaultDisputeGame.Contract.ClaimDataLen(&_FaultDisputeGame.CallOpts) +} + +// ClaimDataLen is a free data retrieval call binding the contract method 0x8980e0cc. +// +// Solidity: function claimDataLen() view returns(uint256 len_) +func (_FaultDisputeGame *FaultDisputeGameCallerSession) ClaimDataLen() (*big.Int, error) { + return _FaultDisputeGame.Contract.ClaimDataLen(&_FaultDisputeGame.CallOpts) +} + +// CreatedAt is a free data retrieval call binding the contract method 0xcf09e0d0. +// +// Solidity: function createdAt() view returns(uint64) +func (_FaultDisputeGame *FaultDisputeGameCaller) CreatedAt(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _FaultDisputeGame.contract.Call(opts, &out, "createdAt") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// CreatedAt is a free data retrieval call binding the contract method 0xcf09e0d0. +// +// Solidity: function createdAt() view returns(uint64) +func (_FaultDisputeGame *FaultDisputeGameSession) CreatedAt() (uint64, error) { + return _FaultDisputeGame.Contract.CreatedAt(&_FaultDisputeGame.CallOpts) +} + +// CreatedAt is a free data retrieval call binding the contract method 0xcf09e0d0. +// +// Solidity: function createdAt() view returns(uint64) +func (_FaultDisputeGame *FaultDisputeGameCallerSession) CreatedAt() (uint64, error) { + return _FaultDisputeGame.Contract.CreatedAt(&_FaultDisputeGame.CallOpts) +} + +// ExtraData is a free data retrieval call binding the contract method 0x609d3334. +// +// Solidity: function extraData() pure returns(bytes extraData_) +func (_FaultDisputeGame *FaultDisputeGameCaller) ExtraData(opts *bind.CallOpts) ([]byte, error) { + var out []interface{} + err := _FaultDisputeGame.contract.Call(opts, &out, "extraData") + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// ExtraData is a free data retrieval call binding the contract method 0x609d3334. +// +// Solidity: function extraData() pure returns(bytes extraData_) +func (_FaultDisputeGame *FaultDisputeGameSession) ExtraData() ([]byte, error) { + return _FaultDisputeGame.Contract.ExtraData(&_FaultDisputeGame.CallOpts) +} + +// ExtraData is a free data retrieval call binding the contract method 0x609d3334. +// +// Solidity: function extraData() pure returns(bytes extraData_) +func (_FaultDisputeGame *FaultDisputeGameCallerSession) ExtraData() ([]byte, error) { + return _FaultDisputeGame.Contract.ExtraData(&_FaultDisputeGame.CallOpts) +} + +// GameData is a free data retrieval call binding the contract method 0xfa24f743. +// +// Solidity: function gameData() view returns(uint8 gameType_, bytes32 rootClaim_, bytes extraData_) +func (_FaultDisputeGame *FaultDisputeGameCaller) GameData(opts *bind.CallOpts) (struct { + GameType uint8 + RootClaim [32]byte + ExtraData []byte +}, error) { + var out []interface{} + err := _FaultDisputeGame.contract.Call(opts, &out, "gameData") + + outstruct := new(struct { + GameType uint8 + RootClaim [32]byte + ExtraData []byte + }) + if err != nil { + return *outstruct, err + } + + outstruct.GameType = *abi.ConvertType(out[0], new(uint8)).(*uint8) + outstruct.RootClaim = *abi.ConvertType(out[1], new([32]byte)).(*[32]byte) + outstruct.ExtraData = *abi.ConvertType(out[2], new([]byte)).(*[]byte) + + return *outstruct, err + +} + +// GameData is a free data retrieval call binding the contract method 0xfa24f743. +// +// Solidity: function gameData() view returns(uint8 gameType_, bytes32 rootClaim_, bytes extraData_) +func (_FaultDisputeGame *FaultDisputeGameSession) GameData() (struct { + GameType uint8 + RootClaim [32]byte + ExtraData []byte +}, error) { + return _FaultDisputeGame.Contract.GameData(&_FaultDisputeGame.CallOpts) +} + +// GameData is a free data retrieval call binding the contract method 0xfa24f743. +// +// Solidity: function gameData() view returns(uint8 gameType_, bytes32 rootClaim_, bytes extraData_) +func (_FaultDisputeGame *FaultDisputeGameCallerSession) GameData() (struct { + GameType uint8 + RootClaim [32]byte + ExtraData []byte +}, error) { + return _FaultDisputeGame.Contract.GameData(&_FaultDisputeGame.CallOpts) +} + +// GameType is a free data retrieval call binding the contract method 0xbbdc02db. +// +// Solidity: function gameType() view returns(uint8 gameType_) +func (_FaultDisputeGame *FaultDisputeGameCaller) GameType(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _FaultDisputeGame.contract.Call(opts, &out, "gameType") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// GameType is a free data retrieval call binding the contract method 0xbbdc02db. +// +// Solidity: function gameType() view returns(uint8 gameType_) +func (_FaultDisputeGame *FaultDisputeGameSession) GameType() (uint8, error) { + return _FaultDisputeGame.Contract.GameType(&_FaultDisputeGame.CallOpts) +} + +// GameType is a free data retrieval call binding the contract method 0xbbdc02db. +// +// Solidity: function gameType() view returns(uint8 gameType_) +func (_FaultDisputeGame *FaultDisputeGameCallerSession) GameType() (uint8, error) { + return _FaultDisputeGame.Contract.GameType(&_FaultDisputeGame.CallOpts) +} + +// L1BlockNumber is a free data retrieval call binding the contract method 0x298c9005. +// +// Solidity: function l1BlockNumber() pure returns(uint256 l1BlockNumber_) +func (_FaultDisputeGame *FaultDisputeGameCaller) L1BlockNumber(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _FaultDisputeGame.contract.Call(opts, &out, "l1BlockNumber") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// L1BlockNumber is a free data retrieval call binding the contract method 0x298c9005. +// +// Solidity: function l1BlockNumber() pure returns(uint256 l1BlockNumber_) +func (_FaultDisputeGame *FaultDisputeGameSession) L1BlockNumber() (*big.Int, error) { + return _FaultDisputeGame.Contract.L1BlockNumber(&_FaultDisputeGame.CallOpts) +} + +// L1BlockNumber is a free data retrieval call binding the contract method 0x298c9005. +// +// Solidity: function l1BlockNumber() pure returns(uint256 l1BlockNumber_) +func (_FaultDisputeGame *FaultDisputeGameCallerSession) L1BlockNumber() (*big.Int, error) { + return _FaultDisputeGame.Contract.L1BlockNumber(&_FaultDisputeGame.CallOpts) +} + +// L1Head is a free data retrieval call binding the contract method 0x6361506d. +// +// Solidity: function l1Head() view returns(bytes32) +func (_FaultDisputeGame *FaultDisputeGameCaller) L1Head(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _FaultDisputeGame.contract.Call(opts, &out, "l1Head") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// L1Head is a free data retrieval call binding the contract method 0x6361506d. +// +// Solidity: function l1Head() view returns(bytes32) +func (_FaultDisputeGame *FaultDisputeGameSession) L1Head() ([32]byte, error) { + return _FaultDisputeGame.Contract.L1Head(&_FaultDisputeGame.CallOpts) +} + +// L1Head is a free data retrieval call binding the contract method 0x6361506d. +// +// Solidity: function l1Head() view returns(bytes32) +func (_FaultDisputeGame *FaultDisputeGameCallerSession) L1Head() ([32]byte, error) { + return _FaultDisputeGame.Contract.L1Head(&_FaultDisputeGame.CallOpts) +} + +// L2BlockNumber is a free data retrieval call binding the contract method 0x8b85902b. +// +// Solidity: function l2BlockNumber() pure returns(uint256 l2BlockNumber_) +func (_FaultDisputeGame *FaultDisputeGameCaller) L2BlockNumber(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _FaultDisputeGame.contract.Call(opts, &out, "l2BlockNumber") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// L2BlockNumber is a free data retrieval call binding the contract method 0x8b85902b. +// +// Solidity: function l2BlockNumber() pure returns(uint256 l2BlockNumber_) +func (_FaultDisputeGame *FaultDisputeGameSession) L2BlockNumber() (*big.Int, error) { + return _FaultDisputeGame.Contract.L2BlockNumber(&_FaultDisputeGame.CallOpts) +} + +// L2BlockNumber is a free data retrieval call binding the contract method 0x8b85902b. +// +// Solidity: function l2BlockNumber() pure returns(uint256 l2BlockNumber_) +func (_FaultDisputeGame *FaultDisputeGameCallerSession) L2BlockNumber() (*big.Int, error) { + return _FaultDisputeGame.Contract.L2BlockNumber(&_FaultDisputeGame.CallOpts) +} + +// Proposals is a free data retrieval call binding the contract method 0x55ef20e6. +// +// Solidity: function proposals() view returns((uint128,uint128,bytes32) starting, (uint128,uint128,bytes32) disputed) +func (_FaultDisputeGame *FaultDisputeGameCaller) Proposals(opts *bind.CallOpts) (struct { + Starting IFaultDisputeGameOutputProposal + Disputed IFaultDisputeGameOutputProposal +}, error) { + var out []interface{} + err := _FaultDisputeGame.contract.Call(opts, &out, "proposals") + + outstruct := new(struct { + Starting IFaultDisputeGameOutputProposal + Disputed IFaultDisputeGameOutputProposal + }) + if err != nil { + return *outstruct, err + } + + outstruct.Starting = *abi.ConvertType(out[0], new(IFaultDisputeGameOutputProposal)).(*IFaultDisputeGameOutputProposal) + outstruct.Disputed = *abi.ConvertType(out[1], new(IFaultDisputeGameOutputProposal)).(*IFaultDisputeGameOutputProposal) + + return *outstruct, err + +} + +// Proposals is a free data retrieval call binding the contract method 0x55ef20e6. +// +// Solidity: function proposals() view returns((uint128,uint128,bytes32) starting, (uint128,uint128,bytes32) disputed) +func (_FaultDisputeGame *FaultDisputeGameSession) Proposals() (struct { + Starting IFaultDisputeGameOutputProposal + Disputed IFaultDisputeGameOutputProposal +}, error) { + return _FaultDisputeGame.Contract.Proposals(&_FaultDisputeGame.CallOpts) +} + +// Proposals is a free data retrieval call binding the contract method 0x55ef20e6. +// +// Solidity: function proposals() view returns((uint128,uint128,bytes32) starting, (uint128,uint128,bytes32) disputed) +func (_FaultDisputeGame *FaultDisputeGameCallerSession) Proposals() (struct { + Starting IFaultDisputeGameOutputProposal + Disputed IFaultDisputeGameOutputProposal +}, error) { + return _FaultDisputeGame.Contract.Proposals(&_FaultDisputeGame.CallOpts) +} + +// RootClaim is a free data retrieval call binding the contract method 0xbcef3b55. +// +// Solidity: function rootClaim() pure returns(bytes32 rootClaim_) +func (_FaultDisputeGame *FaultDisputeGameCaller) RootClaim(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _FaultDisputeGame.contract.Call(opts, &out, "rootClaim") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// RootClaim is a free data retrieval call binding the contract method 0xbcef3b55. +// +// Solidity: function rootClaim() pure returns(bytes32 rootClaim_) +func (_FaultDisputeGame *FaultDisputeGameSession) RootClaim() ([32]byte, error) { + return _FaultDisputeGame.Contract.RootClaim(&_FaultDisputeGame.CallOpts) +} + +// RootClaim is a free data retrieval call binding the contract method 0xbcef3b55. +// +// Solidity: function rootClaim() pure returns(bytes32 rootClaim_) +func (_FaultDisputeGame *FaultDisputeGameCallerSession) RootClaim() ([32]byte, error) { + return _FaultDisputeGame.Contract.RootClaim(&_FaultDisputeGame.CallOpts) +} + +// Status is a free data retrieval call binding the contract method 0x200d2ed2. +// +// Solidity: function status() view returns(uint8) +func (_FaultDisputeGame *FaultDisputeGameCaller) Status(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _FaultDisputeGame.contract.Call(opts, &out, "status") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// Status is a free data retrieval call binding the contract method 0x200d2ed2. +// +// Solidity: function status() view returns(uint8) +func (_FaultDisputeGame *FaultDisputeGameSession) Status() (uint8, error) { + return _FaultDisputeGame.Contract.Status(&_FaultDisputeGame.CallOpts) +} + +// Status is a free data retrieval call binding the contract method 0x200d2ed2. +// +// Solidity: function status() view returns(uint8) +func (_FaultDisputeGame *FaultDisputeGameCallerSession) Status() (uint8, error) { + return _FaultDisputeGame.Contract.Status(&_FaultDisputeGame.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_FaultDisputeGame *FaultDisputeGameCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _FaultDisputeGame.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_FaultDisputeGame *FaultDisputeGameSession) Version() (string, error) { + return _FaultDisputeGame.Contract.Version(&_FaultDisputeGame.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_FaultDisputeGame *FaultDisputeGameCallerSession) Version() (string, error) { + return _FaultDisputeGame.Contract.Version(&_FaultDisputeGame.CallOpts) +} + +// AddLocalData is a paid mutator transaction binding the contract method 0x1e27052a. +// +// Solidity: function addLocalData(uint256 _ident, uint256 _partOffset) returns() +func (_FaultDisputeGame *FaultDisputeGameTransactor) AddLocalData(opts *bind.TransactOpts, _ident *big.Int, _partOffset *big.Int) (*types.Transaction, error) { + return _FaultDisputeGame.contract.Transact(opts, "addLocalData", _ident, _partOffset) +} + +// AddLocalData is a paid mutator transaction binding the contract method 0x1e27052a. +// +// Solidity: function addLocalData(uint256 _ident, uint256 _partOffset) returns() +func (_FaultDisputeGame *FaultDisputeGameSession) AddLocalData(_ident *big.Int, _partOffset *big.Int) (*types.Transaction, error) { + return _FaultDisputeGame.Contract.AddLocalData(&_FaultDisputeGame.TransactOpts, _ident, _partOffset) +} + +// AddLocalData is a paid mutator transaction binding the contract method 0x1e27052a. +// +// Solidity: function addLocalData(uint256 _ident, uint256 _partOffset) returns() +func (_FaultDisputeGame *FaultDisputeGameTransactorSession) AddLocalData(_ident *big.Int, _partOffset *big.Int) (*types.Transaction, error) { + return _FaultDisputeGame.Contract.AddLocalData(&_FaultDisputeGame.TransactOpts, _ident, _partOffset) +} + +// Attack is a paid mutator transaction binding the contract method 0xc55cd0c7. +// +// Solidity: function attack(uint256 _parentIndex, bytes32 _claim) payable returns() +func (_FaultDisputeGame *FaultDisputeGameTransactor) Attack(opts *bind.TransactOpts, _parentIndex *big.Int, _claim [32]byte) (*types.Transaction, error) { + return _FaultDisputeGame.contract.Transact(opts, "attack", _parentIndex, _claim) +} + +// Attack is a paid mutator transaction binding the contract method 0xc55cd0c7. +// +// Solidity: function attack(uint256 _parentIndex, bytes32 _claim) payable returns() +func (_FaultDisputeGame *FaultDisputeGameSession) Attack(_parentIndex *big.Int, _claim [32]byte) (*types.Transaction, error) { + return _FaultDisputeGame.Contract.Attack(&_FaultDisputeGame.TransactOpts, _parentIndex, _claim) +} + +// Attack is a paid mutator transaction binding the contract method 0xc55cd0c7. +// +// Solidity: function attack(uint256 _parentIndex, bytes32 _claim) payable returns() +func (_FaultDisputeGame *FaultDisputeGameTransactorSession) Attack(_parentIndex *big.Int, _claim [32]byte) (*types.Transaction, error) { + return _FaultDisputeGame.Contract.Attack(&_FaultDisputeGame.TransactOpts, _parentIndex, _claim) +} + +// Defend is a paid mutator transaction binding the contract method 0x35fef567. +// +// Solidity: function defend(uint256 _parentIndex, bytes32 _claim) payable returns() +func (_FaultDisputeGame *FaultDisputeGameTransactor) Defend(opts *bind.TransactOpts, _parentIndex *big.Int, _claim [32]byte) (*types.Transaction, error) { + return _FaultDisputeGame.contract.Transact(opts, "defend", _parentIndex, _claim) +} + +// Defend is a paid mutator transaction binding the contract method 0x35fef567. +// +// Solidity: function defend(uint256 _parentIndex, bytes32 _claim) payable returns() +func (_FaultDisputeGame *FaultDisputeGameSession) Defend(_parentIndex *big.Int, _claim [32]byte) (*types.Transaction, error) { + return _FaultDisputeGame.Contract.Defend(&_FaultDisputeGame.TransactOpts, _parentIndex, _claim) +} + +// Defend is a paid mutator transaction binding the contract method 0x35fef567. +// +// Solidity: function defend(uint256 _parentIndex, bytes32 _claim) payable returns() +func (_FaultDisputeGame *FaultDisputeGameTransactorSession) Defend(_parentIndex *big.Int, _claim [32]byte) (*types.Transaction, error) { + return _FaultDisputeGame.Contract.Defend(&_FaultDisputeGame.TransactOpts, _parentIndex, _claim) +} + +// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c. +// +// Solidity: function initialize() returns() +func (_FaultDisputeGame *FaultDisputeGameTransactor) Initialize(opts *bind.TransactOpts) (*types.Transaction, error) { + return _FaultDisputeGame.contract.Transact(opts, "initialize") +} + +// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c. +// +// Solidity: function initialize() returns() +func (_FaultDisputeGame *FaultDisputeGameSession) Initialize() (*types.Transaction, error) { + return _FaultDisputeGame.Contract.Initialize(&_FaultDisputeGame.TransactOpts) +} + +// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c. +// +// Solidity: function initialize() returns() +func (_FaultDisputeGame *FaultDisputeGameTransactorSession) Initialize() (*types.Transaction, error) { + return _FaultDisputeGame.Contract.Initialize(&_FaultDisputeGame.TransactOpts) +} + +// Move is a paid mutator transaction binding the contract method 0x632247ea. +// +// Solidity: function move(uint256 _challengeIndex, bytes32 _claim, bool _isAttack) payable returns() +func (_FaultDisputeGame *FaultDisputeGameTransactor) Move(opts *bind.TransactOpts, _challengeIndex *big.Int, _claim [32]byte, _isAttack bool) (*types.Transaction, error) { + return _FaultDisputeGame.contract.Transact(opts, "move", _challengeIndex, _claim, _isAttack) +} + +// Move is a paid mutator transaction binding the contract method 0x632247ea. +// +// Solidity: function move(uint256 _challengeIndex, bytes32 _claim, bool _isAttack) payable returns() +func (_FaultDisputeGame *FaultDisputeGameSession) Move(_challengeIndex *big.Int, _claim [32]byte, _isAttack bool) (*types.Transaction, error) { + return _FaultDisputeGame.Contract.Move(&_FaultDisputeGame.TransactOpts, _challengeIndex, _claim, _isAttack) +} + +// Move is a paid mutator transaction binding the contract method 0x632247ea. +// +// Solidity: function move(uint256 _challengeIndex, bytes32 _claim, bool _isAttack) payable returns() +func (_FaultDisputeGame *FaultDisputeGameTransactorSession) Move(_challengeIndex *big.Int, _claim [32]byte, _isAttack bool) (*types.Transaction, error) { + return _FaultDisputeGame.Contract.Move(&_FaultDisputeGame.TransactOpts, _challengeIndex, _claim, _isAttack) +} + +// Resolve is a paid mutator transaction binding the contract method 0x2810e1d6. +// +// Solidity: function resolve() returns(uint8 status_) +func (_FaultDisputeGame *FaultDisputeGameTransactor) Resolve(opts *bind.TransactOpts) (*types.Transaction, error) { + return _FaultDisputeGame.contract.Transact(opts, "resolve") +} + +// Resolve is a paid mutator transaction binding the contract method 0x2810e1d6. +// +// Solidity: function resolve() returns(uint8 status_) +func (_FaultDisputeGame *FaultDisputeGameSession) Resolve() (*types.Transaction, error) { + return _FaultDisputeGame.Contract.Resolve(&_FaultDisputeGame.TransactOpts) +} + +// Resolve is a paid mutator transaction binding the contract method 0x2810e1d6. +// +// Solidity: function resolve() returns(uint8 status_) +func (_FaultDisputeGame *FaultDisputeGameTransactorSession) Resolve() (*types.Transaction, error) { + return _FaultDisputeGame.Contract.Resolve(&_FaultDisputeGame.TransactOpts) +} + +// ResolveClaim is a paid mutator transaction binding the contract method 0xfdffbb28. +// +// Solidity: function resolveClaim(uint256 _claimIndex) payable returns() +func (_FaultDisputeGame *FaultDisputeGameTransactor) ResolveClaim(opts *bind.TransactOpts, _claimIndex *big.Int) (*types.Transaction, error) { + return _FaultDisputeGame.contract.Transact(opts, "resolveClaim", _claimIndex) +} + +// ResolveClaim is a paid mutator transaction binding the contract method 0xfdffbb28. +// +// Solidity: function resolveClaim(uint256 _claimIndex) payable returns() +func (_FaultDisputeGame *FaultDisputeGameSession) ResolveClaim(_claimIndex *big.Int) (*types.Transaction, error) { + return _FaultDisputeGame.Contract.ResolveClaim(&_FaultDisputeGame.TransactOpts, _claimIndex) +} + +// ResolveClaim is a paid mutator transaction binding the contract method 0xfdffbb28. +// +// Solidity: function resolveClaim(uint256 _claimIndex) payable returns() +func (_FaultDisputeGame *FaultDisputeGameTransactorSession) ResolveClaim(_claimIndex *big.Int) (*types.Transaction, error) { + return _FaultDisputeGame.Contract.ResolveClaim(&_FaultDisputeGame.TransactOpts, _claimIndex) +} + +// Step is a paid mutator transaction binding the contract method 0xd8cc1a3c. +// +// Solidity: function step(uint256 _claimIndex, bool _isAttack, bytes _stateData, bytes _proof) returns() +func (_FaultDisputeGame *FaultDisputeGameTransactor) Step(opts *bind.TransactOpts, _claimIndex *big.Int, _isAttack bool, _stateData []byte, _proof []byte) (*types.Transaction, error) { + return _FaultDisputeGame.contract.Transact(opts, "step", _claimIndex, _isAttack, _stateData, _proof) +} + +// Step is a paid mutator transaction binding the contract method 0xd8cc1a3c. +// +// Solidity: function step(uint256 _claimIndex, bool _isAttack, bytes _stateData, bytes _proof) returns() +func (_FaultDisputeGame *FaultDisputeGameSession) Step(_claimIndex *big.Int, _isAttack bool, _stateData []byte, _proof []byte) (*types.Transaction, error) { + return _FaultDisputeGame.Contract.Step(&_FaultDisputeGame.TransactOpts, _claimIndex, _isAttack, _stateData, _proof) +} + +// Step is a paid mutator transaction binding the contract method 0xd8cc1a3c. +// +// Solidity: function step(uint256 _claimIndex, bool _isAttack, bytes _stateData, bytes _proof) returns() +func (_FaultDisputeGame *FaultDisputeGameTransactorSession) Step(_claimIndex *big.Int, _isAttack bool, _stateData []byte, _proof []byte) (*types.Transaction, error) { + return _FaultDisputeGame.Contract.Step(&_FaultDisputeGame.TransactOpts, _claimIndex, _isAttack, _stateData, _proof) +} + +// FaultDisputeGameMoveIterator is returned from FilterMove and is used to iterate over the raw logs and unpacked data for Move events raised by the FaultDisputeGame contract. +type FaultDisputeGameMoveIterator struct { + Event *FaultDisputeGameMove // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *FaultDisputeGameMoveIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(FaultDisputeGameMove) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(FaultDisputeGameMove) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *FaultDisputeGameMoveIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *FaultDisputeGameMoveIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// FaultDisputeGameMove represents a Move event raised by the FaultDisputeGame contract. +type FaultDisputeGameMove struct { + ParentIndex *big.Int + Claim [32]byte + Claimant common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMove is a free log retrieval operation binding the contract event 0x9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be. +// +// Solidity: event Move(uint256 indexed parentIndex, bytes32 indexed claim, address indexed claimant) +func (_FaultDisputeGame *FaultDisputeGameFilterer) FilterMove(opts *bind.FilterOpts, parentIndex []*big.Int, claim [][32]byte, claimant []common.Address) (*FaultDisputeGameMoveIterator, error) { + + var parentIndexRule []interface{} + for _, parentIndexItem := range parentIndex { + parentIndexRule = append(parentIndexRule, parentIndexItem) + } + var claimRule []interface{} + for _, claimItem := range claim { + claimRule = append(claimRule, claimItem) + } + var claimantRule []interface{} + for _, claimantItem := range claimant { + claimantRule = append(claimantRule, claimantItem) + } + + logs, sub, err := _FaultDisputeGame.contract.FilterLogs(opts, "Move", parentIndexRule, claimRule, claimantRule) + if err != nil { + return nil, err + } + return &FaultDisputeGameMoveIterator{contract: _FaultDisputeGame.contract, event: "Move", logs: logs, sub: sub}, nil +} + +// WatchMove is a free log subscription operation binding the contract event 0x9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be. +// +// Solidity: event Move(uint256 indexed parentIndex, bytes32 indexed claim, address indexed claimant) +func (_FaultDisputeGame *FaultDisputeGameFilterer) WatchMove(opts *bind.WatchOpts, sink chan<- *FaultDisputeGameMove, parentIndex []*big.Int, claim [][32]byte, claimant []common.Address) (event.Subscription, error) { + + var parentIndexRule []interface{} + for _, parentIndexItem := range parentIndex { + parentIndexRule = append(parentIndexRule, parentIndexItem) + } + var claimRule []interface{} + for _, claimItem := range claim { + claimRule = append(claimRule, claimItem) + } + var claimantRule []interface{} + for _, claimantItem := range claimant { + claimantRule = append(claimantRule, claimantItem) + } + + logs, sub, err := _FaultDisputeGame.contract.WatchLogs(opts, "Move", parentIndexRule, claimRule, claimantRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(FaultDisputeGameMove) + if err := _FaultDisputeGame.contract.UnpackLog(event, "Move", 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 +} + +// ParseMove is a log parse operation binding the contract event 0x9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be. +// +// Solidity: event Move(uint256 indexed parentIndex, bytes32 indexed claim, address indexed claimant) +func (_FaultDisputeGame *FaultDisputeGameFilterer) ParseMove(log types.Log) (*FaultDisputeGameMove, error) { + event := new(FaultDisputeGameMove) + if err := _FaultDisputeGame.contract.UnpackLog(event, "Move", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// FaultDisputeGameResolvedIterator is returned from FilterResolved and is used to iterate over the raw logs and unpacked data for Resolved events raised by the FaultDisputeGame contract. +type FaultDisputeGameResolvedIterator struct { + Event *FaultDisputeGameResolved // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *FaultDisputeGameResolvedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(FaultDisputeGameResolved) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(FaultDisputeGameResolved) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *FaultDisputeGameResolvedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *FaultDisputeGameResolvedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// FaultDisputeGameResolved represents a Resolved event raised by the FaultDisputeGame contract. +type FaultDisputeGameResolved struct { + Status uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterResolved is a free log retrieval operation binding the contract event 0x5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da60. +// +// Solidity: event Resolved(uint8 indexed status) +func (_FaultDisputeGame *FaultDisputeGameFilterer) FilterResolved(opts *bind.FilterOpts, status []uint8) (*FaultDisputeGameResolvedIterator, error) { + + var statusRule []interface{} + for _, statusItem := range status { + statusRule = append(statusRule, statusItem) + } + + logs, sub, err := _FaultDisputeGame.contract.FilterLogs(opts, "Resolved", statusRule) + if err != nil { + return nil, err + } + return &FaultDisputeGameResolvedIterator{contract: _FaultDisputeGame.contract, event: "Resolved", logs: logs, sub: sub}, nil +} + +// WatchResolved is a free log subscription operation binding the contract event 0x5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da60. +// +// Solidity: event Resolved(uint8 indexed status) +func (_FaultDisputeGame *FaultDisputeGameFilterer) WatchResolved(opts *bind.WatchOpts, sink chan<- *FaultDisputeGameResolved, status []uint8) (event.Subscription, error) { + + var statusRule []interface{} + for _, statusItem := range status { + statusRule = append(statusRule, statusItem) + } + + logs, sub, err := _FaultDisputeGame.contract.WatchLogs(opts, "Resolved", statusRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(FaultDisputeGameResolved) + if err := _FaultDisputeGame.contract.UnpackLog(event, "Resolved", 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 +} + +// ParseResolved is a log parse operation binding the contract event 0x5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da60. +// +// Solidity: event Resolved(uint8 indexed status) +func (_FaultDisputeGame *FaultDisputeGameFilterer) ParseResolved(log types.Log) (*FaultDisputeGameResolved, error) { + event := new(FaultDisputeGameResolved) + if err := _FaultDisputeGame.contract.UnpackLog(event, "Resolved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-bindings/bindings/faultdisputegame_more.go b/op-bindings/bindings/faultdisputegame_more.go new file mode 100644 index 000000000..026123fba --- /dev/null +++ b/op-bindings/bindings/faultdisputegame_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const FaultDisputeGameStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/dispute/FaultDisputeGame.sol:FaultDisputeGame\",\"label\":\"createdAt\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_userDefinedValueType(Timestamp)1019\"},{\"astId\":1001,\"contract\":\"src/dispute/FaultDisputeGame.sol:FaultDisputeGame\",\"label\":\"status\",\"offset\":8,\"slot\":\"0\",\"type\":\"t_enum(GameStatus)1010\"},{\"astId\":1002,\"contract\":\"src/dispute/FaultDisputeGame.sol:FaultDisputeGame\",\"label\":\"bondManager\",\"offset\":9,\"slot\":\"0\",\"type\":\"t_contract(IBondManager)1009\"},{\"astId\":1003,\"contract\":\"src/dispute/FaultDisputeGame.sol:FaultDisputeGame\",\"label\":\"l1Head\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_userDefinedValueType(Hash)1017\"},{\"astId\":1004,\"contract\":\"src/dispute/FaultDisputeGame.sol:FaultDisputeGame\",\"label\":\"claimData\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_array(t_struct(ClaimData)1011_storage)dyn_storage\"},{\"astId\":1005,\"contract\":\"src/dispute/FaultDisputeGame.sol:FaultDisputeGame\",\"label\":\"proposals\",\"offset\":0,\"slot\":\"3\",\"type\":\"t_struct(OutputProposals)1013_storage\"},{\"astId\":1006,\"contract\":\"src/dispute/FaultDisputeGame.sol:FaultDisputeGame\",\"label\":\"claims\",\"offset\":0,\"slot\":\"7\",\"type\":\"t_mapping(t_userDefinedValueType(ClaimHash)1015,t_bool)\"},{\"astId\":1007,\"contract\":\"src/dispute/FaultDisputeGame.sol:FaultDisputeGame\",\"label\":\"subgames\",\"offset\":0,\"slot\":\"8\",\"type\":\"t_mapping(t_uint256,t_array(t_uint256)dyn_storage)\"},{\"astId\":1008,\"contract\":\"src/dispute/FaultDisputeGame.sol:FaultDisputeGame\",\"label\":\"subgameAtRootResolved\",\"offset\":0,\"slot\":\"9\",\"type\":\"t_bool\"}],\"types\":{\"t_array(t_struct(ClaimData)1011_storage)dyn_storage\":{\"encoding\":\"dynamic_array\",\"label\":\"struct IFaultDisputeGame.ClaimData[]\",\"numberOfBytes\":\"32\",\"base\":\"t_struct(ClaimData)1011_storage\"},\"t_array(t_uint256)dyn_storage\":{\"encoding\":\"dynamic_array\",\"label\":\"uint256[]\",\"numberOfBytes\":\"32\",\"base\":\"t_uint256\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_contract(IBondManager)1009\":{\"encoding\":\"inplace\",\"label\":\"contract IBondManager\",\"numberOfBytes\":\"20\"},\"t_enum(GameStatus)1010\":{\"encoding\":\"inplace\",\"label\":\"enum GameStatus\",\"numberOfBytes\":\"1\"},\"t_mapping(t_uint256,t_array(t_uint256)dyn_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e uint256[])\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_array(t_uint256)dyn_storage\"},\"t_mapping(t_userDefinedValueType(ClaimHash)1015,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(ClaimHash =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_userDefinedValueType(ClaimHash)1015\",\"value\":\"t_bool\"},\"t_struct(ClaimData)1011_storage\":{\"encoding\":\"inplace\",\"label\":\"struct IFaultDisputeGame.ClaimData\",\"numberOfBytes\":\"96\"},\"t_struct(OutputProposal)1012_storage\":{\"encoding\":\"inplace\",\"label\":\"struct IFaultDisputeGame.OutputProposal\",\"numberOfBytes\":\"64\"},\"t_struct(OutputProposals)1013_storage\":{\"encoding\":\"inplace\",\"label\":\"struct IFaultDisputeGame.OutputProposals\",\"numberOfBytes\":\"128\"},\"t_uint128\":{\"encoding\":\"inplace\",\"label\":\"uint128\",\"numberOfBytes\":\"16\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint32\":{\"encoding\":\"inplace\",\"label\":\"uint32\",\"numberOfBytes\":\"4\"},\"t_userDefinedValueType(Claim)1014\":{\"encoding\":\"inplace\",\"label\":\"Claim\",\"numberOfBytes\":\"32\"},\"t_userDefinedValueType(ClaimHash)1015\":{\"encoding\":\"inplace\",\"label\":\"ClaimHash\",\"numberOfBytes\":\"32\"},\"t_userDefinedValueType(Clock)1016\":{\"encoding\":\"inplace\",\"label\":\"Clock\",\"numberOfBytes\":\"16\"},\"t_userDefinedValueType(Hash)1017\":{\"encoding\":\"inplace\",\"label\":\"Hash\",\"numberOfBytes\":\"32\"},\"t_userDefinedValueType(Position)1018\":{\"encoding\":\"inplace\",\"label\":\"Position\",\"numberOfBytes\":\"16\"},\"t_userDefinedValueType(Timestamp)1019\":{\"encoding\":\"inplace\",\"label\":\"Timestamp\",\"numberOfBytes\":\"8\"}}}" + +var FaultDisputeGameStorageLayout = new(solc.StorageLayout) + +var FaultDisputeGameDeployedBin = "0x6080604052600436106101b75760003560e01c80638129fc1c116100ec578063c31b29ce1161008a578063cf09e0d011610064578063cf09e0d0146106c0578063d8cc1a3c146106e1578063fa24f74314610701578063fdffbb281461072557600080fd5b8063c31b29ce146105fc578063c55cd0c714610649578063c6f0308c1461065c57600080fd5b806392931298116100c65780639293129814610519578063bbdc02db1461054d578063bcef3b551461058b578063c0c3a092146105c857600080fd5b80638129fc1c146104af5780638980e0cc146104c45780638b85902b146104d957600080fd5b80634778efe81161015957806355ef20e61161013357806355ef20e6146103e1578063609d333414610471578063632247ea146104865780636361506d1461049957600080fd5b80634778efe814610323578063529184c91461035757806354fd4d501461038b57600080fd5b80632810e1d6116101955780632810e1d61461025c578063298c90051461027157806335fef567146102b1578063363cc427146102c457600080fd5b80631e27052a146101bc578063200d2ed2146101de578063266198f91461021a575b600080fd5b3480156101c857600080fd5b506101dc6101d736600461228f565b610738565b005b3480156101ea57600080fd5b506000546102049068010000000000000000900460ff1681565b60405161021191906122e0565b60405180910390f35b34801561022657600080fd5b5061024e7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610211565b34801561026857600080fd5b506102046108f7565b34801561027d57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036040013561024e565b6101dc6102bf36600461228f565b610a5b565b3480156102d057600080fd5b506000546102fe906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b34801561032f57600080fd5b5061024e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561036357600080fd5b506102fe7f000000000000000000000000000000000000000000000000000000000000000081565b34801561039757600080fd5b506103d46040518060400160405280600681526020017f302e302e3130000000000000000000000000000000000000000000000000000081525081565b604051610211919061238c565b3480156103ed57600080fd5b5060408051606080820183526003546fffffffffffffffffffffffffffffffff808216845270010000000000000000000000000000000091829004811660208086019190915260045485870152855193840186526005548083168552929092041690820152600654928101929092526104639182565b6040516102119291906123a6565b34801561047d57600080fd5b506103d4610a6b565b6101dc61049436600461240f565b610a79565b3480156104a557600080fd5b5061024e60015481565b3480156104bb57600080fd5b506101dc61108f565b3480156104d057600080fd5b5060025461024e565b3480156104e557600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036020013561024e565b34801561052557600080fd5b506102fe7f000000000000000000000000000000000000000000000000000000000000000081565b34801561055957600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610211565b34801561059757600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033561024e565b3480156105d457600080fd5b506102fe7f000000000000000000000000000000000000000000000000000000000000000081565b34801561060857600080fd5b506106307f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610211565b6101dc61065736600461228f565b611693565b34801561066857600080fd5b5061067c610677366004612444565b61169f565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a001610211565b3480156106cc57600080fd5b506000546106309067ffffffffffffffff1681565b3480156106ed57600080fd5b506101dc6106fc3660046124a6565b611710565b34801561070d57600080fd5b50610716611c39565b60405161021193929190612530565b6101dc610733366004612444565b611c96565b6000805468010000000000000000900460ff16600281111561075c5761075c6122b1565b14610793576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610800573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610824919061255b565b7f9a1f5e7f00000000000000000000000000000000000000000000000000000000601c81905260208590529091506000846001811461088b5760028114610895576003811461089f57600481146108a957600581146108b95763ff137e656000526004601cfd5b60015491506108c0565b60045491506108c0565b60065491506108c0565b60035460801c60c01b91506108c0565b4660c01b91505b50604052600160038511811b6005031b60605260808390526000806084601c82865af16108f1573d6000803e3d6000fd5b50505050565b60008060005468010000000000000000900460ff16600281111561091d5761091d6122b1565b14610954576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60095460ff16610990576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026000815481106109a4576109a4612591565b6000918252602090912060039091020154640100000000900460ff166109cb5760026109ce565b60015b6000805491925082917fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff1668010000000000000000836002811115610a1557610a156122b1565b021790556002811115610a2a57610a2a6122b1565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a290565b905090565b610a6782826000610a79565b5050565b6060610a5660206040611fc7565b6000805468010000000000000000900460ff166002811115610a9d57610a9d6122b1565b14610ad4576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610ae0575080155b15610b17576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610b2c57610b2c612591565b600091825260208083206040805160a081018252600394909402909101805463ffffffff808216865264010000000090910460ff16151593850193909352600181015491840191909152600201546fffffffffffffffffffffffffffffffff80821660608501819052700100000000000000000000000000000000909204166080840152919350610bc09190859061205e16565b90507f0000000000000000000000000000000000000000000000000000000000000000610c7f826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610cc1576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614610d21576002836000015163ffffffff1681548110610cf057610cf0612591565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff1642610d5a846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610d6e91906125ef565b610d789190612607565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff82161115610deb576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b42176000888152608086901b6fffffffffffffffffffffffffffffffff8b1617602052604081209192509060008181526007602052604090205490915060ff1615610e69576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260076020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155815160a08101835263ffffffff808f1682529381018581529281018d81526fffffffffffffffffffffffffffffffff808c16606084019081528982166080850190815260028054808801825599819052945160039099027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805498511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009099169a909916999099179690961790965590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf8701559351925184167001000000000000000000000000000000000292909316919091177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad09093019290925580548b908110610fe157610fe1612591565b6000918252602080832060039092029091018054931515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff909416939093179092558a815260089091526040902060025461104590600190612607565b8154600181018355600092835260208320015560405133918a918c917f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be91a4505050505050505050565b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560001a60018114806110cf575060ff81166002145b611135576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335600482015260240160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff815260208101929092526002919081016111ba7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff9081169091528254600181810185556000948552602080862085516003909402018054918601511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921663ffffffff909416939093171782556040840151908201556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016637f0064206112e360207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b6040518263ffffffff1660e01b815260040161130191815260200190565b602060405180830381865afa15801561131e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611342919061261e565b9050600073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a25ae55761138d600185612607565b6040518263ffffffff1660e01b81526004016113ab91815260200190565b606060405180830381865afa1580156113c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ec9190612686565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810184905290915060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa15801561147d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a19190612686565b9050600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166399d548aa367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003604001356040518263ffffffff1660e01b815260040161152d91815260200190565b6040805180830381865afa158015611549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156d9190612712565b905081602001516fffffffffffffffffffffffffffffffff16816020015167ffffffffffffffff16116115cc576040517f13809ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182529081908101806115e7600189612607565b6fffffffffffffffffffffffffffffffff908116825260408881015182166020808501919091529851928101929092529183528051606081018252978216885285810151821688880152945187860152908501959095528051805181860151908716700100000000000000000000000000000000918816820217600355908401516004559084015180519481015194861694909516029290921760055591909101516006555160015550565b610a6782826001610a79565b600281815481106116af57600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff166002811115611734576117346122b1565b1461176b576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002878154811061178057611780612591565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b90506117df7f000000000000000000000000000000000000000000000000000000000000000060016125ef565b61187b826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16146118bc576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561193f576118e0836fffffffffffffffffffffffffffffffff16612066565b67ffffffffffffffff16156119135761190a6118fd600186612799565b865463ffffffff1661210c565b60010154611935565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050611959565b846001015491506119568460016118fd91906127ca565b90505b600882901b60088a8a6040516119709291906127fe565b6040518091039020901b146119b1576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968c8c8c8c6040518563ffffffff1660e01b8152600401611a179493929190612857565b6020604051808303816000875af1158015611a36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5a919061261e565b600284810154929091149250600091611b05906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611ba1886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b611bab9190612889565b611bb591906128aa565b67ffffffffffffffff161590508115158103611bfd576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611c8f610a6b565b9050909192565b6000805468010000000000000000900460ff166002811115611cba57611cba6122b1565b14611cf1576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028281548110611d0657611d06612591565b60009182526020909120600260039092020190810154909150677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1690611d7690700100000000000000000000000000000000900467ffffffffffffffff1642612607565b6002830154611da69190700100000000000000000000000000000000900460401c67ffffffffffffffff166125ef565b11611ddd576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260086020526040902082158015611dfb575060095460ff165b15611e32576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8054158015611e4057508215155b15611e77576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b8254811015611f45576000838281548110611e9857611e98612591565b6000918252602080832090910154808352600890915260409091205490915015611eee576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028281548110611f0357611f03612591565b600091825260209091206003909102018054909150640100000000900460ff16611f3257600193505050611f45565b505080611f3e906128f8565b9050611e7b565b5082547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff16640100000000821515021783556000848152600860205260408120611f8e91612255565b836000036108f157600980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550505050565b60606000611ffe84367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036125ef565b90508267ffffffffffffffff1667ffffffffffffffff81111561202357612023612637565b6040519080825280601f01601f19166020018201604052801561204d576020820181803683370190505b509150828160208401375092915050565b151760011b90565b6000806120f3837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b60008061212a846fffffffffffffffffffffffffffffffff166121a9565b90506002838154811061213f5761213f612591565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff8281169116146121a257815460028054909163ffffffff1690811061218d5761218d612591565b90600052602060002090600302019150612150565b5092915050565b6000811960018301168161223d827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b50805460008255906000526020600020908101906122739190612276565b50565b5b8082111561228b5760008155600101612277565b5090565b600080604083850312156122a257600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061231b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000815180845260005b818110156123475760208185018101518683018201520161232b565b81811115612359576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061239f6020830184612321565b9392505050565b82516fffffffffffffffffffffffffffffffff90811682526020808501518216818401526040808601518185015284518316606085015290840151909116608083015282015160a082015260c0810161239f565b8035801515811461240a57600080fd5b919050565b60008060006060848603121561242457600080fd5b833592506020840135915061243b604085016123fa565b90509250925092565b60006020828403121561245657600080fd5b5035919050565b60008083601f84011261246f57600080fd5b50813567ffffffffffffffff81111561248757600080fd5b60208301915083602082850101111561249f57600080fd5b9250929050565b600080600080600080608087890312156124bf57600080fd5b863595506124cf602088016123fa565b9450604087013567ffffffffffffffff808211156124ec57600080fd5b6124f88a838b0161245d565b9096509450606089013591508082111561251157600080fd5b5061251e89828a0161245d565b979a9699509497509295939492505050565b60ff841681528260208201526060604082015260006125526060830184612321565b95945050505050565b60006020828403121561256d57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461239f57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612602576126026125c0565b500190565b600082821015612619576126196125c0565b500390565b60006020828403121561263057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80516fffffffffffffffffffffffffffffffff8116811461240a57600080fd5b60006060828403121561269857600080fd5b6040516060810181811067ffffffffffffffff821117156126e2577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052825181526126f560208401612666565b602082015261270660408401612666565b60408201529392505050565b60006040828403121561272457600080fd5b6040516040810167ffffffffffffffff828210818311171561276f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b816040528451835260208501519150808216821461278c57600080fd5b5060208201529392505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156127c2576127c26125c0565b039392505050565b60006fffffffffffffffffffffffffffffffff8083168185168083038211156127f5576127f56125c0565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60408152600061286b60408301868861280e565b828103602084015261287e81858761280e565b979650505050505050565b600067ffffffffffffffff838116908316818110156127c2576127c26125c0565b600067ffffffffffffffff808416806128ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910692915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612929576129296125c0565b506001019056fea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(FaultDisputeGameStorageLayoutJSON), FaultDisputeGameStorageLayout); err != nil { + panic(err) + } + + layouts["FaultDisputeGame"] = FaultDisputeGameStorageLayout + deployedBytecodes["FaultDisputeGame"] = FaultDisputeGameDeployedBin +} diff --git a/op-bindings/bindings/gaspriceoracle.go b/op-bindings/bindings/gaspriceoracle.go index cebe77c87..547218a6c 100644 --- a/op-bindings/bindings/gaspriceoracle.go +++ b/op-bindings/bindings/gaspriceoracle.go @@ -26,13 +26,12 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription - _ = abi.ConvertType ) // GasPriceOracleMetaData contains all meta data concerning the GasPriceOracle contract. var GasPriceOracleMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"DECIMALS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"getL1Fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"getL1GasUsed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1BaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"overhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60e060405234801561001057600080fd5b5060016080819052600060a081905260c081905280610a1f61004a823960006102c1015260006102980152600061026f0152610a1f6000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c806354fd4d5011610076578063de26c4a11161005b578063de26c4a114610101578063f45e65d814610114578063fe173b97146100fb57600080fd5b806354fd4d50146100e65780636ef25c3a146100fb57600080fd5b80630c18c162146100a85780632e0f2625146100c357806349948e0e146100cb578063519b4bd3146100de575b600080fd5b6100b061011c565b6040519081526020015b60405180910390f35b6100b0600681565b6100b06100d93660046105da565b6101a6565b6100b0610207565b6100ee610268565b6040516100ba91906106d9565b486100b0565b6100b061010f3660046105da565b61030b565b6100b06103a9565b600073420000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16638b239f736040518163ffffffff1660e01b8152600401602060405180830381865afa15801561017d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a1919061072a565b905090565b6000806101b28361030b565b905060006101be610207565b6101c89083610772565b905060006101d86006600a6108cf565b905060006101e46103a9565b6101ee9084610772565b905060006101fc83836108e2565b979650505050505050565b600073420000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16635cf249696040518163ffffffff1660e01b8152600401602060405180830381865afa15801561017d573d6000803e3d6000fd5b60606102937f000000000000000000000000000000000000000000000000000000000000000061040a565b6102bc7f000000000000000000000000000000000000000000000000000000000000000061040a565b6102e57f000000000000000000000000000000000000000000000000000000000000000061040a565b6040516020016102f79392919061091d565b604051602081830303815290604052905090565b80516000908190815b8181101561038e5784818151811061032e5761032e610993565b01602001517fff000000000000000000000000000000000000000000000000000000000000001660000361036e576103676004846109c2565b925061037c565b6103796010846109c2565b92505b80610386816109da565b915050610314565b5061039761011c565b6103a190836109c2565b949350505050565b600073420000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16639e8c49666040518163ffffffff1660e01b8152600401602060405180830381865afa15801561017d573d6000803e3d6000fd5b60606000610417836104c8565b600101905060008167ffffffffffffffff811115610437576104376105ab565b6040519080825280601f01601f191660200182016040528015610461576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461046b57509392505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610511577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061053d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061055b57662386f26fc10000830492506010015b6305f5e1008310610573576305f5e100830492506008015b612710831061058757612710830492506004015b60648310610599576064830492506002015b600a83106105a5576001015b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156105ec57600080fd5b813567ffffffffffffffff8082111561060457600080fd5b818401915084601f83011261061857600080fd5b81358181111561062a5761062a6105ab565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610670576106706105ab565b8160405282815287602084870101111561068957600080fd5b826020860160208301376000928101602001929092525095945050505050565b60005b838110156106c45781810151838201526020016106ac565b838111156106d3576000848401525b50505050565b60208152600082518060208401526106f88160408501602087016106a9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60006020828403121561073c57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156107aa576107aa610743565b500290565b600181815b8085111561080857817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156107ee576107ee610743565b808516156107fb57918102915b93841c93908002906107b4565b509250929050565b60008261081f575060016105a5565b8161082c575060006105a5565b8160018114610842576002811461084c57610868565b60019150506105a5565b60ff84111561085d5761085d610743565b50506001821b6105a5565b5060208310610133831016604e8410600b841016171561088b575081810a6105a5565b61089583836107af565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156108c7576108c7610743565b029392505050565b60006108db8383610810565b9392505050565b600082610918577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000845161092f8184602089016106a9565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161096b816001850160208a016106a9565b600192019182015283516109868160028401602088016106a9565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082198211156109d5576109d5610743565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610a0b57610a0b610743565b506001019056fea164736f6c634300080f000a", + ABI: "[{\"inputs\":[],\"name\":\"DECIMALS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"getL1Fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"getL1GasUsed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1BaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"overhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b506107c0806100206000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806354fd4d5011610076578063de26c4a11161005b578063de26c4a114610157578063f45e65d81461016a578063fe173b971461015157600080fd5b806354fd4d50146101085780636ef25c3a1461015157600080fd5b8063313ce567116100a7578063313ce567146100e657806349948e0e146100ed578063519b4bd31461010057600080fd5b80630c18c162146100c35780632e0f2625146100de575b600080fd5b6100cb610172565b6040519081526020015b60405180910390f35b6100cb600681565b60066100cb565b6100cb6100fb3660046103fd565b6101fc565b6100cb61025d565b6101446040518060400160405280600581526020017f312e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516100d591906104cc565b486100cb565b6100cb6101653660046103fd565b6102be565b6100cb61036d565b600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16638b239f736040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f7919061053f565b905090565b600080610208836102be565b9050600061021461025d565b61021e9083610587565b9050600061022e6006600a6106e6565b9050600061023a61036d565b6102449084610587565b9050600061025283836106f9565b979650505050505050565b600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16635cf249696040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101d3573d6000803e3d6000fd5b80516000908190815b81811015610341578481815181106102e1576102e1610734565b01602001517fff00000000000000000000000000000000000000000000000000000000000000166000036103215761031a600484610763565b925061032f565b61032c601084610763565b92505b806103398161077b565b9150506102c7565b50600061034c610172565b6103569084610763565b905061036481610440610763565b95945050505050565b600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16639e8c49666040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101d3573d6000803e3d6000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561040f57600080fd5b813567ffffffffffffffff8082111561042757600080fd5b818401915084601f83011261043b57600080fd5b81358181111561044d5761044d6103ce565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610493576104936103ce565b816040528281528760208487010111156104ac57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208083528351808285015260005b818110156104f9578581018301518582016040015282016104dd565b8181111561050b576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561055157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156105bf576105bf610558565b500290565b600181815b8085111561061d57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561060357610603610558565b8085161561061057918102915b93841c93908002906105c9565b509250929050565b600082610634575060016106e0565b81610641575060006106e0565b816001811461065757600281146106615761067d565b60019150506106e0565b60ff84111561067257610672610558565b50506001821b6106e0565b5060208310610133831016604e8410600b84101617156106a0575081810a6106e0565b6106aa83836105c4565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156106dc576106dc610558565b0290505b92915050565b60006106f28383610625565b9392505050565b60008261072f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111561077657610776610558565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036107ac576107ac610558565b506001019056fea164736f6c634300080f000a", } // GasPriceOracleABI is the input ABI used to generate the binding from. @@ -157,11 +156,11 @@ func NewGasPriceOracleFilterer(address common.Address, filterer bind.ContractFil // bindGasPriceOracle binds a generic wrapper to an already deployed contract. func bindGasPriceOracle(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := GasPriceOracleMetaData.GetAbi() + parsed, err := abi.JSON(strings.NewReader(GasPriceOracleABI)) if err != nil { return nil, err } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and @@ -264,6 +263,37 @@ func (_GasPriceOracle *GasPriceOracleCallerSession) BaseFee() (*big.Int, error) return _GasPriceOracle.Contract.BaseFee(&_GasPriceOracle.CallOpts) } +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() pure returns(uint256) +func (_GasPriceOracle *GasPriceOracleCaller) Decimals(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _GasPriceOracle.contract.Call(opts, &out, "decimals") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() pure returns(uint256) +func (_GasPriceOracle *GasPriceOracleSession) Decimals() (*big.Int, error) { + return _GasPriceOracle.Contract.Decimals(&_GasPriceOracle.CallOpts) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() pure returns(uint256) +func (_GasPriceOracle *GasPriceOracleCallerSession) Decimals() (*big.Int, error) { + return _GasPriceOracle.Contract.Decimals(&_GasPriceOracle.CallOpts) +} + // GasPrice is a free data retrieval call binding the contract method 0xfe173b97. // // Solidity: function gasPrice() view returns(uint256) diff --git a/op-bindings/bindings/gaspriceoracle_more.go b/op-bindings/bindings/gaspriceoracle_more.go new file mode 100644 index 000000000..c0ca8d885 --- /dev/null +++ b/op-bindings/bindings/gaspriceoracle_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const GasPriceOracleStorageLayoutJSON = "{\"storage\":null,\"types\":{}}" + +var GasPriceOracleStorageLayout = new(solc.StorageLayout) + +var GasPriceOracleDeployedBin = "0x608060405234801561001057600080fd5b50600436106100be5760003560e01c806354fd4d5011610076578063de26c4a11161005b578063de26c4a114610157578063f45e65d81461016a578063fe173b971461015157600080fd5b806354fd4d50146101085780636ef25c3a1461015157600080fd5b8063313ce567116100a7578063313ce567146100e657806349948e0e146100ed578063519b4bd31461010057600080fd5b80630c18c162146100c35780632e0f2625146100de575b600080fd5b6100cb610172565b6040519081526020015b60405180910390f35b6100cb600681565b60066100cb565b6100cb6100fb3660046103fd565b6101fc565b6100cb61025d565b6101446040518060400160405280600581526020017f312e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516100d591906104cc565b486100cb565b6100cb6101653660046103fd565b6102be565b6100cb61036d565b600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16638b239f736040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f7919061053f565b905090565b600080610208836102be565b9050600061021461025d565b61021e9083610587565b9050600061022e6006600a6106e6565b9050600061023a61036d565b6102449084610587565b9050600061025283836106f9565b979650505050505050565b600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16635cf249696040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101d3573d6000803e3d6000fd5b80516000908190815b81811015610341578481815181106102e1576102e1610734565b01602001517fff00000000000000000000000000000000000000000000000000000000000000166000036103215761031a600484610763565b925061032f565b61032c601084610763565b92505b806103398161077b565b9150506102c7565b50600061034c610172565b6103569084610763565b905061036481610440610763565b95945050505050565b600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16639e8c49666040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101d3573d6000803e3d6000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561040f57600080fd5b813567ffffffffffffffff8082111561042757600080fd5b818401915084601f83011261043b57600080fd5b81358181111561044d5761044d6103ce565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610493576104936103ce565b816040528281528760208487010111156104ac57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208083528351808285015260005b818110156104f9578581018301518582016040015282016104dd565b8181111561050b576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561055157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156105bf576105bf610558565b500290565b600181815b8085111561061d57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561060357610603610558565b8085161561061057918102915b93841c93908002906105c9565b509250929050565b600082610634575060016106e0565b81610641575060006106e0565b816001811461065757600281146106615761067d565b60019150506106e0565b60ff84111561067257610672610558565b50506001821b6106e0565b5060208310610133831016604e8410600b84101617156106a0575081810a6106e0565b6106aa83836105c4565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156106dc576106dc610558565b0290505b92915050565b60006106f28383610625565b9392505050565b60008261072f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111561077657610776610558565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036107ac576107ac610558565b506001019056fea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(GasPriceOracleStorageLayoutJSON), GasPriceOracleStorageLayout); err != nil { + panic(err) + } + + layouts["GasPriceOracle"] = GasPriceOracleStorageLayout + deployedBytecodes["GasPriceOracle"] = GasPriceOracleDeployedBin +} diff --git a/op-bindings/bindings/governancetoken.go b/op-bindings/bindings/governancetoken.go new file mode 100644 index 000000000..56963a953 --- /dev/null +++ b/op-bindings/bindings/governancetoken.go @@ -0,0 +1,1715 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// ERC20VotesCheckpoint is an auto generated low-level Go binding around an user-defined struct. +type ERC20VotesCheckpoint struct { + FromBlock uint32 + Votes *big.Int +} + +// GovernanceTokenMetaData contains all meta data concerning the GovernanceToken contract. +var GovernanceTokenMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromDelegate\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toDelegate\",\"type\":\"address\"}],\"name\":\"DelegateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"previousBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"name\":\"DelegateVotesChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"pos\",\"type\":\"uint32\"}],\"name\":\"checkpoints\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"fromBlock\",\"type\":\"uint32\"},{\"internalType\":\"uint224\",\"name\":\"votes\",\"type\":\"uint224\"}],\"internalType\":\"structERC20Votes.Checkpoint\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"}],\"name\":\"delegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"delegateBySig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"delegates\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"getPastTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"getPastVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"numCheckpoints\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x6101406040523480156200001257600080fd5b50604051806040016040528060088152602001674f7074696d69736d60c01b81525080604051806040016040528060018152602001603160f81b815250604051806040016040528060088152602001674f7074696d69736d60c01b8152506040518060400160405280600281526020016104f560f41b81525081600390816200009c919062000247565b506004620000ab828262000247565b5050825160209384012082519284019290922060e08390526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818901819052818301979097526060810194909452608080850193909352308483018190528151808603909301835260c09485019091528151919096012090529290925261012052506200014a90503362000150565b62000313565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001cd57607f821691505b602082108103620001ee57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200024257600081815260208120601f850160051c810160208610156200021d5750805b601f850160051c820191505b818110156200023e5782815560010162000229565b5050505b505050565b81516001600160401b03811115620002635762000263620001a2565b6200027b81620002748454620001b8565b84620001f4565b602080601f831160018114620002b357600084156200029a5750858301515b600019600386901b1c1916600185901b1785556200023e565b600085815260208120601f198616915b82811015620002e457888601518255948401946001909101908401620002c3565b5085821015620003035787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e051610100516101205161286a6200036360003960006113f2015260006114410152600061141c015260006113750152600061139f015260006113c9015261286a6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c8063715018a6116100f9578063a457c2d711610097578063d505accf11610071578063d505accf14610416578063dd62ed3e14610429578063f1127ed81461046f578063f2fde38b146104c157600080fd5b8063a457c2d7146103dd578063a9059cbb146103f0578063c3cda5201461040357600080fd5b80638da5cb5b116100d35780638da5cb5b146103915780638e539e8c146103af57806395d89b41146103c25780639ab24eb0146103ca57600080fd5b8063715018a61461036357806379cc67901461036b5780637ecebe001461037e57600080fd5b80633a46b1a811610166578063587cde1e11610140578063587cde1e146102945780635c19a95c146102f25780636fcfff451461030557806370a082311461032d57600080fd5b80633a46b1a81461025957806340c10f191461026c57806342966c681461028157600080fd5b806323b872dd116101a257806323b872dd1461021c578063313ce5671461022f5780633644e5151461023e578063395093511461024657600080fd5b806306fdde03146101c9578063095ea7b3146101e757806318160ddd1461020a575b600080fd5b6101d16104d4565b6040516101de919061249d565b60405180910390f35b6101fa6101f5366004612539565b610566565b60405190151581526020016101de565b6002545b6040519081526020016101de565b6101fa61022a366004612563565b61057e565b604051601281526020016101de565b61020e6105a2565b6101fa610254366004612539565b6105b1565b61020e610267366004612539565b6105fd565b61027f61027a366004612539565b6106a3565b005b61027f61028f36600461259f565b6106b9565b6102cd6102a23660046125b8565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600760205260409020541690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101de565b61027f6103003660046125b8565b6106c6565b6103186103133660046125b8565b6106d0565b60405163ffffffff90911681526020016101de565b61020e61033b3660046125b8565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61027f610705565b61027f610379366004612539565b610719565b61020e61038c3660046125b8565b61072e565b600a5473ffffffffffffffffffffffffffffffffffffffff166102cd565b61020e6103bd36600461259f565b610759565b6101d16107cf565b61020e6103d83660046125b8565b6107de565b6101fa6103eb366004612539565b6108a9565b6101fa6103fe366004612539565b61097a565b61027f6104113660046125e4565b610988565b61027f61042436600461263c565b610aff565b61020e6104373660046126a6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61048261047d3660046126d9565b610cbe565b60408051825163ffffffff1681526020928301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1692810192909252016101de565b61027f6104cf3660046125b8565b610d64565b6060600380546104e390612719565b80601f016020809104026020016040519081016040528092919081815260200182805461050f90612719565b801561055c5780601f106105315761010080835404028352916020019161055c565b820191906000526020600020905b81548152906001019060200180831161053f57829003601f168201915b5050505050905090565b600033610574818585610e18565b5060019392505050565b60003361058c858285610fcb565b6105978585856110a2565b506001949350505050565b60006105ac61135b565b905090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061057490829086906105f8908790612795565b610e18565b600043821061066d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e65640060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902061069c908361148f565b9392505050565b6106ab611576565b6106b582826115f7565b5050565b6106c33382611601565b50565b6106c3338261160b565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260408120546106ff906116a9565b92915050565b61070d611576565b6107176000611743565b565b610724823383610fcb565b6106b58282611601565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600560205260408120546106ff565b60004382106107c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e6564006044820152606401610664565b6106ff60098361148f565b6060600480546104e390612719565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205480156108815773ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902061083a6001836127ad565b8154811061084a5761084a6127c4565b60009182526020909120015464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16610884565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169392505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091908381101561096d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610664565b6105978286868403610e18565b6000336105748185856110a2565b834211156109f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4552433230566f7465733a207369676e617475726520657870697265640000006044820152606401610664565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf602082015273ffffffffffffffffffffffffffffffffffffffff8816918101919091526060810186905260808101859052600090610a7990610a719060a001604051602081830303815290604052805190602001206117ba565b858585611823565b9050610a848161184b565b8614610aec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e6365000000000000006044820152606401610664565b610af6818861160b565b50505050505050565b83421115610b69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610664565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610b988c61184b565b60408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610c00826117ba565b90506000610c1082878787611823565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ca7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610664565b610cb28a8a8a610e18565b50505050505050505050565b604080518082019091526000808252602082015273ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805463ffffffff8416908110610d0f57610d0f6127c4565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16918101919091529392505050565b610d6c611576565b73ffffffffffffffffffffffffffffffffffffffff8116610e0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610664565b6106c381611743565b73ffffffffffffffffffffffffffffffffffffffff8316610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610664565b73ffffffffffffffffffffffffffffffffffffffff8216610f5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610664565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461109c578181101561108f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610664565b61109c8484848403610e18565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610664565b73ffffffffffffffffffffffffffffffffffffffff82166111e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610664565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020548181101561129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610664565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082208585039055918516815290812080548492906112e2908490612795565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161134891815260200190565b60405180910390a361109c848484611885565b60003073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156113c157507f000000000000000000000000000000000000000000000000000000000000000046145b156113eb57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b8154600090815b818110156114f35760006114aa8284611890565b9050848682815481106114bf576114bf6127c4565b60009182526020909120015463ffffffff1611156114df578092506114ed565b6114ea816001612795565b91505b50611496565b811561154c57846115056001846127ad565b81548110611515576115156127c4565b60009182526020909120015464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1661154f565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1695945050505050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610664565b6106b582826118ab565b6106b58282611971565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152600760208181526040808420805485845282862054949093528787167fffffffffffffffffffffffff00000000000000000000000000000000000000008416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461109c828483611989565b600063ffffffff82111561173f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201527f32206269747300000000000000000000000000000000000000000000000000006064820152608401610664565b5090565b600a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006106ff6117c761135b565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b600080600061183487878787611b2e565b9150915061184181611c46565b5095945050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604090208054600181018255905b50919050565b505050565b611880838383611e9a565b600061189f60028484186127f3565b61069c90848416612795565b6118b58282611ed9565b6002547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1015611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201527f766572666c6f77696e6720766f746573000000000000000000000000000000006064820152608401610664565b61109c60096120018361200d565b61197b82826121ef565b61109c60096123e38361200d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156119c55750600081115b156118805773ffffffffffffffffffffffffffffffffffffffff831615611a7a5773ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081208190611a1a906123e38561200d565b915091508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611a6f929190918252602082015260400190565b60405180910390a250505b73ffffffffffffffffffffffffffffffffffffffff8216156118805773ffffffffffffffffffffffffffffffffffffffff821660009081526008602052604081208190611aca906120018561200d565b915091508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611b1f929190918252602082015260400190565b60405180910390a25050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611b655750600090506003611c3d565b8460ff16601b14158015611b7d57508460ff16601c14155b15611b8e5750600090506004611c3d565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611be2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116611c3657600060019250925050611c3d565b9150600090505b94509492505050565b6000816004811115611c5a57611c5a61282e565b03611c625750565b6001816004811115611c7657611c7661282e565b03611cdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610664565b6002816004811115611cf157611cf161282e565b03611d58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610664565b6003816004811115611d6c57611d6c61282e565b03611df9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610664565b6004816004811115611e0d57611e0d61282e565b036106c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610664565b73ffffffffffffffffffffffffffffffffffffffff83811660009081526007602052604080822054858416835291205461188092918216911683611989565b73ffffffffffffffffffffffffffffffffffffffff8216611f56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610664565b8060026000828254611f689190612795565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290611fa2908490612795565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36106b560008383611885565b600061069c8284612795565b82546000908190801561206d57856120266001836127ad565b81548110612036576120366127c4565b60009182526020909120015464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16612070565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16925061209e83858763ffffffff16565b91506000811180156120dc575043866120b86001846127ad565b815481106120c8576120c86127c4565b60009182526020909120015463ffffffff16145b15612166576120ea826123ef565b866120f66001846127ad565b81548110612106576121066127c4565b9060005260206000200160000160046101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1602179055506121e6565b85604051806040016040528061217b436116a9565b63ffffffff16815260200161218f856123ef565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b50935093915050565b73ffffffffffffffffffffffffffffffffffffffff8216612292576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610664565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015612348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610664565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906123849084906127ad565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361188083600084611885565b600061069c82846127ad565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff82111561173f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203260448201527f32342062697473000000000000000000000000000000000000000000000000006064820152608401610664565b600060208083528351808285015260005b818110156124ca578581018301518582016040015282016124ae565b818111156124dc576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253457600080fd5b919050565b6000806040838503121561254c57600080fd5b61255583612510565b946020939093013593505050565b60008060006060848603121561257857600080fd5b61258184612510565b925061258f60208501612510565b9150604084013590509250925092565b6000602082840312156125b157600080fd5b5035919050565b6000602082840312156125ca57600080fd5b61069c82612510565b803560ff8116811461253457600080fd5b60008060008060008060c087890312156125fd57600080fd5b61260687612510565b95506020870135945060408701359350612622606088016125d3565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561265757600080fd5b61266088612510565b965061266e60208901612510565b9550604088013594506060880135935061268a608089016125d3565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156126b957600080fd5b6126c283612510565b91506126d060208401612510565b90509250929050565b600080604083850312156126ec57600080fd5b6126f583612510565b9150602083013563ffffffff8116811461270e57600080fd5b809150509250929050565b600181811c9082168061272d57607f821691505b60208210810361187a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156127a8576127a8612766565b500190565b6000828210156127bf576127bf612766565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082612829577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", +} + +// GovernanceTokenABI is the input ABI used to generate the binding from. +// Deprecated: Use GovernanceTokenMetaData.ABI instead. +var GovernanceTokenABI = GovernanceTokenMetaData.ABI + +// GovernanceTokenBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use GovernanceTokenMetaData.Bin instead. +var GovernanceTokenBin = GovernanceTokenMetaData.Bin + +// DeployGovernanceToken deploys a new Ethereum contract, binding an instance of GovernanceToken to it. +func DeployGovernanceToken(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *GovernanceToken, error) { + parsed, err := GovernanceTokenMetaData.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(GovernanceTokenBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &GovernanceToken{GovernanceTokenCaller: GovernanceTokenCaller{contract: contract}, GovernanceTokenTransactor: GovernanceTokenTransactor{contract: contract}, GovernanceTokenFilterer: GovernanceTokenFilterer{contract: contract}}, nil +} + +// GovernanceToken is an auto generated Go binding around an Ethereum contract. +type GovernanceToken struct { + GovernanceTokenCaller // Read-only binding to the contract + GovernanceTokenTransactor // Write-only binding to the contract + GovernanceTokenFilterer // Log filterer for contract events +} + +// GovernanceTokenCaller is an auto generated read-only Go binding around an Ethereum contract. +type GovernanceTokenCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// GovernanceTokenTransactor is an auto generated write-only Go binding around an Ethereum contract. +type GovernanceTokenTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// GovernanceTokenFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type GovernanceTokenFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// GovernanceTokenSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type GovernanceTokenSession struct { + Contract *GovernanceToken // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// GovernanceTokenCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type GovernanceTokenCallerSession struct { + Contract *GovernanceTokenCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// GovernanceTokenTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type GovernanceTokenTransactorSession struct { + Contract *GovernanceTokenTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// GovernanceTokenRaw is an auto generated low-level Go binding around an Ethereum contract. +type GovernanceTokenRaw struct { + Contract *GovernanceToken // Generic contract binding to access the raw methods on +} + +// GovernanceTokenCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type GovernanceTokenCallerRaw struct { + Contract *GovernanceTokenCaller // Generic read-only contract binding to access the raw methods on +} + +// GovernanceTokenTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type GovernanceTokenTransactorRaw struct { + Contract *GovernanceTokenTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewGovernanceToken creates a new instance of GovernanceToken, bound to a specific deployed contract. +func NewGovernanceToken(address common.Address, backend bind.ContractBackend) (*GovernanceToken, error) { + contract, err := bindGovernanceToken(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &GovernanceToken{GovernanceTokenCaller: GovernanceTokenCaller{contract: contract}, GovernanceTokenTransactor: GovernanceTokenTransactor{contract: contract}, GovernanceTokenFilterer: GovernanceTokenFilterer{contract: contract}}, nil +} + +// NewGovernanceTokenCaller creates a new read-only instance of GovernanceToken, bound to a specific deployed contract. +func NewGovernanceTokenCaller(address common.Address, caller bind.ContractCaller) (*GovernanceTokenCaller, error) { + contract, err := bindGovernanceToken(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &GovernanceTokenCaller{contract: contract}, nil +} + +// NewGovernanceTokenTransactor creates a new write-only instance of GovernanceToken, bound to a specific deployed contract. +func NewGovernanceTokenTransactor(address common.Address, transactor bind.ContractTransactor) (*GovernanceTokenTransactor, error) { + contract, err := bindGovernanceToken(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &GovernanceTokenTransactor{contract: contract}, nil +} + +// NewGovernanceTokenFilterer creates a new log filterer instance of GovernanceToken, bound to a specific deployed contract. +func NewGovernanceTokenFilterer(address common.Address, filterer bind.ContractFilterer) (*GovernanceTokenFilterer, error) { + contract, err := bindGovernanceToken(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &GovernanceTokenFilterer{contract: contract}, nil +} + +// bindGovernanceToken binds a generic wrapper to an already deployed contract. +func bindGovernanceToken(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(GovernanceTokenABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_GovernanceToken *GovernanceTokenRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _GovernanceToken.Contract.GovernanceTokenCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_GovernanceToken *GovernanceTokenRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GovernanceToken.Contract.GovernanceTokenTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_GovernanceToken *GovernanceTokenRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _GovernanceToken.Contract.GovernanceTokenTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_GovernanceToken *GovernanceTokenCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _GovernanceToken.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_GovernanceToken *GovernanceTokenTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GovernanceToken.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_GovernanceToken *GovernanceTokenTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _GovernanceToken.Contract.contract.Transact(opts, method, params...) +} + +// DOMAINSEPARATOR is a free data retrieval call binding the contract method 0x3644e515. +// +// Solidity: function DOMAIN_SEPARATOR() view returns(bytes32) +func (_GovernanceToken *GovernanceTokenCaller) DOMAINSEPARATOR(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "DOMAIN_SEPARATOR") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DOMAINSEPARATOR is a free data retrieval call binding the contract method 0x3644e515. +// +// Solidity: function DOMAIN_SEPARATOR() view returns(bytes32) +func (_GovernanceToken *GovernanceTokenSession) DOMAINSEPARATOR() ([32]byte, error) { + return _GovernanceToken.Contract.DOMAINSEPARATOR(&_GovernanceToken.CallOpts) +} + +// DOMAINSEPARATOR is a free data retrieval call binding the contract method 0x3644e515. +// +// Solidity: function DOMAIN_SEPARATOR() view returns(bytes32) +func (_GovernanceToken *GovernanceTokenCallerSession) DOMAINSEPARATOR() ([32]byte, error) { + return _GovernanceToken.Contract.DOMAINSEPARATOR(&_GovernanceToken.CallOpts) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_GovernanceToken *GovernanceTokenCaller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "allowance", owner, spender) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_GovernanceToken *GovernanceTokenSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _GovernanceToken.Contract.Allowance(&_GovernanceToken.CallOpts, owner, spender) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_GovernanceToken *GovernanceTokenCallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _GovernanceToken.Contract.Allowance(&_GovernanceToken.CallOpts, owner, spender) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_GovernanceToken *GovernanceTokenCaller) BalanceOf(opts *bind.CallOpts, account common.Address) (*big.Int, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "balanceOf", account) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_GovernanceToken *GovernanceTokenSession) BalanceOf(account common.Address) (*big.Int, error) { + return _GovernanceToken.Contract.BalanceOf(&_GovernanceToken.CallOpts, account) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_GovernanceToken *GovernanceTokenCallerSession) BalanceOf(account common.Address) (*big.Int, error) { + return _GovernanceToken.Contract.BalanceOf(&_GovernanceToken.CallOpts, account) +} + +// Checkpoints is a free data retrieval call binding the contract method 0xf1127ed8. +// +// Solidity: function checkpoints(address account, uint32 pos) view returns((uint32,uint224)) +func (_GovernanceToken *GovernanceTokenCaller) Checkpoints(opts *bind.CallOpts, account common.Address, pos uint32) (ERC20VotesCheckpoint, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "checkpoints", account, pos) + + if err != nil { + return *new(ERC20VotesCheckpoint), err + } + + out0 := *abi.ConvertType(out[0], new(ERC20VotesCheckpoint)).(*ERC20VotesCheckpoint) + + return out0, err + +} + +// Checkpoints is a free data retrieval call binding the contract method 0xf1127ed8. +// +// Solidity: function checkpoints(address account, uint32 pos) view returns((uint32,uint224)) +func (_GovernanceToken *GovernanceTokenSession) Checkpoints(account common.Address, pos uint32) (ERC20VotesCheckpoint, error) { + return _GovernanceToken.Contract.Checkpoints(&_GovernanceToken.CallOpts, account, pos) +} + +// Checkpoints is a free data retrieval call binding the contract method 0xf1127ed8. +// +// Solidity: function checkpoints(address account, uint32 pos) view returns((uint32,uint224)) +func (_GovernanceToken *GovernanceTokenCallerSession) Checkpoints(account common.Address, pos uint32) (ERC20VotesCheckpoint, error) { + return _GovernanceToken.Contract.Checkpoints(&_GovernanceToken.CallOpts, account, pos) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_GovernanceToken *GovernanceTokenCaller) Decimals(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "decimals") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_GovernanceToken *GovernanceTokenSession) Decimals() (uint8, error) { + return _GovernanceToken.Contract.Decimals(&_GovernanceToken.CallOpts) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_GovernanceToken *GovernanceTokenCallerSession) Decimals() (uint8, error) { + return _GovernanceToken.Contract.Decimals(&_GovernanceToken.CallOpts) +} + +// Delegates is a free data retrieval call binding the contract method 0x587cde1e. +// +// Solidity: function delegates(address account) view returns(address) +func (_GovernanceToken *GovernanceTokenCaller) Delegates(opts *bind.CallOpts, account common.Address) (common.Address, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "delegates", account) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Delegates is a free data retrieval call binding the contract method 0x587cde1e. +// +// Solidity: function delegates(address account) view returns(address) +func (_GovernanceToken *GovernanceTokenSession) Delegates(account common.Address) (common.Address, error) { + return _GovernanceToken.Contract.Delegates(&_GovernanceToken.CallOpts, account) +} + +// Delegates is a free data retrieval call binding the contract method 0x587cde1e. +// +// Solidity: function delegates(address account) view returns(address) +func (_GovernanceToken *GovernanceTokenCallerSession) Delegates(account common.Address) (common.Address, error) { + return _GovernanceToken.Contract.Delegates(&_GovernanceToken.CallOpts, account) +} + +// GetPastTotalSupply is a free data retrieval call binding the contract method 0x8e539e8c. +// +// Solidity: function getPastTotalSupply(uint256 blockNumber) view returns(uint256) +func (_GovernanceToken *GovernanceTokenCaller) GetPastTotalSupply(opts *bind.CallOpts, blockNumber *big.Int) (*big.Int, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "getPastTotalSupply", blockNumber) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetPastTotalSupply is a free data retrieval call binding the contract method 0x8e539e8c. +// +// Solidity: function getPastTotalSupply(uint256 blockNumber) view returns(uint256) +func (_GovernanceToken *GovernanceTokenSession) GetPastTotalSupply(blockNumber *big.Int) (*big.Int, error) { + return _GovernanceToken.Contract.GetPastTotalSupply(&_GovernanceToken.CallOpts, blockNumber) +} + +// GetPastTotalSupply is a free data retrieval call binding the contract method 0x8e539e8c. +// +// Solidity: function getPastTotalSupply(uint256 blockNumber) view returns(uint256) +func (_GovernanceToken *GovernanceTokenCallerSession) GetPastTotalSupply(blockNumber *big.Int) (*big.Int, error) { + return _GovernanceToken.Contract.GetPastTotalSupply(&_GovernanceToken.CallOpts, blockNumber) +} + +// GetPastVotes is a free data retrieval call binding the contract method 0x3a46b1a8. +// +// Solidity: function getPastVotes(address account, uint256 blockNumber) view returns(uint256) +func (_GovernanceToken *GovernanceTokenCaller) GetPastVotes(opts *bind.CallOpts, account common.Address, blockNumber *big.Int) (*big.Int, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "getPastVotes", account, blockNumber) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetPastVotes is a free data retrieval call binding the contract method 0x3a46b1a8. +// +// Solidity: function getPastVotes(address account, uint256 blockNumber) view returns(uint256) +func (_GovernanceToken *GovernanceTokenSession) GetPastVotes(account common.Address, blockNumber *big.Int) (*big.Int, error) { + return _GovernanceToken.Contract.GetPastVotes(&_GovernanceToken.CallOpts, account, blockNumber) +} + +// GetPastVotes is a free data retrieval call binding the contract method 0x3a46b1a8. +// +// Solidity: function getPastVotes(address account, uint256 blockNumber) view returns(uint256) +func (_GovernanceToken *GovernanceTokenCallerSession) GetPastVotes(account common.Address, blockNumber *big.Int) (*big.Int, error) { + return _GovernanceToken.Contract.GetPastVotes(&_GovernanceToken.CallOpts, account, blockNumber) +} + +// GetVotes is a free data retrieval call binding the contract method 0x9ab24eb0. +// +// Solidity: function getVotes(address account) view returns(uint256) +func (_GovernanceToken *GovernanceTokenCaller) GetVotes(opts *bind.CallOpts, account common.Address) (*big.Int, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "getVotes", account) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetVotes is a free data retrieval call binding the contract method 0x9ab24eb0. +// +// Solidity: function getVotes(address account) view returns(uint256) +func (_GovernanceToken *GovernanceTokenSession) GetVotes(account common.Address) (*big.Int, error) { + return _GovernanceToken.Contract.GetVotes(&_GovernanceToken.CallOpts, account) +} + +// GetVotes is a free data retrieval call binding the contract method 0x9ab24eb0. +// +// Solidity: function getVotes(address account) view returns(uint256) +func (_GovernanceToken *GovernanceTokenCallerSession) GetVotes(account common.Address) (*big.Int, error) { + return _GovernanceToken.Contract.GetVotes(&_GovernanceToken.CallOpts, account) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_GovernanceToken *GovernanceTokenCaller) Name(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "name") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_GovernanceToken *GovernanceTokenSession) Name() (string, error) { + return _GovernanceToken.Contract.Name(&_GovernanceToken.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_GovernanceToken *GovernanceTokenCallerSession) Name() (string, error) { + return _GovernanceToken.Contract.Name(&_GovernanceToken.CallOpts) +} + +// Nonces is a free data retrieval call binding the contract method 0x7ecebe00. +// +// Solidity: function nonces(address owner) view returns(uint256) +func (_GovernanceToken *GovernanceTokenCaller) Nonces(opts *bind.CallOpts, owner common.Address) (*big.Int, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "nonces", owner) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Nonces is a free data retrieval call binding the contract method 0x7ecebe00. +// +// Solidity: function nonces(address owner) view returns(uint256) +func (_GovernanceToken *GovernanceTokenSession) Nonces(owner common.Address) (*big.Int, error) { + return _GovernanceToken.Contract.Nonces(&_GovernanceToken.CallOpts, owner) +} + +// Nonces is a free data retrieval call binding the contract method 0x7ecebe00. +// +// Solidity: function nonces(address owner) view returns(uint256) +func (_GovernanceToken *GovernanceTokenCallerSession) Nonces(owner common.Address) (*big.Int, error) { + return _GovernanceToken.Contract.Nonces(&_GovernanceToken.CallOpts, owner) +} + +// NumCheckpoints is a free data retrieval call binding the contract method 0x6fcfff45. +// +// Solidity: function numCheckpoints(address account) view returns(uint32) +func (_GovernanceToken *GovernanceTokenCaller) NumCheckpoints(opts *bind.CallOpts, account common.Address) (uint32, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "numCheckpoints", account) + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// NumCheckpoints is a free data retrieval call binding the contract method 0x6fcfff45. +// +// Solidity: function numCheckpoints(address account) view returns(uint32) +func (_GovernanceToken *GovernanceTokenSession) NumCheckpoints(account common.Address) (uint32, error) { + return _GovernanceToken.Contract.NumCheckpoints(&_GovernanceToken.CallOpts, account) +} + +// NumCheckpoints is a free data retrieval call binding the contract method 0x6fcfff45. +// +// Solidity: function numCheckpoints(address account) view returns(uint32) +func (_GovernanceToken *GovernanceTokenCallerSession) NumCheckpoints(account common.Address) (uint32, error) { + return _GovernanceToken.Contract.NumCheckpoints(&_GovernanceToken.CallOpts, account) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_GovernanceToken *GovernanceTokenCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _GovernanceToken.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 + +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_GovernanceToken *GovernanceTokenSession) Owner() (common.Address, error) { + return _GovernanceToken.Contract.Owner(&_GovernanceToken.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_GovernanceToken *GovernanceTokenCallerSession) Owner() (common.Address, error) { + return _GovernanceToken.Contract.Owner(&_GovernanceToken.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_GovernanceToken *GovernanceTokenCaller) Symbol(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "symbol") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_GovernanceToken *GovernanceTokenSession) Symbol() (string, error) { + return _GovernanceToken.Contract.Symbol(&_GovernanceToken.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_GovernanceToken *GovernanceTokenCallerSession) Symbol() (string, error) { + return _GovernanceToken.Contract.Symbol(&_GovernanceToken.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_GovernanceToken *GovernanceTokenCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _GovernanceToken.contract.Call(opts, &out, "totalSupply") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_GovernanceToken *GovernanceTokenSession) TotalSupply() (*big.Int, error) { + return _GovernanceToken.Contract.TotalSupply(&_GovernanceToken.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_GovernanceToken *GovernanceTokenCallerSession) TotalSupply() (*big.Int, error) { + return _GovernanceToken.Contract.TotalSupply(&_GovernanceToken.CallOpts) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_GovernanceToken *GovernanceTokenTransactor) Approve(opts *bind.TransactOpts, spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.contract.Transact(opts, "approve", spender, amount) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_GovernanceToken *GovernanceTokenSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.Approve(&_GovernanceToken.TransactOpts, spender, amount) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_GovernanceToken *GovernanceTokenTransactorSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.Approve(&_GovernanceToken.TransactOpts, spender, amount) +} + +// Burn is a paid mutator transaction binding the contract method 0x42966c68. +// +// Solidity: function burn(uint256 amount) returns() +func (_GovernanceToken *GovernanceTokenTransactor) Burn(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.contract.Transact(opts, "burn", amount) +} + +// Burn is a paid mutator transaction binding the contract method 0x42966c68. +// +// Solidity: function burn(uint256 amount) returns() +func (_GovernanceToken *GovernanceTokenSession) Burn(amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.Burn(&_GovernanceToken.TransactOpts, amount) +} + +// Burn is a paid mutator transaction binding the contract method 0x42966c68. +// +// Solidity: function burn(uint256 amount) returns() +func (_GovernanceToken *GovernanceTokenTransactorSession) Burn(amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.Burn(&_GovernanceToken.TransactOpts, amount) +} + +// BurnFrom is a paid mutator transaction binding the contract method 0x79cc6790. +// +// Solidity: function burnFrom(address account, uint256 amount) returns() +func (_GovernanceToken *GovernanceTokenTransactor) BurnFrom(opts *bind.TransactOpts, account common.Address, amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.contract.Transact(opts, "burnFrom", account, amount) +} + +// BurnFrom is a paid mutator transaction binding the contract method 0x79cc6790. +// +// Solidity: function burnFrom(address account, uint256 amount) returns() +func (_GovernanceToken *GovernanceTokenSession) BurnFrom(account common.Address, amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.BurnFrom(&_GovernanceToken.TransactOpts, account, amount) +} + +// BurnFrom is a paid mutator transaction binding the contract method 0x79cc6790. +// +// Solidity: function burnFrom(address account, uint256 amount) returns() +func (_GovernanceToken *GovernanceTokenTransactorSession) BurnFrom(account common.Address, amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.BurnFrom(&_GovernanceToken.TransactOpts, account, amount) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) +func (_GovernanceToken *GovernanceTokenTransactor) DecreaseAllowance(opts *bind.TransactOpts, spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _GovernanceToken.contract.Transact(opts, "decreaseAllowance", spender, subtractedValue) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) +func (_GovernanceToken *GovernanceTokenSession) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.DecreaseAllowance(&_GovernanceToken.TransactOpts, spender, subtractedValue) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) +func (_GovernanceToken *GovernanceTokenTransactorSession) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.DecreaseAllowance(&_GovernanceToken.TransactOpts, spender, subtractedValue) +} + +// Delegate is a paid mutator transaction binding the contract method 0x5c19a95c. +// +// Solidity: function delegate(address delegatee) returns() +func (_GovernanceToken *GovernanceTokenTransactor) Delegate(opts *bind.TransactOpts, delegatee common.Address) (*types.Transaction, error) { + return _GovernanceToken.contract.Transact(opts, "delegate", delegatee) +} + +// Delegate is a paid mutator transaction binding the contract method 0x5c19a95c. +// +// Solidity: function delegate(address delegatee) returns() +func (_GovernanceToken *GovernanceTokenSession) Delegate(delegatee common.Address) (*types.Transaction, error) { + return _GovernanceToken.Contract.Delegate(&_GovernanceToken.TransactOpts, delegatee) +} + +// Delegate is a paid mutator transaction binding the contract method 0x5c19a95c. +// +// Solidity: function delegate(address delegatee) returns() +func (_GovernanceToken *GovernanceTokenTransactorSession) Delegate(delegatee common.Address) (*types.Transaction, error) { + return _GovernanceToken.Contract.Delegate(&_GovernanceToken.TransactOpts, delegatee) +} + +// DelegateBySig is a paid mutator transaction binding the contract method 0xc3cda520. +// +// Solidity: function delegateBySig(address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) returns() +func (_GovernanceToken *GovernanceTokenTransactor) DelegateBySig(opts *bind.TransactOpts, delegatee common.Address, nonce *big.Int, expiry *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) { + return _GovernanceToken.contract.Transact(opts, "delegateBySig", delegatee, nonce, expiry, v, r, s) +} + +// DelegateBySig is a paid mutator transaction binding the contract method 0xc3cda520. +// +// Solidity: function delegateBySig(address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) returns() +func (_GovernanceToken *GovernanceTokenSession) DelegateBySig(delegatee common.Address, nonce *big.Int, expiry *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) { + return _GovernanceToken.Contract.DelegateBySig(&_GovernanceToken.TransactOpts, delegatee, nonce, expiry, v, r, s) +} + +// DelegateBySig is a paid mutator transaction binding the contract method 0xc3cda520. +// +// Solidity: function delegateBySig(address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) returns() +func (_GovernanceToken *GovernanceTokenTransactorSession) DelegateBySig(delegatee common.Address, nonce *big.Int, expiry *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) { + return _GovernanceToken.Contract.DelegateBySig(&_GovernanceToken.TransactOpts, delegatee, nonce, expiry, v, r, s) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_GovernanceToken *GovernanceTokenTransactor) IncreaseAllowance(opts *bind.TransactOpts, spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _GovernanceToken.contract.Transact(opts, "increaseAllowance", spender, addedValue) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_GovernanceToken *GovernanceTokenSession) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.IncreaseAllowance(&_GovernanceToken.TransactOpts, spender, addedValue) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_GovernanceToken *GovernanceTokenTransactorSession) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.IncreaseAllowance(&_GovernanceToken.TransactOpts, spender, addedValue) +} + +// Mint is a paid mutator transaction binding the contract method 0x40c10f19. +// +// Solidity: function mint(address _account, uint256 _amount) returns() +func (_GovernanceToken *GovernanceTokenTransactor) Mint(opts *bind.TransactOpts, _account common.Address, _amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.contract.Transact(opts, "mint", _account, _amount) +} + +// Mint is a paid mutator transaction binding the contract method 0x40c10f19. +// +// Solidity: function mint(address _account, uint256 _amount) returns() +func (_GovernanceToken *GovernanceTokenSession) Mint(_account common.Address, _amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.Mint(&_GovernanceToken.TransactOpts, _account, _amount) +} + +// Mint is a paid mutator transaction binding the contract method 0x40c10f19. +// +// Solidity: function mint(address _account, uint256 _amount) returns() +func (_GovernanceToken *GovernanceTokenTransactorSession) Mint(_account common.Address, _amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.Mint(&_GovernanceToken.TransactOpts, _account, _amount) +} + +// Permit is a paid mutator transaction binding the contract method 0xd505accf. +// +// Solidity: function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) returns() +func (_GovernanceToken *GovernanceTokenTransactor) Permit(opts *bind.TransactOpts, owner common.Address, spender common.Address, value *big.Int, deadline *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) { + return _GovernanceToken.contract.Transact(opts, "permit", owner, spender, value, deadline, v, r, s) +} + +// Permit is a paid mutator transaction binding the contract method 0xd505accf. +// +// Solidity: function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) returns() +func (_GovernanceToken *GovernanceTokenSession) Permit(owner common.Address, spender common.Address, value *big.Int, deadline *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) { + return _GovernanceToken.Contract.Permit(&_GovernanceToken.TransactOpts, owner, spender, value, deadline, v, r, s) +} + +// Permit is a paid mutator transaction binding the contract method 0xd505accf. +// +// Solidity: function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) returns() +func (_GovernanceToken *GovernanceTokenTransactorSession) Permit(owner common.Address, spender common.Address, value *big.Int, deadline *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) { + return _GovernanceToken.Contract.Permit(&_GovernanceToken.TransactOpts, owner, spender, value, deadline, v, r, s) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_GovernanceToken *GovernanceTokenTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GovernanceToken.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_GovernanceToken *GovernanceTokenSession) RenounceOwnership() (*types.Transaction, error) { + return _GovernanceToken.Contract.RenounceOwnership(&_GovernanceToken.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_GovernanceToken *GovernanceTokenTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _GovernanceToken.Contract.RenounceOwnership(&_GovernanceToken.TransactOpts) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_GovernanceToken *GovernanceTokenTransactor) Transfer(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.contract.Transact(opts, "transfer", to, amount) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_GovernanceToken *GovernanceTokenSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.Transfer(&_GovernanceToken.TransactOpts, to, amount) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_GovernanceToken *GovernanceTokenTransactorSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.Transfer(&_GovernanceToken.TransactOpts, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_GovernanceToken *GovernanceTokenTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.contract.Transact(opts, "transferFrom", from, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_GovernanceToken *GovernanceTokenSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.TransferFrom(&_GovernanceToken.TransactOpts, from, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_GovernanceToken *GovernanceTokenTransactorSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _GovernanceToken.Contract.TransferFrom(&_GovernanceToken.TransactOpts, from, to, amount) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_GovernanceToken *GovernanceTokenTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _GovernanceToken.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_GovernanceToken *GovernanceTokenSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _GovernanceToken.Contract.TransferOwnership(&_GovernanceToken.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_GovernanceToken *GovernanceTokenTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _GovernanceToken.Contract.TransferOwnership(&_GovernanceToken.TransactOpts, newOwner) +} + +// GovernanceTokenApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the GovernanceToken contract. +type GovernanceTokenApprovalIterator struct { + Event *GovernanceTokenApproval // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GovernanceTokenApprovalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GovernanceTokenApproval) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GovernanceTokenApproval) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GovernanceTokenApprovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GovernanceTokenApprovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GovernanceTokenApproval represents a Approval event raised by the GovernanceToken contract. +type GovernanceTokenApproval struct { + Owner common.Address + Spender common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_GovernanceToken *GovernanceTokenFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*GovernanceTokenApprovalIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _GovernanceToken.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return &GovernanceTokenApprovalIterator{contract: _GovernanceToken.contract, event: "Approval", logs: logs, sub: sub}, nil +} + +// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_GovernanceToken *GovernanceTokenFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *GovernanceTokenApproval, owner []common.Address, spender []common.Address) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _GovernanceToken.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GovernanceTokenApproval) + if err := _GovernanceToken.contract.UnpackLog(event, "Approval", 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 +} + +// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_GovernanceToken *GovernanceTokenFilterer) ParseApproval(log types.Log) (*GovernanceTokenApproval, error) { + event := new(GovernanceTokenApproval) + if err := _GovernanceToken.contract.UnpackLog(event, "Approval", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GovernanceTokenDelegateChangedIterator is returned from FilterDelegateChanged and is used to iterate over the raw logs and unpacked data for DelegateChanged events raised by the GovernanceToken contract. +type GovernanceTokenDelegateChangedIterator struct { + Event *GovernanceTokenDelegateChanged // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GovernanceTokenDelegateChangedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GovernanceTokenDelegateChanged) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GovernanceTokenDelegateChanged) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GovernanceTokenDelegateChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GovernanceTokenDelegateChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GovernanceTokenDelegateChanged represents a DelegateChanged event raised by the GovernanceToken contract. +type GovernanceTokenDelegateChanged struct { + Delegator common.Address + FromDelegate common.Address + ToDelegate common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDelegateChanged is a free log retrieval operation binding the contract event 0x3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f. +// +// Solidity: event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate) +func (_GovernanceToken *GovernanceTokenFilterer) FilterDelegateChanged(opts *bind.FilterOpts, delegator []common.Address, fromDelegate []common.Address, toDelegate []common.Address) (*GovernanceTokenDelegateChangedIterator, error) { + + var delegatorRule []interface{} + for _, delegatorItem := range delegator { + delegatorRule = append(delegatorRule, delegatorItem) + } + var fromDelegateRule []interface{} + for _, fromDelegateItem := range fromDelegate { + fromDelegateRule = append(fromDelegateRule, fromDelegateItem) + } + var toDelegateRule []interface{} + for _, toDelegateItem := range toDelegate { + toDelegateRule = append(toDelegateRule, toDelegateItem) + } + + logs, sub, err := _GovernanceToken.contract.FilterLogs(opts, "DelegateChanged", delegatorRule, fromDelegateRule, toDelegateRule) + if err != nil { + return nil, err + } + return &GovernanceTokenDelegateChangedIterator{contract: _GovernanceToken.contract, event: "DelegateChanged", logs: logs, sub: sub}, nil +} + +// WatchDelegateChanged is a free log subscription operation binding the contract event 0x3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f. +// +// Solidity: event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate) +func (_GovernanceToken *GovernanceTokenFilterer) WatchDelegateChanged(opts *bind.WatchOpts, sink chan<- *GovernanceTokenDelegateChanged, delegator []common.Address, fromDelegate []common.Address, toDelegate []common.Address) (event.Subscription, error) { + + var delegatorRule []interface{} + for _, delegatorItem := range delegator { + delegatorRule = append(delegatorRule, delegatorItem) + } + var fromDelegateRule []interface{} + for _, fromDelegateItem := range fromDelegate { + fromDelegateRule = append(fromDelegateRule, fromDelegateItem) + } + var toDelegateRule []interface{} + for _, toDelegateItem := range toDelegate { + toDelegateRule = append(toDelegateRule, toDelegateItem) + } + + logs, sub, err := _GovernanceToken.contract.WatchLogs(opts, "DelegateChanged", delegatorRule, fromDelegateRule, toDelegateRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GovernanceTokenDelegateChanged) + if err := _GovernanceToken.contract.UnpackLog(event, "DelegateChanged", 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 +} + +// ParseDelegateChanged is a log parse operation binding the contract event 0x3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f. +// +// Solidity: event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate) +func (_GovernanceToken *GovernanceTokenFilterer) ParseDelegateChanged(log types.Log) (*GovernanceTokenDelegateChanged, error) { + event := new(GovernanceTokenDelegateChanged) + if err := _GovernanceToken.contract.UnpackLog(event, "DelegateChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GovernanceTokenDelegateVotesChangedIterator is returned from FilterDelegateVotesChanged and is used to iterate over the raw logs and unpacked data for DelegateVotesChanged events raised by the GovernanceToken contract. +type GovernanceTokenDelegateVotesChangedIterator struct { + Event *GovernanceTokenDelegateVotesChanged // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GovernanceTokenDelegateVotesChangedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GovernanceTokenDelegateVotesChanged) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GovernanceTokenDelegateVotesChanged) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GovernanceTokenDelegateVotesChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GovernanceTokenDelegateVotesChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GovernanceTokenDelegateVotesChanged represents a DelegateVotesChanged event raised by the GovernanceToken contract. +type GovernanceTokenDelegateVotesChanged struct { + Delegate common.Address + PreviousBalance *big.Int + NewBalance *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDelegateVotesChanged is a free log retrieval operation binding the contract event 0xdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724. +// +// Solidity: event DelegateVotesChanged(address indexed delegate, uint256 previousBalance, uint256 newBalance) +func (_GovernanceToken *GovernanceTokenFilterer) FilterDelegateVotesChanged(opts *bind.FilterOpts, delegate []common.Address) (*GovernanceTokenDelegateVotesChangedIterator, error) { + + var delegateRule []interface{} + for _, delegateItem := range delegate { + delegateRule = append(delegateRule, delegateItem) + } + + logs, sub, err := _GovernanceToken.contract.FilterLogs(opts, "DelegateVotesChanged", delegateRule) + if err != nil { + return nil, err + } + return &GovernanceTokenDelegateVotesChangedIterator{contract: _GovernanceToken.contract, event: "DelegateVotesChanged", logs: logs, sub: sub}, nil +} + +// WatchDelegateVotesChanged is a free log subscription operation binding the contract event 0xdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724. +// +// Solidity: event DelegateVotesChanged(address indexed delegate, uint256 previousBalance, uint256 newBalance) +func (_GovernanceToken *GovernanceTokenFilterer) WatchDelegateVotesChanged(opts *bind.WatchOpts, sink chan<- *GovernanceTokenDelegateVotesChanged, delegate []common.Address) (event.Subscription, error) { + + var delegateRule []interface{} + for _, delegateItem := range delegate { + delegateRule = append(delegateRule, delegateItem) + } + + logs, sub, err := _GovernanceToken.contract.WatchLogs(opts, "DelegateVotesChanged", delegateRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GovernanceTokenDelegateVotesChanged) + if err := _GovernanceToken.contract.UnpackLog(event, "DelegateVotesChanged", 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 +} + +// ParseDelegateVotesChanged is a log parse operation binding the contract event 0xdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724. +// +// Solidity: event DelegateVotesChanged(address indexed delegate, uint256 previousBalance, uint256 newBalance) +func (_GovernanceToken *GovernanceTokenFilterer) ParseDelegateVotesChanged(log types.Log) (*GovernanceTokenDelegateVotesChanged, error) { + event := new(GovernanceTokenDelegateVotesChanged) + if err := _GovernanceToken.contract.UnpackLog(event, "DelegateVotesChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GovernanceTokenOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the GovernanceToken contract. +type GovernanceTokenOwnershipTransferredIterator struct { + Event *GovernanceTokenOwnershipTransferred // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GovernanceTokenOwnershipTransferredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GovernanceTokenOwnershipTransferred) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GovernanceTokenOwnershipTransferred) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GovernanceTokenOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GovernanceTokenOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GovernanceTokenOwnershipTransferred represents a OwnershipTransferred event raised by the GovernanceToken contract. +type GovernanceTokenOwnershipTransferred struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_GovernanceToken *GovernanceTokenFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*GovernanceTokenOwnershipTransferredIterator, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _GovernanceToken.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &GovernanceTokenOwnershipTransferredIterator{contract: _GovernanceToken.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_GovernanceToken *GovernanceTokenFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *GovernanceTokenOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _GovernanceToken.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GovernanceTokenOwnershipTransferred) + if err := _GovernanceToken.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 +} + +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_GovernanceToken *GovernanceTokenFilterer) ParseOwnershipTransferred(log types.Log) (*GovernanceTokenOwnershipTransferred, error) { + event := new(GovernanceTokenOwnershipTransferred) + if err := _GovernanceToken.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GovernanceTokenTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the GovernanceToken contract. +type GovernanceTokenTransferIterator struct { + Event *GovernanceTokenTransfer // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GovernanceTokenTransferIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GovernanceTokenTransfer) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GovernanceTokenTransfer) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GovernanceTokenTransferIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GovernanceTokenTransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GovernanceTokenTransfer represents a Transfer event raised by the GovernanceToken contract. +type GovernanceTokenTransfer struct { + From common.Address + To common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_GovernanceToken *GovernanceTokenFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*GovernanceTokenTransferIterator, 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 := _GovernanceToken.contract.FilterLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return &GovernanceTokenTransferIterator{contract: _GovernanceToken.contract, event: "Transfer", logs: logs, sub: sub}, nil +} + +// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_GovernanceToken *GovernanceTokenFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *GovernanceTokenTransfer, 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 := _GovernanceToken.contract.WatchLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GovernanceTokenTransfer) + if err := _GovernanceToken.contract.UnpackLog(event, "Transfer", 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 +} + +// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_GovernanceToken *GovernanceTokenFilterer) ParseTransfer(log types.Log) (*GovernanceTokenTransfer, error) { + event := new(GovernanceTokenTransfer) + if err := _GovernanceToken.contract.UnpackLog(event, "Transfer", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-bindings/bindings/governancetoken_more.go b/op-bindings/bindings/governancetoken_more.go new file mode 100644 index 000000000..37b74e414 --- /dev/null +++ b/op-bindings/bindings/governancetoken_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const GovernanceTokenStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/governance/GovernanceToken.sol:GovernanceToken\",\"label\":\"_balances\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_mapping(t_address,t_uint256)\"},{\"astId\":1001,\"contract\":\"contracts/governance/GovernanceToken.sol:GovernanceToken\",\"label\":\"_allowances\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_mapping(t_address,t_mapping(t_address,t_uint256))\"},{\"astId\":1002,\"contract\":\"contracts/governance/GovernanceToken.sol:GovernanceToken\",\"label\":\"_totalSupply\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_uint256\"},{\"astId\":1003,\"contract\":\"contracts/governance/GovernanceToken.sol:GovernanceToken\",\"label\":\"_name\",\"offset\":0,\"slot\":\"3\",\"type\":\"t_string_storage\"},{\"astId\":1004,\"contract\":\"contracts/governance/GovernanceToken.sol:GovernanceToken\",\"label\":\"_symbol\",\"offset\":0,\"slot\":\"4\",\"type\":\"t_string_storage\"},{\"astId\":1005,\"contract\":\"contracts/governance/GovernanceToken.sol:GovernanceToken\",\"label\":\"_nonces\",\"offset\":0,\"slot\":\"5\",\"type\":\"t_mapping(t_address,t_struct(Counter)1012_storage)\"},{\"astId\":1006,\"contract\":\"contracts/governance/GovernanceToken.sol:GovernanceToken\",\"label\":\"_PERMIT_TYPEHASH_DEPRECATED_SLOT\",\"offset\":0,\"slot\":\"6\",\"type\":\"t_bytes32\"},{\"astId\":1007,\"contract\":\"contracts/governance/GovernanceToken.sol:GovernanceToken\",\"label\":\"_delegates\",\"offset\":0,\"slot\":\"7\",\"type\":\"t_mapping(t_address,t_address)\"},{\"astId\":1008,\"contract\":\"contracts/governance/GovernanceToken.sol:GovernanceToken\",\"label\":\"_checkpoints\",\"offset\":0,\"slot\":\"8\",\"type\":\"t_mapping(t_address,t_array(t_struct(Checkpoint)1011_storage)dyn_storage)\"},{\"astId\":1009,\"contract\":\"contracts/governance/GovernanceToken.sol:GovernanceToken\",\"label\":\"_totalSupplyCheckpoints\",\"offset\":0,\"slot\":\"9\",\"type\":\"t_array(t_struct(Checkpoint)1011_storage)dyn_storage\"},{\"astId\":1010,\"contract\":\"contracts/governance/GovernanceToken.sol:GovernanceToken\",\"label\":\"_owner\",\"offset\":0,\"slot\":\"10\",\"type\":\"t_address\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_struct(Checkpoint)1011_storage)dyn_storage\":{\"encoding\":\"dynamic_array\",\"label\":\"struct ERC20Votes.Checkpoint[]\",\"numberOfBytes\":\"32\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_address,t_address)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e address)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_address\"},\"t_mapping(t_address,t_array(t_struct(Checkpoint)1011_storage)dyn_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e struct ERC20Votes.Checkpoint[])\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_array(t_struct(Checkpoint)1011_storage)dyn_storage\"},\"t_mapping(t_address,t_mapping(t_address,t_uint256))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(address =\u003e uint256))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_address,t_uint256)\"},\"t_mapping(t_address,t_struct(Counter)1012_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e struct Counters.Counter)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_struct(Counter)1012_storage\"},\"t_mapping(t_address,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint256\"},\"t_string_storage\":{\"encoding\":\"bytes\",\"label\":\"string\",\"numberOfBytes\":\"32\"},\"t_struct(Checkpoint)1011_storage\":{\"encoding\":\"inplace\",\"label\":\"struct ERC20Votes.Checkpoint\",\"numberOfBytes\":\"32\"},\"t_struct(Counter)1012_storage\":{\"encoding\":\"inplace\",\"label\":\"struct Counters.Counter\",\"numberOfBytes\":\"32\"},\"t_uint224\":{\"encoding\":\"inplace\",\"label\":\"uint224\",\"numberOfBytes\":\"28\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint32\":{\"encoding\":\"inplace\",\"label\":\"uint32\",\"numberOfBytes\":\"4\"}}}" + +var GovernanceTokenStorageLayout = new(solc.StorageLayout) + +var GovernanceTokenDeployedBin = "0x608060405234801561001057600080fd5b50600436106101c45760003560e01c8063715018a6116100f9578063a457c2d711610097578063d505accf11610071578063d505accf14610416578063dd62ed3e14610429578063f1127ed81461046f578063f2fde38b146104c157600080fd5b8063a457c2d7146103dd578063a9059cbb146103f0578063c3cda5201461040357600080fd5b80638da5cb5b116100d35780638da5cb5b146103915780638e539e8c146103af57806395d89b41146103c25780639ab24eb0146103ca57600080fd5b8063715018a61461036357806379cc67901461036b5780637ecebe001461037e57600080fd5b80633a46b1a811610166578063587cde1e11610140578063587cde1e146102945780635c19a95c146102f25780636fcfff451461030557806370a082311461032d57600080fd5b80633a46b1a81461025957806340c10f191461026c57806342966c681461028157600080fd5b806323b872dd116101a257806323b872dd1461021c578063313ce5671461022f5780633644e5151461023e578063395093511461024657600080fd5b806306fdde03146101c9578063095ea7b3146101e757806318160ddd1461020a575b600080fd5b6101d16104d4565b6040516101de919061249d565b60405180910390f35b6101fa6101f5366004612539565b610566565b60405190151581526020016101de565b6002545b6040519081526020016101de565b6101fa61022a366004612563565b61057e565b604051601281526020016101de565b61020e6105a2565b6101fa610254366004612539565b6105b1565b61020e610267366004612539565b6105fd565b61027f61027a366004612539565b6106a3565b005b61027f61028f36600461259f565b6106b9565b6102cd6102a23660046125b8565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600760205260409020541690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101de565b61027f6103003660046125b8565b6106c6565b6103186103133660046125b8565b6106d0565b60405163ffffffff90911681526020016101de565b61020e61033b3660046125b8565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61027f610705565b61027f610379366004612539565b610719565b61020e61038c3660046125b8565b61072e565b600a5473ffffffffffffffffffffffffffffffffffffffff166102cd565b61020e6103bd36600461259f565b610759565b6101d16107cf565b61020e6103d83660046125b8565b6107de565b6101fa6103eb366004612539565b6108a9565b6101fa6103fe366004612539565b61097a565b61027f6104113660046125e4565b610988565b61027f61042436600461263c565b610aff565b61020e6104373660046126a6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61048261047d3660046126d9565b610cbe565b60408051825163ffffffff1681526020928301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1692810192909252016101de565b61027f6104cf3660046125b8565b610d64565b6060600380546104e390612719565b80601f016020809104026020016040519081016040528092919081815260200182805461050f90612719565b801561055c5780601f106105315761010080835404028352916020019161055c565b820191906000526020600020905b81548152906001019060200180831161053f57829003601f168201915b5050505050905090565b600033610574818585610e18565b5060019392505050565b60003361058c858285610fcb565b6105978585856110a2565b506001949350505050565b60006105ac61135b565b905090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061057490829086906105f8908790612795565b610e18565b600043821061066d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e65640060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902061069c908361148f565b9392505050565b6106ab611576565b6106b582826115f7565b5050565b6106c33382611601565b50565b6106c3338261160b565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260408120546106ff906116a9565b92915050565b61070d611576565b6107176000611743565b565b610724823383610fcb565b6106b58282611601565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600560205260408120546106ff565b60004382106107c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e6564006044820152606401610664565b6106ff60098361148f565b6060600480546104e390612719565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205480156108815773ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902061083a6001836127ad565b8154811061084a5761084a6127c4565b60009182526020909120015464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16610884565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169392505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091908381101561096d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610664565b6105978286868403610e18565b6000336105748185856110a2565b834211156109f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4552433230566f7465733a207369676e617475726520657870697265640000006044820152606401610664565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf602082015273ffffffffffffffffffffffffffffffffffffffff8816918101919091526060810186905260808101859052600090610a7990610a719060a001604051602081830303815290604052805190602001206117ba565b858585611823565b9050610a848161184b565b8614610aec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e6365000000000000006044820152606401610664565b610af6818861160b565b50505050505050565b83421115610b69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610664565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610b988c61184b565b60408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610c00826117ba565b90506000610c1082878787611823565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ca7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610664565b610cb28a8a8a610e18565b50505050505050505050565b604080518082019091526000808252602082015273ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805463ffffffff8416908110610d0f57610d0f6127c4565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16918101919091529392505050565b610d6c611576565b73ffffffffffffffffffffffffffffffffffffffff8116610e0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610664565b6106c381611743565b73ffffffffffffffffffffffffffffffffffffffff8316610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610664565b73ffffffffffffffffffffffffffffffffffffffff8216610f5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610664565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461109c578181101561108f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610664565b61109c8484848403610e18565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610664565b73ffffffffffffffffffffffffffffffffffffffff82166111e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610664565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020548181101561129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610664565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082208585039055918516815290812080548492906112e2908490612795565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161134891815260200190565b60405180910390a361109c848484611885565b60003073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156113c157507f000000000000000000000000000000000000000000000000000000000000000046145b156113eb57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b8154600090815b818110156114f35760006114aa8284611890565b9050848682815481106114bf576114bf6127c4565b60009182526020909120015463ffffffff1611156114df578092506114ed565b6114ea816001612795565b91505b50611496565b811561154c57846115056001846127ad565b81548110611515576115156127c4565b60009182526020909120015464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1661154f565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1695945050505050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610664565b6106b582826118ab565b6106b58282611971565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152600760208181526040808420805485845282862054949093528787167fffffffffffffffffffffffff00000000000000000000000000000000000000008416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461109c828483611989565b600063ffffffff82111561173f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201527f32206269747300000000000000000000000000000000000000000000000000006064820152608401610664565b5090565b600a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006106ff6117c761135b565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b600080600061183487878787611b2e565b9150915061184181611c46565b5095945050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604090208054600181018255905b50919050565b505050565b611880838383611e9a565b600061189f60028484186127f3565b61069c90848416612795565b6118b58282611ed9565b6002547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1015611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201527f766572666c6f77696e6720766f746573000000000000000000000000000000006064820152608401610664565b61109c60096120018361200d565b61197b82826121ef565b61109c60096123e38361200d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156119c55750600081115b156118805773ffffffffffffffffffffffffffffffffffffffff831615611a7a5773ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081208190611a1a906123e38561200d565b915091508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611a6f929190918252602082015260400190565b60405180910390a250505b73ffffffffffffffffffffffffffffffffffffffff8216156118805773ffffffffffffffffffffffffffffffffffffffff821660009081526008602052604081208190611aca906120018561200d565b915091508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611b1f929190918252602082015260400190565b60405180910390a25050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611b655750600090506003611c3d565b8460ff16601b14158015611b7d57508460ff16601c14155b15611b8e5750600090506004611c3d565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611be2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116611c3657600060019250925050611c3d565b9150600090505b94509492505050565b6000816004811115611c5a57611c5a61282e565b03611c625750565b6001816004811115611c7657611c7661282e565b03611cdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610664565b6002816004811115611cf157611cf161282e565b03611d58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610664565b6003816004811115611d6c57611d6c61282e565b03611df9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610664565b6004816004811115611e0d57611e0d61282e565b036106c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610664565b73ffffffffffffffffffffffffffffffffffffffff83811660009081526007602052604080822054858416835291205461188092918216911683611989565b73ffffffffffffffffffffffffffffffffffffffff8216611f56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610664565b8060026000828254611f689190612795565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290611fa2908490612795565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36106b560008383611885565b600061069c8284612795565b82546000908190801561206d57856120266001836127ad565b81548110612036576120366127c4565b60009182526020909120015464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16612070565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16925061209e83858763ffffffff16565b91506000811180156120dc575043866120b86001846127ad565b815481106120c8576120c86127c4565b60009182526020909120015463ffffffff16145b15612166576120ea826123ef565b866120f66001846127ad565b81548110612106576121066127c4565b9060005260206000200160000160046101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1602179055506121e6565b85604051806040016040528061217b436116a9565b63ffffffff16815260200161218f856123ef565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b50935093915050565b73ffffffffffffffffffffffffffffffffffffffff8216612292576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610664565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015612348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610664565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906123849084906127ad565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361188083600084611885565b600061069c82846127ad565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff82111561173f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203260448201527f32342062697473000000000000000000000000000000000000000000000000006064820152608401610664565b600060208083528351808285015260005b818110156124ca578581018301518582016040015282016124ae565b818111156124dc576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253457600080fd5b919050565b6000806040838503121561254c57600080fd5b61255583612510565b946020939093013593505050565b60008060006060848603121561257857600080fd5b61258184612510565b925061258f60208501612510565b9150604084013590509250925092565b6000602082840312156125b157600080fd5b5035919050565b6000602082840312156125ca57600080fd5b61069c82612510565b803560ff8116811461253457600080fd5b60008060008060008060c087890312156125fd57600080fd5b61260687612510565b95506020870135945060408701359350612622606088016125d3565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561265757600080fd5b61266088612510565b965061266e60208901612510565b9550604088013594506060880135935061268a608089016125d3565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156126b957600080fd5b6126c283612510565b91506126d060208401612510565b90509250929050565b600080604083850312156126ec57600080fd5b6126f583612510565b9150602083013563ffffffff8116811461270e57600080fd5b809150509250929050565b600181811c9082168061272d57607f821691505b60208210810361187a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156127a8576127a8612766565b500190565b6000828210156127bf576127bf612766565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082612829577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(GovernanceTokenStorageLayoutJSON), GovernanceTokenStorageLayout); err != nil { + panic(err) + } + + layouts["GovernanceToken"] = GovernanceTokenStorageLayout + deployedBytecodes["GovernanceToken"] = GovernanceTokenDeployedBin +} diff --git a/op-bindings/bindings/isemver.go b/op-bindings/bindings/isemver.go new file mode 100644 index 000000000..91eebe5d9 --- /dev/null +++ b/op-bindings/bindings/isemver.go @@ -0,0 +1,211 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// ISemverMetaData contains all meta data concerning the ISemver contract. +var ISemverMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", +} + +// ISemverABI is the input ABI used to generate the binding from. +// Deprecated: Use ISemverMetaData.ABI instead. +var ISemverABI = ISemverMetaData.ABI + +// ISemver is an auto generated Go binding around an Ethereum contract. +type ISemver struct { + ISemverCaller // Read-only binding to the contract + ISemverTransactor // Write-only binding to the contract + ISemverFilterer // Log filterer for contract events +} + +// ISemverCaller is an auto generated read-only Go binding around an Ethereum contract. +type ISemverCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ISemverTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ISemverTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ISemverFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ISemverFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ISemverSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ISemverSession struct { + Contract *ISemver // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ISemverCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ISemverCallerSession struct { + Contract *ISemverCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ISemverTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ISemverTransactorSession struct { + Contract *ISemverTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ISemverRaw is an auto generated low-level Go binding around an Ethereum contract. +type ISemverRaw struct { + Contract *ISemver // Generic contract binding to access the raw methods on +} + +// ISemverCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ISemverCallerRaw struct { + Contract *ISemverCaller // Generic read-only contract binding to access the raw methods on +} + +// ISemverTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ISemverTransactorRaw struct { + Contract *ISemverTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewISemver creates a new instance of ISemver, bound to a specific deployed contract. +func NewISemver(address common.Address, backend bind.ContractBackend) (*ISemver, error) { + contract, err := bindISemver(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ISemver{ISemverCaller: ISemverCaller{contract: contract}, ISemverTransactor: ISemverTransactor{contract: contract}, ISemverFilterer: ISemverFilterer{contract: contract}}, nil +} + +// NewISemverCaller creates a new read-only instance of ISemver, bound to a specific deployed contract. +func NewISemverCaller(address common.Address, caller bind.ContractCaller) (*ISemverCaller, error) { + contract, err := bindISemver(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ISemverCaller{contract: contract}, nil +} + +// NewISemverTransactor creates a new write-only instance of ISemver, bound to a specific deployed contract. +func NewISemverTransactor(address common.Address, transactor bind.ContractTransactor) (*ISemverTransactor, error) { + contract, err := bindISemver(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ISemverTransactor{contract: contract}, nil +} + +// NewISemverFilterer creates a new log filterer instance of ISemver, bound to a specific deployed contract. +func NewISemverFilterer(address common.Address, filterer bind.ContractFilterer) (*ISemverFilterer, error) { + contract, err := bindISemver(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ISemverFilterer{contract: contract}, nil +} + +// bindISemver binds a generic wrapper to an already deployed contract. +func bindISemver(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(ISemverABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ISemver *ISemverRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ISemver.Contract.ISemverCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ISemver *ISemverRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ISemver.Contract.ISemverTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ISemver *ISemverRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ISemver.Contract.ISemverTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ISemver *ISemverCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ISemver.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ISemver *ISemverTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ISemver.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ISemver *ISemverTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ISemver.Contract.contract.Transact(opts, method, params...) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_ISemver *ISemverCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ISemver.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_ISemver *ISemverSession) Version() (string, error) { + return _ISemver.Contract.Version(&_ISemver.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_ISemver *ISemverCallerSession) Version() (string, error) { + return _ISemver.Contract.Version(&_ISemver.CallOpts) +} diff --git a/op-bindings/bindings/isemver_more.go b/op-bindings/bindings/isemver_more.go new file mode 100644 index 000000000..473560e61 --- /dev/null +++ b/op-bindings/bindings/isemver_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const ISemverStorageLayoutJSON = "{\"storage\":null,\"types\":{}}" + +var ISemverStorageLayout = new(solc.StorageLayout) + +var ISemverDeployedBin = "0x" + +func init() { + if err := json.Unmarshal([]byte(ISemverStorageLayoutJSON), ISemverStorageLayout); err != nil { + panic(err) + } + + layouts["ISemver"] = ISemverStorageLayout + deployedBytecodes["ISemver"] = ISemverDeployedBin +} diff --git a/op-bindings/bindings/l1block.go b/op-bindings/bindings/l1block.go index 39a81ebd6..4d9cc4c46 100644 --- a/op-bindings/bindings/l1block.go +++ b/op-bindings/bindings/l1block.go @@ -26,13 +26,12 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription - _ = abi.ConvertType ) // L1BlockMetaData contains all meta data concerning the L1Block contract. var L1BlockMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"DEPOSITOR_ACCOUNT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"basefee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batcherHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1FeeOverhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1FeeScalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"number\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_number\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"_timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"_basefee\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_l1FeeOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_l1FeeScalar\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_validatorRewardScalar\",\"type\":\"uint256\"}],\"name\":\"setL1BlockValues\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"timestamp\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorRewardScalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60e060405234801561001057600080fd5b5060016080819052600060a081905260c0819052806107fe61004a823960006102460152600061021d015260006101f401526107fe6000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80639e8c496611610081578063e81b2c6d1161005b578063e81b2c6d146101c6578063ed579ad3146101cf578063efc674eb146101d857600080fd5b80639e8c49661461015d578063b80777ea14610166578063e591b2821461018657600080fd5b806364ca23ef116100b257806364ca23ef146101135780638381f58a146101405780638b239f731461015457600080fd5b806309bd5a60146100d957806354fd4d50146100f55780635cf249691461010a575b600080fd5b6100e260025481565b6040519081526020015b60405180910390f35b6100fd6101ed565b6040516100ec9190610662565b6100e260015481565b6003546101279067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016100ec565b6000546101279067ffffffffffffffff1681565b6100e260055481565b6100e260065481565b6000546101279068010000000000000000900467ffffffffffffffff1681565b6101a173deaddeaddeaddeaddeaddeaddeaddeaddead000181565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ec565b6100e260045481565b6100e260075481565b6101eb6101e63660046106d0565b610290565b005b60606102187f0000000000000000000000000000000000000000000000000000000000000000610491565b6102417f0000000000000000000000000000000000000000000000000000000000000000610491565b61026a7f0000000000000000000000000000000000000000000000000000000000000000610491565b60405160200161027c9392919061074c565b604051602081830303815290604052905090565b3373deaddeaddeaddeaddeaddeaddeaddeaddead000114610338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4c31426c6f636b3a206f6e6c7920746865206465706f7369746f72206163636f60448201527f756e742063616e20736574204c3120626c6f636b2076616c756573000000000060648201526084015b60405180910390fd5b6127108111156103f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4c31426c6f636b3a20746865206d61782076616c7565206f662076616c69646160448201527f746f7220726577617264207363616c617220686173206265656e20657863656560648201527f6465640000000000000000000000000000000000000000000000000000000000608482015260a40161032f565b6000805467ffffffffffffffff998a1668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009091169a8a169a909a179990991790985560019590955560029390935560038054929095167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009290921691909117909355600492909255600591909155600655600755565b6060600061049e8361054f565b600101905060008167ffffffffffffffff8111156104be576104be6107c2565b6040519080825280601f01601f1916602001820160405280156104e8576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846104f257509392505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610598577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105c4576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105e257662386f26fc10000830492506010015b6305f5e10083106105fa576305f5e100830492506008015b612710831061060e57612710830492506004015b60648310610620576064830492506002015b600a831061062c576001015b92915050565b60005b8381101561064d578181015183820152602001610635565b8381111561065c576000848401525b50505050565b6020815260008251806020840152610681816040850160208701610632565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803567ffffffffffffffff811681146106cb57600080fd5b919050565b60008060008060008060008060006101208a8c0312156106ef57600080fd5b6106f88a6106b3565b985061070660208b016106b3565b975060408a0135965060608a0135955061072260808b016106b3565b989b979a50959894979660a0860135965060c08601359560e0810135955061010001359350915050565b6000845161075e818460208901610632565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161079a816001850160208a01610632565b600192019182015283516107b5816002840160208801610632565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a", + ABI: "[{\"inputs\":[],\"name\":\"DEPOSITOR_ACCOUNT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"basefee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batcherHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1FeeOverhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1FeeScalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"number\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_number\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"_timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"_basefee\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_l1FeeOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_l1FeeScalar\",\"type\":\"uint256\"}],\"name\":\"setL1BlockValues\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"timestamp\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b5061045b806100206000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80638381f58a11610081578063b80777ea1161005b578063b80777ea146101a4578063e591b282146101c4578063e81b2c6d1461020457600080fd5b80638381f58a1461017e5780638b239f73146101925780639e8c49661461019b57600080fd5b806354fd4d50116100b257806354fd4d50146100ff5780635cf249691461014857806364ca23ef1461015157600080fd5b8063015d8eb9146100ce57806309bd5a60146100e3575b600080fd5b6100e16100dc366004610369565b61020d565b005b6100ec60025481565b6040519081526020015b60405180910390f35b61013b6040518060400160405280600581526020017f312e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516100f691906103db565b6100ec60015481565b6003546101659067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016100f6565b6000546101659067ffffffffffffffff1681565b6100ec60055481565b6100ec60065481565b6000546101659068010000000000000000900467ffffffffffffffff1681565b6101df73deaddeaddeaddeaddeaddeaddeaddeaddead000181565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f6565b6100ec60045481565b3373deaddeaddeaddeaddeaddeaddeaddeaddead0001146102b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4c31426c6f636b3a206f6e6c7920746865206465706f7369746f72206163636f60448201527f756e742063616e20736574204c3120626c6f636b2076616c7565730000000000606482015260840160405180910390fd5b6000805467ffffffffffffffff98891668010000000000000000027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116998916999099179890981790975560019490945560029290925560038054919094167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009190911617909255600491909155600555600655565b803567ffffffffffffffff8116811461036457600080fd5b919050565b600080600080600080600080610100898b03121561038657600080fd5b61038f8961034c565b975061039d60208a0161034c565b965060408901359550606089013594506103b960808a0161034c565b979a969950949793969560a0850135955060c08501359460e001359350915050565b600060208083528351808285015260005b81811015610408578581018301518582016040015282016103ec565b8181111561041a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea164736f6c634300080f000a", } // L1BlockABI is the input ABI used to generate the binding from. @@ -157,11 +156,11 @@ func NewL1BlockFilterer(address common.Address, filterer bind.ContractFilterer) // bindL1Block binds a generic wrapper to an already deployed contract. func bindL1Block(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := L1BlockMetaData.GetAbi() + parsed, err := abi.JSON(strings.NewReader(L1BlockABI)) if err != nil { return nil, err } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and @@ -481,37 +480,6 @@ func (_L1Block *L1BlockCallerSession) Timestamp() (uint64, error) { return _L1Block.Contract.Timestamp(&_L1Block.CallOpts) } -// ValidatorRewardScalar is a free data retrieval call binding the contract method 0xed579ad3. -// -// Solidity: function validatorRewardScalar() view returns(uint256) -func (_L1Block *L1BlockCaller) ValidatorRewardScalar(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _L1Block.contract.Call(opts, &out, "validatorRewardScalar") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// ValidatorRewardScalar is a free data retrieval call binding the contract method 0xed579ad3. -// -// Solidity: function validatorRewardScalar() view returns(uint256) -func (_L1Block *L1BlockSession) ValidatorRewardScalar() (*big.Int, error) { - return _L1Block.Contract.ValidatorRewardScalar(&_L1Block.CallOpts) -} - -// ValidatorRewardScalar is a free data retrieval call binding the contract method 0xed579ad3. -// -// Solidity: function validatorRewardScalar() view returns(uint256) -func (_L1Block *L1BlockCallerSession) ValidatorRewardScalar() (*big.Int, error) { - return _L1Block.Contract.ValidatorRewardScalar(&_L1Block.CallOpts) -} - // Version is a free data retrieval call binding the contract method 0x54fd4d50. // // Solidity: function version() view returns(string) @@ -543,23 +511,23 @@ func (_L1Block *L1BlockCallerSession) Version() (string, error) { return _L1Block.Contract.Version(&_L1Block.CallOpts) } -// SetL1BlockValues is a paid mutator transaction binding the contract method 0xefc674eb. +// SetL1BlockValues is a paid mutator transaction binding the contract method 0x015d8eb9. // -// Solidity: function setL1BlockValues(uint64 _number, uint64 _timestamp, uint256 _basefee, bytes32 _hash, uint64 _sequenceNumber, bytes32 _batcherHash, uint256 _l1FeeOverhead, uint256 _l1FeeScalar, uint256 _validatorRewardScalar) returns() -func (_L1Block *L1BlockTransactor) SetL1BlockValues(opts *bind.TransactOpts, _number uint64, _timestamp uint64, _basefee *big.Int, _hash [32]byte, _sequenceNumber uint64, _batcherHash [32]byte, _l1FeeOverhead *big.Int, _l1FeeScalar *big.Int, _validatorRewardScalar *big.Int) (*types.Transaction, error) { - return _L1Block.contract.Transact(opts, "setL1BlockValues", _number, _timestamp, _basefee, _hash, _sequenceNumber, _batcherHash, _l1FeeOverhead, _l1FeeScalar, _validatorRewardScalar) +// Solidity: function setL1BlockValues(uint64 _number, uint64 _timestamp, uint256 _basefee, bytes32 _hash, uint64 _sequenceNumber, bytes32 _batcherHash, uint256 _l1FeeOverhead, uint256 _l1FeeScalar) returns() +func (_L1Block *L1BlockTransactor) SetL1BlockValues(opts *bind.TransactOpts, _number uint64, _timestamp uint64, _basefee *big.Int, _hash [32]byte, _sequenceNumber uint64, _batcherHash [32]byte, _l1FeeOverhead *big.Int, _l1FeeScalar *big.Int) (*types.Transaction, error) { + return _L1Block.contract.Transact(opts, "setL1BlockValues", _number, _timestamp, _basefee, _hash, _sequenceNumber, _batcherHash, _l1FeeOverhead, _l1FeeScalar) } -// SetL1BlockValues is a paid mutator transaction binding the contract method 0xefc674eb. +// SetL1BlockValues is a paid mutator transaction binding the contract method 0x015d8eb9. // -// Solidity: function setL1BlockValues(uint64 _number, uint64 _timestamp, uint256 _basefee, bytes32 _hash, uint64 _sequenceNumber, bytes32 _batcherHash, uint256 _l1FeeOverhead, uint256 _l1FeeScalar, uint256 _validatorRewardScalar) returns() -func (_L1Block *L1BlockSession) SetL1BlockValues(_number uint64, _timestamp uint64, _basefee *big.Int, _hash [32]byte, _sequenceNumber uint64, _batcherHash [32]byte, _l1FeeOverhead *big.Int, _l1FeeScalar *big.Int, _validatorRewardScalar *big.Int) (*types.Transaction, error) { - return _L1Block.Contract.SetL1BlockValues(&_L1Block.TransactOpts, _number, _timestamp, _basefee, _hash, _sequenceNumber, _batcherHash, _l1FeeOverhead, _l1FeeScalar, _validatorRewardScalar) +// Solidity: function setL1BlockValues(uint64 _number, uint64 _timestamp, uint256 _basefee, bytes32 _hash, uint64 _sequenceNumber, bytes32 _batcherHash, uint256 _l1FeeOverhead, uint256 _l1FeeScalar) returns() +func (_L1Block *L1BlockSession) SetL1BlockValues(_number uint64, _timestamp uint64, _basefee *big.Int, _hash [32]byte, _sequenceNumber uint64, _batcherHash [32]byte, _l1FeeOverhead *big.Int, _l1FeeScalar *big.Int) (*types.Transaction, error) { + return _L1Block.Contract.SetL1BlockValues(&_L1Block.TransactOpts, _number, _timestamp, _basefee, _hash, _sequenceNumber, _batcherHash, _l1FeeOverhead, _l1FeeScalar) } -// SetL1BlockValues is a paid mutator transaction binding the contract method 0xefc674eb. +// SetL1BlockValues is a paid mutator transaction binding the contract method 0x015d8eb9. // -// Solidity: function setL1BlockValues(uint64 _number, uint64 _timestamp, uint256 _basefee, bytes32 _hash, uint64 _sequenceNumber, bytes32 _batcherHash, uint256 _l1FeeOverhead, uint256 _l1FeeScalar, uint256 _validatorRewardScalar) returns() -func (_L1Block *L1BlockTransactorSession) SetL1BlockValues(_number uint64, _timestamp uint64, _basefee *big.Int, _hash [32]byte, _sequenceNumber uint64, _batcherHash [32]byte, _l1FeeOverhead *big.Int, _l1FeeScalar *big.Int, _validatorRewardScalar *big.Int) (*types.Transaction, error) { - return _L1Block.Contract.SetL1BlockValues(&_L1Block.TransactOpts, _number, _timestamp, _basefee, _hash, _sequenceNumber, _batcherHash, _l1FeeOverhead, _l1FeeScalar, _validatorRewardScalar) +// Solidity: function setL1BlockValues(uint64 _number, uint64 _timestamp, uint256 _basefee, bytes32 _hash, uint64 _sequenceNumber, bytes32 _batcherHash, uint256 _l1FeeOverhead, uint256 _l1FeeScalar) returns() +func (_L1Block *L1BlockTransactorSession) SetL1BlockValues(_number uint64, _timestamp uint64, _basefee *big.Int, _hash [32]byte, _sequenceNumber uint64, _batcherHash [32]byte, _l1FeeOverhead *big.Int, _l1FeeScalar *big.Int) (*types.Transaction, error) { + return _L1Block.Contract.SetL1BlockValues(&_L1Block.TransactOpts, _number, _timestamp, _basefee, _hash, _sequenceNumber, _batcherHash, _l1FeeOverhead, _l1FeeScalar) } diff --git a/op-bindings/bindings/l1block_more.go b/op-bindings/bindings/l1block_more.go index a275604b7..be401e12b 100644 --- a/op-bindings/bindings/l1block_more.go +++ b/op-bindings/bindings/l1block_more.go @@ -9,11 +9,11 @@ import ( "github.com/ethereum-optimism/optimism/op-bindings/solc" ) -const L1BlockStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L2/L1Block.sol:L1Block\",\"label\":\"number\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint64\"},{\"astId\":1001,\"contract\":\"contracts/L2/L1Block.sol:L1Block\",\"label\":\"timestamp\",\"offset\":8,\"slot\":\"0\",\"type\":\"t_uint64\"},{\"astId\":1002,\"contract\":\"contracts/L2/L1Block.sol:L1Block\",\"label\":\"basefee\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_uint256\"},{\"astId\":1003,\"contract\":\"contracts/L2/L1Block.sol:L1Block\",\"label\":\"hash\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_bytes32\"},{\"astId\":1004,\"contract\":\"contracts/L2/L1Block.sol:L1Block\",\"label\":\"sequenceNumber\",\"offset\":0,\"slot\":\"3\",\"type\":\"t_uint64\"},{\"astId\":1005,\"contract\":\"contracts/L2/L1Block.sol:L1Block\",\"label\":\"batcherHash\",\"offset\":0,\"slot\":\"4\",\"type\":\"t_bytes32\"},{\"astId\":1006,\"contract\":\"contracts/L2/L1Block.sol:L1Block\",\"label\":\"l1FeeOverhead\",\"offset\":0,\"slot\":\"5\",\"type\":\"t_uint256\"},{\"astId\":1007,\"contract\":\"contracts/L2/L1Block.sol:L1Block\",\"label\":\"l1FeeScalar\",\"offset\":0,\"slot\":\"6\",\"type\":\"t_uint256\"},{\"astId\":1008,\"contract\":\"contracts/L2/L1Block.sol:L1Block\",\"label\":\"validatorRewardScalar\",\"offset\":0,\"slot\":\"7\",\"type\":\"t_uint256\"}],\"types\":{\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint64\":{\"encoding\":\"inplace\",\"label\":\"uint64\",\"numberOfBytes\":\"8\"}}}" +const L1BlockStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/L2/L1Block.sol:L1Block\",\"label\":\"number\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint64\"},{\"astId\":1001,\"contract\":\"src/L2/L1Block.sol:L1Block\",\"label\":\"timestamp\",\"offset\":8,\"slot\":\"0\",\"type\":\"t_uint64\"},{\"astId\":1002,\"contract\":\"src/L2/L1Block.sol:L1Block\",\"label\":\"basefee\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_uint256\"},{\"astId\":1003,\"contract\":\"src/L2/L1Block.sol:L1Block\",\"label\":\"hash\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_bytes32\"},{\"astId\":1004,\"contract\":\"src/L2/L1Block.sol:L1Block\",\"label\":\"sequenceNumber\",\"offset\":0,\"slot\":\"3\",\"type\":\"t_uint64\"},{\"astId\":1005,\"contract\":\"src/L2/L1Block.sol:L1Block\",\"label\":\"batcherHash\",\"offset\":0,\"slot\":\"4\",\"type\":\"t_bytes32\"},{\"astId\":1006,\"contract\":\"src/L2/L1Block.sol:L1Block\",\"label\":\"l1FeeOverhead\",\"offset\":0,\"slot\":\"5\",\"type\":\"t_uint256\"},{\"astId\":1007,\"contract\":\"src/L2/L1Block.sol:L1Block\",\"label\":\"l1FeeScalar\",\"offset\":0,\"slot\":\"6\",\"type\":\"t_uint256\"}],\"types\":{\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint64\":{\"encoding\":\"inplace\",\"label\":\"uint64\",\"numberOfBytes\":\"8\"}}}" var L1BlockStorageLayout = new(solc.StorageLayout) -var L1BlockDeployedBin = "0x608060405234801561001057600080fd5b50600436106100d45760003560e01c80639e8c496611610081578063e81b2c6d1161005b578063e81b2c6d146101c6578063ed579ad3146101cf578063efc674eb146101d857600080fd5b80639e8c49661461015d578063b80777ea14610166578063e591b2821461018657600080fd5b806364ca23ef116100b257806364ca23ef146101135780638381f58a146101405780638b239f731461015457600080fd5b806309bd5a60146100d957806354fd4d50146100f55780635cf249691461010a575b600080fd5b6100e260025481565b6040519081526020015b60405180910390f35b6100fd6101ed565b6040516100ec9190610662565b6100e260015481565b6003546101279067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016100ec565b6000546101279067ffffffffffffffff1681565b6100e260055481565b6100e260065481565b6000546101279068010000000000000000900467ffffffffffffffff1681565b6101a173deaddeaddeaddeaddeaddeaddeaddeaddead000181565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ec565b6100e260045481565b6100e260075481565b6101eb6101e63660046106d0565b610290565b005b60606102187f0000000000000000000000000000000000000000000000000000000000000000610491565b6102417f0000000000000000000000000000000000000000000000000000000000000000610491565b61026a7f0000000000000000000000000000000000000000000000000000000000000000610491565b60405160200161027c9392919061074c565b604051602081830303815290604052905090565b3373deaddeaddeaddeaddeaddeaddeaddeaddead000114610338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4c31426c6f636b3a206f6e6c7920746865206465706f7369746f72206163636f60448201527f756e742063616e20736574204c3120626c6f636b2076616c756573000000000060648201526084015b60405180910390fd5b6127108111156103f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4c31426c6f636b3a20746865206d61782076616c7565206f662076616c69646160448201527f746f7220726577617264207363616c617220686173206265656e20657863656560648201527f6465640000000000000000000000000000000000000000000000000000000000608482015260a40161032f565b6000805467ffffffffffffffff998a1668010000000000000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009091169a8a169a909a179990991790985560019590955560029390935560038054929095167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009290921691909117909355600492909255600591909155600655600755565b6060600061049e8361054f565b600101905060008167ffffffffffffffff8111156104be576104be6107c2565b6040519080825280601f01601f1916602001820160405280156104e8576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846104f257509392505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610598577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105c4576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105e257662386f26fc10000830492506010015b6305f5e10083106105fa576305f5e100830492506008015b612710831061060e57612710830492506004015b60648310610620576064830492506002015b600a831061062c576001015b92915050565b60005b8381101561064d578181015183820152602001610635565b8381111561065c576000848401525b50505050565b6020815260008251806020840152610681816040850160208701610632565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803567ffffffffffffffff811681146106cb57600080fd5b919050565b60008060008060008060008060006101208a8c0312156106ef57600080fd5b6106f88a6106b3565b985061070660208b016106b3565b975060408a0135965060608a0135955061072260808b016106b3565b989b979a50959894979660a0860135965060c08601359560e0810135955061010001359350915050565b6000845161075e818460208901610632565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161079a816001850160208a01610632565b600192019182015283516107b5816002840160208801610632565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a" +var L1BlockDeployedBin = "0x608060405234801561001057600080fd5b50600436106100c95760003560e01c80638381f58a11610081578063b80777ea1161005b578063b80777ea146101a4578063e591b282146101c4578063e81b2c6d1461020457600080fd5b80638381f58a1461017e5780638b239f73146101925780639e8c49661461019b57600080fd5b806354fd4d50116100b257806354fd4d50146100ff5780635cf249691461014857806364ca23ef1461015157600080fd5b8063015d8eb9146100ce57806309bd5a60146100e3575b600080fd5b6100e16100dc366004610369565b61020d565b005b6100ec60025481565b6040519081526020015b60405180910390f35b61013b6040518060400160405280600581526020017f312e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516100f691906103db565b6100ec60015481565b6003546101659067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016100f6565b6000546101659067ffffffffffffffff1681565b6100ec60055481565b6100ec60065481565b6000546101659068010000000000000000900467ffffffffffffffff1681565b6101df73deaddeaddeaddeaddeaddeaddeaddeaddead000181565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f6565b6100ec60045481565b3373deaddeaddeaddeaddeaddeaddeaddeaddead0001146102b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4c31426c6f636b3a206f6e6c7920746865206465706f7369746f72206163636f60448201527f756e742063616e20736574204c3120626c6f636b2076616c7565730000000000606482015260840160405180910390fd5b6000805467ffffffffffffffff98891668010000000000000000027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116998916999099179890981790975560019490945560029290925560038054919094167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009190911617909255600491909155600555600655565b803567ffffffffffffffff8116811461036457600080fd5b919050565b600080600080600080600080610100898b03121561038657600080fd5b61038f8961034c565b975061039d60208a0161034c565b965060408901359550606089013594506103b960808a0161034c565b979a969950949793969560a0850135955060c08501359460e001359350915050565b600060208083528351808285015260005b81811015610408578581018301518582016040015282016103ec565b8181111561041a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea164736f6c634300080f000a" func init() { if err := json.Unmarshal([]byte(L1BlockStorageLayoutJSON), L1BlockStorageLayout); err != nil { diff --git a/op-bindings/bindings/l1blocknumber.go b/op-bindings/bindings/l1blocknumber.go new file mode 100644 index 000000000..e1ca1486e --- /dev/null +++ b/op-bindings/bindings/l1blocknumber.go @@ -0,0 +1,306 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// L1BlockNumberMetaData contains all meta data concerning the L1BlockNumber contract. +var L1BlockNumberMetaData = &bind.MetaData{ + ABI: "[{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"getL1BlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x608060405234801561001057600080fd5b50610219806100206000396000f3fe60806040526004361061002d5760003560e01c806354fd4d5014610052578063b9b3efe9146100b157610048565b3661004857600061003c6100d4565b90508060005260206000f35b600061003c6100d4565b34801561005e57600080fd5b5061009b6040518060400160405280600581526020017f312e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516100a89190610168565b60405180910390f35b3480156100bd57600080fd5b506100c66100d4565b6040519081526020016100a8565b600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16638381f58a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610135573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061015991906101db565b67ffffffffffffffff16905090565b600060208083528351808285015260005b8181101561019557858101830151858201604001528201610179565b818111156101a7576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156101ed57600080fd5b815167ffffffffffffffff8116811461020557600080fd5b939250505056fea164736f6c634300080f000a", +} + +// L1BlockNumberABI is the input ABI used to generate the binding from. +// Deprecated: Use L1BlockNumberMetaData.ABI instead. +var L1BlockNumberABI = L1BlockNumberMetaData.ABI + +// L1BlockNumberBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use L1BlockNumberMetaData.Bin instead. +var L1BlockNumberBin = L1BlockNumberMetaData.Bin + +// DeployL1BlockNumber deploys a new Ethereum contract, binding an instance of L1BlockNumber to it. +func DeployL1BlockNumber(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *L1BlockNumber, error) { + parsed, err := L1BlockNumberMetaData.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(L1BlockNumberBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &L1BlockNumber{L1BlockNumberCaller: L1BlockNumberCaller{contract: contract}, L1BlockNumberTransactor: L1BlockNumberTransactor{contract: contract}, L1BlockNumberFilterer: L1BlockNumberFilterer{contract: contract}}, nil +} + +// L1BlockNumber is an auto generated Go binding around an Ethereum contract. +type L1BlockNumber struct { + L1BlockNumberCaller // Read-only binding to the contract + L1BlockNumberTransactor // Write-only binding to the contract + L1BlockNumberFilterer // Log filterer for contract events +} + +// L1BlockNumberCaller is an auto generated read-only Go binding around an Ethereum contract. +type L1BlockNumberCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L1BlockNumberTransactor is an auto generated write-only Go binding around an Ethereum contract. +type L1BlockNumberTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L1BlockNumberFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type L1BlockNumberFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// L1BlockNumberSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type L1BlockNumberSession struct { + Contract *L1BlockNumber // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// L1BlockNumberCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type L1BlockNumberCallerSession struct { + Contract *L1BlockNumberCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// L1BlockNumberTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type L1BlockNumberTransactorSession struct { + Contract *L1BlockNumberTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// L1BlockNumberRaw is an auto generated low-level Go binding around an Ethereum contract. +type L1BlockNumberRaw struct { + Contract *L1BlockNumber // Generic contract binding to access the raw methods on +} + +// L1BlockNumberCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type L1BlockNumberCallerRaw struct { + Contract *L1BlockNumberCaller // Generic read-only contract binding to access the raw methods on +} + +// L1BlockNumberTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type L1BlockNumberTransactorRaw struct { + Contract *L1BlockNumberTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewL1BlockNumber creates a new instance of L1BlockNumber, bound to a specific deployed contract. +func NewL1BlockNumber(address common.Address, backend bind.ContractBackend) (*L1BlockNumber, error) { + contract, err := bindL1BlockNumber(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &L1BlockNumber{L1BlockNumberCaller: L1BlockNumberCaller{contract: contract}, L1BlockNumberTransactor: L1BlockNumberTransactor{contract: contract}, L1BlockNumberFilterer: L1BlockNumberFilterer{contract: contract}}, nil +} + +// NewL1BlockNumberCaller creates a new read-only instance of L1BlockNumber, bound to a specific deployed contract. +func NewL1BlockNumberCaller(address common.Address, caller bind.ContractCaller) (*L1BlockNumberCaller, error) { + contract, err := bindL1BlockNumber(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &L1BlockNumberCaller{contract: contract}, nil +} + +// NewL1BlockNumberTransactor creates a new write-only instance of L1BlockNumber, bound to a specific deployed contract. +func NewL1BlockNumberTransactor(address common.Address, transactor bind.ContractTransactor) (*L1BlockNumberTransactor, error) { + contract, err := bindL1BlockNumber(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &L1BlockNumberTransactor{contract: contract}, nil +} + +// NewL1BlockNumberFilterer creates a new log filterer instance of L1BlockNumber, bound to a specific deployed contract. +func NewL1BlockNumberFilterer(address common.Address, filterer bind.ContractFilterer) (*L1BlockNumberFilterer, error) { + contract, err := bindL1BlockNumber(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &L1BlockNumberFilterer{contract: contract}, nil +} + +// bindL1BlockNumber binds a generic wrapper to an already deployed contract. +func bindL1BlockNumber(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(L1BlockNumberABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_L1BlockNumber *L1BlockNumberRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _L1BlockNumber.Contract.L1BlockNumberCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_L1BlockNumber *L1BlockNumberRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L1BlockNumber.Contract.L1BlockNumberTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_L1BlockNumber *L1BlockNumberRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _L1BlockNumber.Contract.L1BlockNumberTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_L1BlockNumber *L1BlockNumberCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _L1BlockNumber.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_L1BlockNumber *L1BlockNumberTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L1BlockNumber.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_L1BlockNumber *L1BlockNumberTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _L1BlockNumber.Contract.contract.Transact(opts, method, params...) +} + +// GetL1BlockNumber is a free data retrieval call binding the contract method 0xb9b3efe9. +// +// Solidity: function getL1BlockNumber() view returns(uint256) +func (_L1BlockNumber *L1BlockNumberCaller) GetL1BlockNumber(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _L1BlockNumber.contract.Call(opts, &out, "getL1BlockNumber") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetL1BlockNumber is a free data retrieval call binding the contract method 0xb9b3efe9. +// +// Solidity: function getL1BlockNumber() view returns(uint256) +func (_L1BlockNumber *L1BlockNumberSession) GetL1BlockNumber() (*big.Int, error) { + return _L1BlockNumber.Contract.GetL1BlockNumber(&_L1BlockNumber.CallOpts) +} + +// GetL1BlockNumber is a free data retrieval call binding the contract method 0xb9b3efe9. +// +// Solidity: function getL1BlockNumber() view returns(uint256) +func (_L1BlockNumber *L1BlockNumberCallerSession) GetL1BlockNumber() (*big.Int, error) { + return _L1BlockNumber.Contract.GetL1BlockNumber(&_L1BlockNumber.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L1BlockNumber *L1BlockNumberCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _L1BlockNumber.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L1BlockNumber *L1BlockNumberSession) Version() (string, error) { + return _L1BlockNumber.Contract.Version(&_L1BlockNumber.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_L1BlockNumber *L1BlockNumberCallerSession) Version() (string, error) { + return _L1BlockNumber.Contract.Version(&_L1BlockNumber.CallOpts) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_L1BlockNumber *L1BlockNumberTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { + return _L1BlockNumber.contract.RawTransact(opts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_L1BlockNumber *L1BlockNumberSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _L1BlockNumber.Contract.Fallback(&_L1BlockNumber.TransactOpts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_L1BlockNumber *L1BlockNumberTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _L1BlockNumber.Contract.Fallback(&_L1BlockNumber.TransactOpts, calldata) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_L1BlockNumber *L1BlockNumberTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L1BlockNumber.contract.RawTransact(opts, nil) // calldata is disallowed for receive function +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_L1BlockNumber *L1BlockNumberSession) Receive() (*types.Transaction, error) { + return _L1BlockNumber.Contract.Receive(&_L1BlockNumber.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_L1BlockNumber *L1BlockNumberTransactorSession) Receive() (*types.Transaction, error) { + return _L1BlockNumber.Contract.Receive(&_L1BlockNumber.TransactOpts) +} diff --git a/op-bindings/bindings/l1blocknumber_more.go b/op-bindings/bindings/l1blocknumber_more.go new file mode 100644 index 000000000..475fcb7fc --- /dev/null +++ b/op-bindings/bindings/l1blocknumber_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const L1BlockNumberStorageLayoutJSON = "{\"storage\":null,\"types\":{}}" + +var L1BlockNumberStorageLayout = new(solc.StorageLayout) + +var L1BlockNumberDeployedBin = "0x60806040526004361061002d5760003560e01c806354fd4d5014610052578063b9b3efe9146100b157610048565b3661004857600061003c6100d4565b90508060005260206000f35b600061003c6100d4565b34801561005e57600080fd5b5061009b6040518060400160405280600581526020017f312e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516100a89190610168565b60405180910390f35b3480156100bd57600080fd5b506100c66100d4565b6040519081526020016100a8565b600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16638381f58a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610135573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061015991906101db565b67ffffffffffffffff16905090565b600060208083528351808285015260005b8181101561019557858101830151858201604001528201610179565b818111156101a7576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156101ed57600080fd5b815167ffffffffffffffff8116811461020557600080fd5b939250505056fea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(L1BlockNumberStorageLayoutJSON), L1BlockNumberStorageLayout); err != nil { + panic(err) + } + + layouts["L1BlockNumber"] = L1BlockNumberStorageLayout + deployedBytecodes["L1BlockNumber"] = L1BlockNumberDeployedBin +} diff --git a/op-bindings/bindings/l1crossdomainmessenger.go b/op-bindings/bindings/l1crossdomainmessenger.go index ac1a6f370..ccc641c59 100644 --- a/op-bindings/bindings/l1crossdomainmessenger.go +++ b/op-bindings/bindings/l1crossdomainmessenger.go @@ -26,13 +26,12 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription - _ = abi.ConvertType ) // L1CrossDomainMessengerMetaData contains all meta data concerning the L1CrossDomainMessenger contract. var L1CrossDomainMessengerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"contractKromaPortal\",\"name\":\"_portal\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"FailedRelayedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"RelayedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"messageNonce\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"}],\"name\":\"SentMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSAGE_VERSION\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_MESSENGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PORTAL\",\"outputs\":[{\"internalType\":\"contractKromaPortal\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_CALL_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_RESERVED_GAS\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"}],\"name\":\"baseGas\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"failedMessages\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"relayMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"}],\"name\":\"sendMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"successfulMessages\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"xDomainMessageSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6101206040523480156200001257600080fd5b5060405162001fbd38038062001fbd83398101604081905262000035916200023f565b734200000000000000000000000000000000000004608052600160a052600060c081905260e0526001600160a01b03811661010052620000746200007b565b5062000271565b600054610100900460ff16158080156200009c5750600054600160ff909116105b80620000cc5750620000b930620001ad60201b620011231760201c565b158015620000cc575060005460ff166001145b620001355760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000159576000805461ff0019166101001790555b62000163620001bc565b8015620001aa576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6001600160a01b03163b151590565b600054610100900460ff16620002295760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016200012c565b606680546001600160a01b03191661dead179055565b6000602082840312156200025257600080fd5b81516001600160a01b03811681146200026a57600080fd5b9392505050565b60805160a05160c05160e05161010051611cdd620002e0600039600081816101be0152818161117c015281816113b40152818161141501526114e1015260006106560152600061062d0152600061060401526000818161031c0152818161041401526113de0152611cdd6000f3fe60806040526004361061015f5760003560e01c80636e296e45116100c0578063a4e7f8bd11610074578063b28ade2511610059578063b28ade251461039e578063d764ad0b146103be578063ecc70428146103d157600080fd5b8063a4e7f8bd1461033e578063b1b1b2091461036e57600080fd5b806383a74074116100a557806383a74074146102f35780638cbeeef2146102575780639fce812c1461030a57600080fd5b80636e296e45146102c95780638129fc1c146102de57600080fd5b80633f827a5a1161011757806354fd4d50116100fc57806354fd4d501461026d5780635644cfdf1461028f5780635c975abb146102a557600080fd5b80633f827a5a1461022f5780634c1d6a691461025757600080fd5b80630ff754ea116101485780630ff754ea146101ac5780632828d7e8146102055780633dbb202b1461021a57600080fd5b8063028f85f7146101645780630c56849814610197575b600080fd5b34801561017057600080fd5b50610179601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101a357600080fd5b50610179603f81565b3480156101b857600080fd5b506101e07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161018e565b34801561021157600080fd5b50610179604081565b61022d610228366004611772565b61040f565b005b34801561023b57600080fd5b50610244600081565b60405161ffff909116815260200161018e565b34801561026357600080fd5b50610179619c4081565b34801561027957600080fd5b506102826105fd565b60405161018e9190611853565b34801561029b57600080fd5b5061017961138881565b3480156102b157600080fd5b5060335460ff165b604051901515815260200161018e565b3480156102d557600080fd5b506101e06106a0565b3480156102ea57600080fd5b5061022d61078c565b3480156102ff57600080fd5b5061017962030d4081565b34801561031657600080fd5b506101e07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034a57600080fd5b506102b961035936600461186d565b60686020526000908152604090205460ff1681565b34801561037a57600080fd5b506102b961038936600461186d565b60656020526000908152604090205460ff1681565b3480156103aa57600080fd5b506101796103b9366004611886565b61091e565b61022d6103cc3660046118da565b61098c565b3480156103dd57600080fd5b506067547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660405190815260200161018e565b6105277f000000000000000000000000000000000000000000000000000000000000000061043e85858561091e565b347fd764ad0b000000000000000000000000000000000000000000000000000000006104896067547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b338a34898c8c6040516024016104a597969594939291906119a9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261113f565b3373ffffffffffffffffffffffffffffffffffffffff85167fdd28cef75ff18fb538e43317144469f339702f973eace2bc808f2acc37db310e34868661058c6067547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b8760405161059e959493929190611a08565b60405180910390a35050606780547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60606106287f00000000000000000000000000000000000000000000000000000000000000006111f4565b6106517f00000000000000000000000000000000000000000000000000000000000000006111f4565b61067a7f00000000000000000000000000000000000000000000000000000000000000006111f4565b60405160200161068c93929190611a40565b604051602081830303815290604052905090565b60665460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21530161076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084015b60405180910390fd5b5060665473ffffffffffffffffffffffffffffffffffffffff1690565b600054610100900460ff16158080156107ac5750600054600160ff909116105b806107c65750303b1580156107c6575060005460ff166001145b610852576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610766565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156108b057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6108b86112b2565b801561091b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6000611388619c4080603f61093a604063ffffffff8816611ae5565b6109449190611b15565b61094f601088611ae5565b61095c9062030d40611b63565b6109669190611b63565b6109709190611b63565b61097a9190611b63565b6109849190611b63565b949350505050565b60f087901c60018110610a47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206d6573736167657320697320737570706f7274656420617420746860648201527f69732074696d6500000000000000000000000000000000000000000000000000608482015260a401610766565b6000610a8d898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061137792505050565b9050610a9761139a565b15610acf57853414610aab57610aab611b8f565b60008181526068602052604090205460ff1615610aca57610aca611b8f565b610c21565b3415610b83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610766565b60008181526068602052604090205460ff16610c21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610766565b610c2a876114be565b15610cdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610766565b60008181526065602052604090205460ff1615610d7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610766565b610d9d85610d8e611388619c40611b63565b67ffffffffffffffff16611535565b1580610dc3575060665473ffffffffffffffffffffffffffffffffffffffff1661dead14155b15610edc5760008181526068602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201610ed5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610766565b5050611115565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a161790556000610f6d88619c405a610f309190611bbe565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061155392505050565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156110045760008281526065602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2611111565b60008281526068602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610766565b5050505b50505050505050565b905090565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e9e05c429084906111bc908890839089906000908990600401611bd5565b6000604051808303818588803b1580156111d557600080fd5b505af11580156111e9573d6000803e3d6000fd5b505050505050505050565b606060006112018361156d565b600101905060008167ffffffffffffffff81111561122157611221611c2d565b6040519080825280601f01601f19166020018201604052801561124b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461125557509392505050565b600054610100900460ff16611349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610766565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055565b600061138787878787878761164f565b8051906020012090509695505050505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561111e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639bf62d826040518163ffffffff1660e01b8152600401602060405180830381865afa15801561147e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a29190611c5c565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff821630148061152f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115b6577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115e2576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061160057662386f26fc10000830492506010015b6305f5e1008310611618576305f5e100830492506008015b612710831061162c57612710830492506004015b6064831061163e576064830492506002015b600a831061152f5760010192915050565b606086868686868660405160240161166c96959493929190611c79565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461091b57600080fd5b60008083601f84011261172257600080fd5b50813567ffffffffffffffff81111561173a57600080fd5b60208301915083602082850101111561175257600080fd5b9250929050565b803563ffffffff8116811461176d57600080fd5b919050565b6000806000806060858703121561178857600080fd5b8435611793816116ee565b9350602085013567ffffffffffffffff8111156117af57600080fd5b6117bb87828801611710565b90945092506117ce905060408601611759565b905092959194509250565b60005b838110156117f45781810151838201526020016117dc565b83811115611803576000848401525b50505050565b600081518084526118218160208601602086016117d9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006118666020830184611809565b9392505050565b60006020828403121561187f57600080fd5b5035919050565b60008060006040848603121561189b57600080fd5b833567ffffffffffffffff8111156118b257600080fd5b6118be86828701611710565b90945092506118d1905060208501611759565b90509250925092565b600080600080600080600060c0888a0312156118f557600080fd5b873596506020880135611907816116ee565b95506040880135611917816116ee565b9450606088013593506080880135925060a088013567ffffffffffffffff81111561194157600080fd5b61194d8a828b01611710565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a08301526119fb60c083018486611960565b9998505050505050505050565b858152608060208201526000611a22608083018688611960565b905083604083015263ffffffff831660608301529695505050505050565b60008451611a528184602089016117d9565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611a8e816001850160208a016117d9565b60019201918201528351611aa98160028401602088016117d9565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611b0c57611b0c611ab6565b02949350505050565b600067ffffffffffffffff80841680611b57577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611b8657611b86611ab6565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611bd057611bd0611ab6565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a060808201526000611c2260a0830184611809565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215611c6e57600080fd5b8151611866816116ee565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611cc460c0830184611809565b9897505050505050505056fea164736f6c634300080f000a", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"FailedRelayedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"RelayedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"messageNonce\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"}],\"name\":\"SentMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SentMessageExtension1\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSAGE_VERSION\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_MESSENGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PORTAL\",\"outputs\":[{\"internalType\":\"contractOptimismPortal\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_CALL_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_RESERVED_GAS\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"}],\"name\":\"baseGas\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"failedMessages\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractOptimismPortal\",\"name\":\"_portal\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"portal\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"relayMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"}],\"name\":\"sendMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"successfulMessages\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"xDomainMessageSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60a06040523480156200001157600080fd5b507342000000000000000000000000000000000000076080526200003660006200003c565b620001ea565b600054600390600160a81b900460ff1615801562000068575060005460ff808316600160a01b90920416105b620000d15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b60008054600160a81b61ffff60a01b19909116600160a01b60ff85160260ff60a81b19161717905560f980546001600160a01b0319166001600160a01b0384161790556200011e62000165565b6000805460ff60a81b1916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b600054600160a81b900460ff16620001d45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000c8565b60cc80546001600160a01b03191661dead179055565b608051611cee620002146000396000818161033b0152818161048a01526114ef0152611cee6000f3fe60806040526004361061015f5760003560e01c80636e296e45116100c0578063b1b1b20911610074578063c4d66de811610059578063c4d66de8146103ed578063d764ad0b1461040d578063ecc704281461042057600080fd5b8063b1b1b2091461039d578063b28ade25146103cd57600080fd5b80638cbeeef2116100a55780638cbeeef2146102505780639fce812c14610329578063a4e7f8bd1461035d57600080fd5b80636e296e45146102fd57806383a740741461031257600080fd5b80633f827a5a1161011757806354fd4d50116100fc57806354fd4d50146102665780635644cfdf146102bc5780636425666b146102d257600080fd5b80633f827a5a146102285780634c1d6a691461025057600080fd5b80630ff754ea116101485780630ff754ea146101ac5780632828d7e8146101fe5780633dbb202b1461021357600080fd5b8063028f85f7146101645780630c56849814610197575b600080fd5b34801561017057600080fd5b50610179601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101a357600080fd5b50610179603f81565b3480156101b857600080fd5b5060f9546101d99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161018e565b34801561020a57600080fd5b50610179604081565b6102266102213660046117ba565b610485565b005b34801561023457600080fd5b5061023d600181565b60405161ffff909116815260200161018e565b34801561025c57600080fd5b50610179619c4081565b34801561027257600080fd5b506102af6040518060400160405280600581526020017f312e372e3000000000000000000000000000000000000000000000000000000081525081565b60405161018e919061188c565b3480156102c857600080fd5b5061017961138881565b3480156102de57600080fd5b5060f95473ffffffffffffffffffffffffffffffffffffffff166101d9565b34801561030957600080fd5b506101d96106e9565b34801561031e57600080fd5b5061017962030d4081565b34801561033557600080fd5b506101d97f000000000000000000000000000000000000000000000000000000000000000081565b34801561036957600080fd5b5061038d6103783660046118a6565b60ce6020526000908152604090205460ff1681565b604051901515815260200161018e565b3480156103a957600080fd5b5061038d6103b83660046118a6565b60cb6020526000908152604090205460ff1681565b3480156103d957600080fd5b506101796103e83660046118bf565b6107d5565b3480156103f957600080fd5b50610226610408366004611913565b610843565b61022661041b366004611930565b610a47565b34801561042c57600080fd5b5061047760cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b60405190815260200161018e565b6105be7f00000000000000000000000000000000000000000000000000000000000000006104b48585856107d5565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061052060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161053c97969594939291906119ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526112d3565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561064360cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610655959493929190611a5e565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2153016107b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084015b60405180910390fd5b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f6107f1604063ffffffff8816611adb565b6107fb9190611b0b565b610806601088611adb565b6108139062030d40611b59565b61081d9190611b59565b6108279190611b59565b6108319190611b59565b61083b9190611b59565b949350505050565b6000546003907501000000000000000000000000000000000000000000900460ff16158015610891575060005460ff8083167401000000000000000000000000000000000000000090920416105b61091d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107af565b6000805475010000000000000000000000000000000000000000007fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff9091167401000000000000000000000000000000000000000060ff8516027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff161717905560f980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556109e561136c565b600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60f087901c60028110610b02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016107af565b8061ffff16600003610bf7576000610b53878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f9250611445915050565b600081815260cb602052604090205490915060ff1615610bf5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016107af565b505b6000610c3d898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061146492505050565b9050610c47611487565b15610c7f57853414610c5b57610c5b611b85565b600081815260ce602052604090205460ff1615610c7a57610c7a611b85565b610dd1565b3415610d33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016107af565b600081815260ce602052604090205460ff16610dd1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016107af565b610dda8761157d565b15610e8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016107af565b600081815260cb602052604090205460ff1615610f2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016107af565b610f4d85610f3e611388619c40611b59565b67ffffffffffffffff166115c3565b1580610f73575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561108c57600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016107af565b50506112c5565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061111d88619c405a6110e09190611bb4565b8988888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506115e192505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156111b457600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26112c1565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016112c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016107af565b5050505b50505050505050565b905090565b60f9546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c42908490611334908890839089906000908990600401611bcb565b6000604051808303818588803b15801561134d57600080fd5b505af1158015611361573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107af565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055565b6000611453858585856115fb565b805190602001209050949350505050565b6000611474878787878787611694565b8051906020012090509695505050505050565b60f95460009073ffffffffffffffffffffffffffffffffffffffff16331480156112ce575060f954604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116931691639bf62d829160048083019260209291908290030181865afa15801561153d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115619190611c23565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff82163014806115bd575060f95473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b6060848484846040516024016116149493929190611c40565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b60608686868686866040516024016116b196959493929190611c8a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461175557600080fd5b50565b60008083601f84011261176a57600080fd5b50813567ffffffffffffffff81111561178257600080fd5b60208301915083602082850101111561179a57600080fd5b9250929050565b803563ffffffff811681146117b557600080fd5b919050565b600080600080606085870312156117d057600080fd5b84356117db81611733565b9350602085013567ffffffffffffffff8111156117f757600080fd5b61180387828801611758565b90945092506118169050604086016117a1565b905092959194509250565b6000815180845260005b818110156118475760208185018101518683018201520161182b565b81811115611859576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061189f6020830184611821565b9392505050565b6000602082840312156118b857600080fd5b5035919050565b6000806000604084860312156118d457600080fd5b833567ffffffffffffffff8111156118eb57600080fd5b6118f786828701611758565b909450925061190a9050602085016117a1565b90509250925092565b60006020828403121561192557600080fd5b813561189f81611733565b600080600080600080600060c0888a03121561194b57600080fd5b87359650602088013561195d81611733565b9550604088013561196d81611733565b9450606088013593506080880135925060a088013567ffffffffffffffff81111561199757600080fd5b6119a38a828b01611758565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611a5160c0830184866119b6565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611a8e6080830186886119b6565b905083604083015263ffffffff831660608301529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611b0257611b02611aac565b02949350505050565b600067ffffffffffffffff80841680611b4d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611b7c57611b7c611aac565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611bc657611bc6611aac565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a060808201526000611c1860a0830184611821565b979650505050505050565b600060208284031215611c3557600080fd5b815161189f81611733565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152611c796080830185611821565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611cd560c0830184611821565b9897505050505050505056fea164736f6c634300080f000a", } // L1CrossDomainMessengerABI is the input ABI used to generate the binding from. @@ -44,7 +43,7 @@ var L1CrossDomainMessengerABI = L1CrossDomainMessengerMetaData.ABI var L1CrossDomainMessengerBin = L1CrossDomainMessengerMetaData.Bin // DeployL1CrossDomainMessenger deploys a new Ethereum contract, binding an instance of L1CrossDomainMessenger to it. -func DeployL1CrossDomainMessenger(auth *bind.TransactOpts, backend bind.ContractBackend, _portal common.Address) (common.Address, *types.Transaction, *L1CrossDomainMessenger, error) { +func DeployL1CrossDomainMessenger(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *L1CrossDomainMessenger, error) { parsed, err := L1CrossDomainMessengerMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -53,7 +52,7 @@ func DeployL1CrossDomainMessenger(auth *bind.TransactOpts, backend bind.Contract return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(L1CrossDomainMessengerBin), backend, _portal) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(L1CrossDomainMessengerBin), backend) if err != nil { return common.Address{}, nil, nil, err } @@ -157,11 +156,11 @@ func NewL1CrossDomainMessengerFilterer(address common.Address, filterer bind.Con // bindL1CrossDomainMessenger binds a generic wrapper to an already deployed contract. func bindL1CrossDomainMessenger(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := L1CrossDomainMessengerMetaData.GetAbi() + parsed, err := abi.JSON(strings.NewReader(L1CrossDomainMessengerABI)) if err != nil { return nil, err } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and @@ -605,35 +604,35 @@ func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) MessageNonce return _L1CrossDomainMessenger.Contract.MessageNonce(&_L1CrossDomainMessenger.CallOpts) } -// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// Portal is a free data retrieval call binding the contract method 0x6425666b. // -// Solidity: function paused() view returns(bool) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) Paused(opts *bind.CallOpts) (bool, error) { +// Solidity: function portal() view returns(address) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) Portal(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "paused") + err := _L1CrossDomainMessenger.contract.Call(opts, &out, "portal") if err != nil { - return *new(bool), err + return *new(common.Address), err } - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) return out0, err } -// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// Portal is a free data retrieval call binding the contract method 0x6425666b. // -// Solidity: function paused() view returns(bool) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) Paused() (bool, error) { - return _L1CrossDomainMessenger.Contract.Paused(&_L1CrossDomainMessenger.CallOpts) +// Solidity: function portal() view returns(address) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) Portal() (common.Address, error) { + return _L1CrossDomainMessenger.Contract.Portal(&_L1CrossDomainMessenger.CallOpts) } -// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// Portal is a free data retrieval call binding the contract method 0x6425666b. // -// Solidity: function paused() view returns(bool) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) Paused() (bool, error) { - return _L1CrossDomainMessenger.Contract.Paused(&_L1CrossDomainMessenger.CallOpts) +// Solidity: function portal() view returns(address) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) Portal() (common.Address, error) { + return _L1CrossDomainMessenger.Contract.Portal(&_L1CrossDomainMessenger.CallOpts) } // SuccessfulMessages is a free data retrieval call binding the contract method 0xb1b1b209. @@ -729,25 +728,25 @@ func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) XDomainMessa return _L1CrossDomainMessenger.Contract.XDomainMessageSender(&_L1CrossDomainMessenger.CallOpts) } -// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c. +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. // -// Solidity: function initialize() returns() -func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactor) Initialize(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L1CrossDomainMessenger.contract.Transact(opts, "initialize") +// Solidity: function initialize(address _portal) returns() +func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactor) Initialize(opts *bind.TransactOpts, _portal common.Address) (*types.Transaction, error) { + return _L1CrossDomainMessenger.contract.Transact(opts, "initialize", _portal) } -// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c. +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. // -// Solidity: function initialize() returns() -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) Initialize() (*types.Transaction, error) { - return _L1CrossDomainMessenger.Contract.Initialize(&_L1CrossDomainMessenger.TransactOpts) +// Solidity: function initialize(address _portal) returns() +func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) Initialize(_portal common.Address) (*types.Transaction, error) { + return _L1CrossDomainMessenger.Contract.Initialize(&_L1CrossDomainMessenger.TransactOpts, _portal) } -// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c. +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. // -// Solidity: function initialize() returns() -func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactorSession) Initialize() (*types.Transaction, error) { - return _L1CrossDomainMessenger.Contract.Initialize(&_L1CrossDomainMessenger.TransactOpts) +// Solidity: function initialize(address _portal) returns() +func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactorSession) Initialize(_portal common.Address) (*types.Transaction, error) { + return _L1CrossDomainMessenger.Contract.Initialize(&_L1CrossDomainMessenger.TransactOpts, _portal) } // RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. @@ -1070,140 +1069,6 @@ func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) ParseInitialized( return event, nil } -// L1CrossDomainMessengerPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the L1CrossDomainMessenger contract. -type L1CrossDomainMessengerPausedIterator struct { - Event *L1CrossDomainMessengerPaused // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L1CrossDomainMessengerPausedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L1CrossDomainMessengerPaused) - 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 - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L1CrossDomainMessengerPaused) - 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() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L1CrossDomainMessengerPausedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L1CrossDomainMessengerPausedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L1CrossDomainMessengerPaused represents a Paused event raised by the L1CrossDomainMessenger contract. -type L1CrossDomainMessengerPaused struct { - Account common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterPaused is a free log retrieval operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. -// -// Solidity: event Paused(address account) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) FilterPaused(opts *bind.FilterOpts) (*L1CrossDomainMessengerPausedIterator, error) { - - logs, sub, err := _L1CrossDomainMessenger.contract.FilterLogs(opts, "Paused") - if err != nil { - return nil, err - } - return &L1CrossDomainMessengerPausedIterator{contract: _L1CrossDomainMessenger.contract, event: "Paused", logs: logs, sub: sub}, nil -} - -// WatchPaused is a free log subscription operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. -// -// Solidity: event Paused(address account) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *L1CrossDomainMessengerPaused) (event.Subscription, error) { - - logs, sub, err := _L1CrossDomainMessenger.contract.WatchLogs(opts, "Paused") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L1CrossDomainMessengerPaused) - if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "Paused", 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 -} - -// ParsePaused is a log parse operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. -// -// Solidity: event Paused(address account) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) ParsePaused(log types.Log) (*L1CrossDomainMessengerPaused, error) { - event := new(L1CrossDomainMessengerPaused) - if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "Paused", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // L1CrossDomainMessengerRelayedMessageIterator is returned from FilterRelayedMessage and is used to iterate over the raw logs and unpacked data for RelayedMessage events raised by the L1CrossDomainMessenger contract. type L1CrossDomainMessengerRelayedMessageIterator struct { Event *L1CrossDomainMessengerRelayedMessage // Event containing the contract specifics and raw log @@ -1419,49 +1284,40 @@ func (it *L1CrossDomainMessengerSentMessageIterator) Close() error { type L1CrossDomainMessengerSentMessage struct { Target common.Address Sender common.Address - Value *big.Int Message []byte MessageNonce *big.Int GasLimit *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterSentMessage is a free log retrieval operation binding the contract event 0xdd28cef75ff18fb538e43317144469f339702f973eace2bc808f2acc37db310e. +// FilterSentMessage is a free log retrieval operation binding the contract event 0xcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a. // -// Solidity: event SentMessage(address indexed target, address indexed sender, uint256 value, bytes message, uint256 messageNonce, uint256 gasLimit) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) FilterSentMessage(opts *bind.FilterOpts, target []common.Address, sender []common.Address) (*L1CrossDomainMessengerSentMessageIterator, error) { +// Solidity: event SentMessage(address indexed target, address sender, bytes message, uint256 messageNonce, uint256 gasLimit) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) FilterSentMessage(opts *bind.FilterOpts, target []common.Address) (*L1CrossDomainMessengerSentMessageIterator, error) { var targetRule []interface{} for _, targetItem := range target { targetRule = append(targetRule, targetItem) } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - logs, sub, err := _L1CrossDomainMessenger.contract.FilterLogs(opts, "SentMessage", targetRule, senderRule) + logs, sub, err := _L1CrossDomainMessenger.contract.FilterLogs(opts, "SentMessage", targetRule) if err != nil { return nil, err } return &L1CrossDomainMessengerSentMessageIterator{contract: _L1CrossDomainMessenger.contract, event: "SentMessage", logs: logs, sub: sub}, nil } -// WatchSentMessage is a free log subscription operation binding the contract event 0xdd28cef75ff18fb538e43317144469f339702f973eace2bc808f2acc37db310e. +// WatchSentMessage is a free log subscription operation binding the contract event 0xcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a. // -// Solidity: event SentMessage(address indexed target, address indexed sender, uint256 value, bytes message, uint256 messageNonce, uint256 gasLimit) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) WatchSentMessage(opts *bind.WatchOpts, sink chan<- *L1CrossDomainMessengerSentMessage, target []common.Address, sender []common.Address) (event.Subscription, error) { +// Solidity: event SentMessage(address indexed target, address sender, bytes message, uint256 messageNonce, uint256 gasLimit) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) WatchSentMessage(opts *bind.WatchOpts, sink chan<- *L1CrossDomainMessengerSentMessage, target []common.Address) (event.Subscription, error) { var targetRule []interface{} for _, targetItem := range target { targetRule = append(targetRule, targetItem) } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - logs, sub, err := _L1CrossDomainMessenger.contract.WatchLogs(opts, "SentMessage", targetRule, senderRule) + logs, sub, err := _L1CrossDomainMessenger.contract.WatchLogs(opts, "SentMessage", targetRule) if err != nil { return nil, err } @@ -1493,9 +1349,9 @@ func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) WatchSentMessage( }), nil } -// ParseSentMessage is a log parse operation binding the contract event 0xdd28cef75ff18fb538e43317144469f339702f973eace2bc808f2acc37db310e. +// ParseSentMessage is a log parse operation binding the contract event 0xcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a. // -// Solidity: event SentMessage(address indexed target, address indexed sender, uint256 value, bytes message, uint256 messageNonce, uint256 gasLimit) +// Solidity: event SentMessage(address indexed target, address sender, bytes message, uint256 messageNonce, uint256 gasLimit) func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) ParseSentMessage(log types.Log) (*L1CrossDomainMessengerSentMessage, error) { event := new(L1CrossDomainMessengerSentMessage) if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "SentMessage", log); err != nil { @@ -1505,9 +1361,9 @@ func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) ParseSentMessage( return event, nil } -// L1CrossDomainMessengerUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the L1CrossDomainMessenger contract. -type L1CrossDomainMessengerUnpausedIterator struct { - Event *L1CrossDomainMessengerUnpaused // Event containing the contract specifics and raw log +// L1CrossDomainMessengerSentMessageExtension1Iterator is returned from FilterSentMessageExtension1 and is used to iterate over the raw logs and unpacked data for SentMessageExtension1 events raised by the L1CrossDomainMessenger contract. +type L1CrossDomainMessengerSentMessageExtension1Iterator struct { + Event *L1CrossDomainMessengerSentMessageExtension1 // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1521,7 +1377,7 @@ type L1CrossDomainMessengerUnpausedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *L1CrossDomainMessengerUnpausedIterator) Next() bool { +func (it *L1CrossDomainMessengerSentMessageExtension1Iterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1530,7 +1386,7 @@ func (it *L1CrossDomainMessengerUnpausedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(L1CrossDomainMessengerUnpaused) + it.Event = new(L1CrossDomainMessengerSentMessageExtension1) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1545,7 +1401,7 @@ func (it *L1CrossDomainMessengerUnpausedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(L1CrossDomainMessengerUnpaused) + it.Event = new(L1CrossDomainMessengerSentMessageExtension1) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1561,41 +1417,52 @@ func (it *L1CrossDomainMessengerUnpausedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *L1CrossDomainMessengerUnpausedIterator) Error() error { +func (it *L1CrossDomainMessengerSentMessageExtension1Iterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *L1CrossDomainMessengerUnpausedIterator) Close() error { +func (it *L1CrossDomainMessengerSentMessageExtension1Iterator) Close() error { it.sub.Unsubscribe() return nil } -// L1CrossDomainMessengerUnpaused represents a Unpaused event raised by the L1CrossDomainMessenger contract. -type L1CrossDomainMessengerUnpaused struct { - Account common.Address - Raw types.Log // Blockchain specific contextual infos +// L1CrossDomainMessengerSentMessageExtension1 represents a SentMessageExtension1 event raised by the L1CrossDomainMessenger contract. +type L1CrossDomainMessengerSentMessageExtension1 struct { + Sender common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos } -// FilterUnpaused is a free log retrieval operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// FilterSentMessageExtension1 is a free log retrieval operation binding the contract event 0x8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d546. // -// Solidity: event Unpaused(address account) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) FilterUnpaused(opts *bind.FilterOpts) (*L1CrossDomainMessengerUnpausedIterator, error) { +// Solidity: event SentMessageExtension1(address indexed sender, uint256 value) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) FilterSentMessageExtension1(opts *bind.FilterOpts, sender []common.Address) (*L1CrossDomainMessengerSentMessageExtension1Iterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } - logs, sub, err := _L1CrossDomainMessenger.contract.FilterLogs(opts, "Unpaused") + logs, sub, err := _L1CrossDomainMessenger.contract.FilterLogs(opts, "SentMessageExtension1", senderRule) if err != nil { return nil, err } - return &L1CrossDomainMessengerUnpausedIterator{contract: _L1CrossDomainMessenger.contract, event: "Unpaused", logs: logs, sub: sub}, nil + return &L1CrossDomainMessengerSentMessageExtension1Iterator{contract: _L1CrossDomainMessenger.contract, event: "SentMessageExtension1", logs: logs, sub: sub}, nil } -// WatchUnpaused is a free log subscription operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// WatchSentMessageExtension1 is a free log subscription operation binding the contract event 0x8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d546. // -// Solidity: event Unpaused(address account) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *L1CrossDomainMessengerUnpaused) (event.Subscription, error) { +// Solidity: event SentMessageExtension1(address indexed sender, uint256 value) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) WatchSentMessageExtension1(opts *bind.WatchOpts, sink chan<- *L1CrossDomainMessengerSentMessageExtension1, sender []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } - logs, sub, err := _L1CrossDomainMessenger.contract.WatchLogs(opts, "Unpaused") + logs, sub, err := _L1CrossDomainMessenger.contract.WatchLogs(opts, "SentMessageExtension1", senderRule) if err != nil { return nil, err } @@ -1605,8 +1472,8 @@ func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) WatchUnpaused(opt select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(L1CrossDomainMessengerUnpaused) - if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "Unpaused", log); err != nil { + event := new(L1CrossDomainMessengerSentMessageExtension1) + if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "SentMessageExtension1", log); err != nil { return err } event.Raw = log @@ -1627,12 +1494,12 @@ func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) WatchUnpaused(opt }), nil } -// ParseUnpaused is a log parse operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// ParseSentMessageExtension1 is a log parse operation binding the contract event 0x8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d546. // -// Solidity: event Unpaused(address account) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) ParseUnpaused(log types.Log) (*L1CrossDomainMessengerUnpaused, error) { - event := new(L1CrossDomainMessengerUnpaused) - if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "Unpaused", log); err != nil { +// Solidity: event SentMessageExtension1(address indexed sender, uint256 value) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerFilterer) ParseSentMessageExtension1(log types.Log) (*L1CrossDomainMessengerSentMessageExtension1, error) { + event := new(L1CrossDomainMessengerSentMessageExtension1) + if err := _L1CrossDomainMessenger.contract.UnpackLog(event, "SentMessageExtension1", log); err != nil { return nil, err } event.Raw = log diff --git a/op-bindings/bindings/l1crossdomainmessenger_more.go b/op-bindings/bindings/l1crossdomainmessenger_more.go index 341ab80d1..a23e6ea79 100644 --- a/op-bindings/bindings/l1crossdomainmessenger_more.go +++ b/op-bindings/bindings/l1crossdomainmessenger_more.go @@ -9,11 +9,11 @@ import ( "github.com/ethereum-optimism/optimism/op-bindings/solc" ) -const L1CrossDomainMessengerStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)1012_storage\"},{\"astId\":1003,\"contract\":\"contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"_paused\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_bool\"},{\"astId\":1004,\"contract\":\"contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_array(t_uint256)1011_storage\"},{\"astId\":1005,\"contract\":\"contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"successfulMessages\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1006,\"contract\":\"contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"xDomainMsgSender\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_address\"},{\"astId\":1007,\"contract\":\"contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"msgNonce\",\"offset\":0,\"slot\":\"103\",\"type\":\"t_uint240\"},{\"astId\":1008,\"contract\":\"contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"failedMessages\",\"offset\":0,\"slot\":\"104\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1009,\"contract\":\"contracts/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"105\",\"type\":\"t_array(t_uint256)1010_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)1010_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[45]\",\"numberOfBytes\":\"1440\"},\"t_array(t_uint256)1011_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\"},\"t_array(t_uint256)1012_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_bytes32,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_bool\"},\"t_uint240\":{\"encoding\":\"inplace\",\"label\":\"uint240\",\"numberOfBytes\":\"30\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" +const L1CrossDomainMessengerStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"spacer_0_0_20\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_address\"},{\"astId\":1001,\"contract\":\"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"_initialized\",\"offset\":20,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1002,\"contract\":\"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"_initializing\",\"offset\":21,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1003,\"contract\":\"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"spacer_1_0_1600\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)50_storage\"},{\"astId\":1004,\"contract\":\"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"spacer_51_0_20\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_address\"},{\"astId\":1005,\"contract\":\"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"spacer_52_0_1568\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_array(t_uint256)49_storage\"},{\"astId\":1006,\"contract\":\"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"spacer_101_0_1\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_bool\"},{\"astId\":1007,\"contract\":\"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"spacer_102_0_1568\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_array(t_uint256)49_storage\"},{\"astId\":1008,\"contract\":\"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"spacer_151_0_32\",\"offset\":0,\"slot\":\"151\",\"type\":\"t_uint256\"},{\"astId\":1009,\"contract\":\"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"spacer_152_0_1568\",\"offset\":0,\"slot\":\"152\",\"type\":\"t_array(t_uint256)49_storage\"},{\"astId\":1010,\"contract\":\"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"spacer_201_0_32\",\"offset\":0,\"slot\":\"201\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1011,\"contract\":\"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"spacer_202_0_32\",\"offset\":0,\"slot\":\"202\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1012,\"contract\":\"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"successfulMessages\",\"offset\":0,\"slot\":\"203\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1013,\"contract\":\"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"xDomainMsgSender\",\"offset\":0,\"slot\":\"204\",\"type\":\"t_address\"},{\"astId\":1014,\"contract\":\"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"msgNonce\",\"offset\":0,\"slot\":\"205\",\"type\":\"t_uint240\"},{\"astId\":1015,\"contract\":\"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"failedMessages\",\"offset\":0,\"slot\":\"206\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1016,\"contract\":\"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"207\",\"type\":\"t_array(t_uint256)42_storage\"},{\"astId\":1017,\"contract\":\"src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger\",\"label\":\"PORTAL\",\"offset\":0,\"slot\":\"249\",\"type\":\"t_contract(OptimismPortal)1018\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)42_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[42]\",\"numberOfBytes\":\"1344\",\"base\":\"t_uint256\"},\"t_array(t_uint256)49_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\",\"base\":\"t_uint256\"},\"t_array(t_uint256)50_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\",\"base\":\"t_uint256\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_contract(OptimismPortal)1018\":{\"encoding\":\"inplace\",\"label\":\"contract OptimismPortal\",\"numberOfBytes\":\"20\"},\"t_mapping(t_bytes32,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_bool\"},\"t_uint240\":{\"encoding\":\"inplace\",\"label\":\"uint240\",\"numberOfBytes\":\"30\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" var L1CrossDomainMessengerStorageLayout = new(solc.StorageLayout) -var L1CrossDomainMessengerDeployedBin = "0x60806040526004361061015f5760003560e01c80636e296e45116100c0578063a4e7f8bd11610074578063b28ade2511610059578063b28ade251461039e578063d764ad0b146103be578063ecc70428146103d157600080fd5b8063a4e7f8bd1461033e578063b1b1b2091461036e57600080fd5b806383a74074116100a557806383a74074146102f35780638cbeeef2146102575780639fce812c1461030a57600080fd5b80636e296e45146102c95780638129fc1c146102de57600080fd5b80633f827a5a1161011757806354fd4d50116100fc57806354fd4d501461026d5780635644cfdf1461028f5780635c975abb146102a557600080fd5b80633f827a5a1461022f5780634c1d6a691461025757600080fd5b80630ff754ea116101485780630ff754ea146101ac5780632828d7e8146102055780633dbb202b1461021a57600080fd5b8063028f85f7146101645780630c56849814610197575b600080fd5b34801561017057600080fd5b50610179601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101a357600080fd5b50610179603f81565b3480156101b857600080fd5b506101e07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161018e565b34801561021157600080fd5b50610179604081565b61022d610228366004611772565b61040f565b005b34801561023b57600080fd5b50610244600081565b60405161ffff909116815260200161018e565b34801561026357600080fd5b50610179619c4081565b34801561027957600080fd5b506102826105fd565b60405161018e9190611853565b34801561029b57600080fd5b5061017961138881565b3480156102b157600080fd5b5060335460ff165b604051901515815260200161018e565b3480156102d557600080fd5b506101e06106a0565b3480156102ea57600080fd5b5061022d61078c565b3480156102ff57600080fd5b5061017962030d4081565b34801561031657600080fd5b506101e07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034a57600080fd5b506102b961035936600461186d565b60686020526000908152604090205460ff1681565b34801561037a57600080fd5b506102b961038936600461186d565b60656020526000908152604090205460ff1681565b3480156103aa57600080fd5b506101796103b9366004611886565b61091e565b61022d6103cc3660046118da565b61098c565b3480156103dd57600080fd5b506067547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660405190815260200161018e565b6105277f000000000000000000000000000000000000000000000000000000000000000061043e85858561091e565b347fd764ad0b000000000000000000000000000000000000000000000000000000006104896067547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b338a34898c8c6040516024016104a597969594939291906119a9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261113f565b3373ffffffffffffffffffffffffffffffffffffffff85167fdd28cef75ff18fb538e43317144469f339702f973eace2bc808f2acc37db310e34868661058c6067547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b8760405161059e959493929190611a08565b60405180910390a35050606780547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60606106287f00000000000000000000000000000000000000000000000000000000000000006111f4565b6106517f00000000000000000000000000000000000000000000000000000000000000006111f4565b61067a7f00000000000000000000000000000000000000000000000000000000000000006111f4565b60405160200161068c93929190611a40565b604051602081830303815290604052905090565b60665460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21530161076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084015b60405180910390fd5b5060665473ffffffffffffffffffffffffffffffffffffffff1690565b600054610100900460ff16158080156107ac5750600054600160ff909116105b806107c65750303b1580156107c6575060005460ff166001145b610852576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610766565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156108b057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6108b86112b2565b801561091b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6000611388619c4080603f61093a604063ffffffff8816611ae5565b6109449190611b15565b61094f601088611ae5565b61095c9062030d40611b63565b6109669190611b63565b6109709190611b63565b61097a9190611b63565b6109849190611b63565b949350505050565b60f087901c60018110610a47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206d6573736167657320697320737570706f7274656420617420746860648201527f69732074696d6500000000000000000000000000000000000000000000000000608482015260a401610766565b6000610a8d898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061137792505050565b9050610a9761139a565b15610acf57853414610aab57610aab611b8f565b60008181526068602052604090205460ff1615610aca57610aca611b8f565b610c21565b3415610b83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610766565b60008181526068602052604090205460ff16610c21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610766565b610c2a876114be565b15610cdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610766565b60008181526065602052604090205460ff1615610d7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610766565b610d9d85610d8e611388619c40611b63565b67ffffffffffffffff16611535565b1580610dc3575060665473ffffffffffffffffffffffffffffffffffffffff1661dead14155b15610edc5760008181526068602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201610ed5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610766565b5050611115565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a161790556000610f6d88619c405a610f309190611bbe565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061155392505050565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156110045760008281526065602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2611111565b60008281526068602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610766565b5050505b50505050505050565b905090565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e9e05c429084906111bc908890839089906000908990600401611bd5565b6000604051808303818588803b1580156111d557600080fd5b505af11580156111e9573d6000803e3d6000fd5b505050505050505050565b606060006112018361156d565b600101905060008167ffffffffffffffff81111561122157611221611c2d565b6040519080825280601f01601f19166020018201604052801561124b576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461125557509392505050565b600054610100900460ff16611349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610766565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055565b600061138787878787878761164f565b8051906020012090509695505050505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561111e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639bf62d826040518163ffffffff1660e01b8152600401602060405180830381865afa15801561147e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a29190611c5c565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff821630148061152f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115b6577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115e2576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061160057662386f26fc10000830492506010015b6305f5e1008310611618576305f5e100830492506008015b612710831061162c57612710830492506004015b6064831061163e576064830492506002015b600a831061152f5760010192915050565b606086868686868660405160240161166c96959493929190611c79565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461091b57600080fd5b60008083601f84011261172257600080fd5b50813567ffffffffffffffff81111561173a57600080fd5b60208301915083602082850101111561175257600080fd5b9250929050565b803563ffffffff8116811461176d57600080fd5b919050565b6000806000806060858703121561178857600080fd5b8435611793816116ee565b9350602085013567ffffffffffffffff8111156117af57600080fd5b6117bb87828801611710565b90945092506117ce905060408601611759565b905092959194509250565b60005b838110156117f45781810151838201526020016117dc565b83811115611803576000848401525b50505050565b600081518084526118218160208601602086016117d9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006118666020830184611809565b9392505050565b60006020828403121561187f57600080fd5b5035919050565b60008060006040848603121561189b57600080fd5b833567ffffffffffffffff8111156118b257600080fd5b6118be86828701611710565b90945092506118d1905060208501611759565b90509250925092565b600080600080600080600060c0888a0312156118f557600080fd5b873596506020880135611907816116ee565b95506040880135611917816116ee565b9450606088013593506080880135925060a088013567ffffffffffffffff81111561194157600080fd5b61194d8a828b01611710565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a08301526119fb60c083018486611960565b9998505050505050505050565b858152608060208201526000611a22608083018688611960565b905083604083015263ffffffff831660608301529695505050505050565b60008451611a528184602089016117d9565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611a8e816001850160208a016117d9565b60019201918201528351611aa98160028401602088016117d9565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611b0c57611b0c611ab6565b02949350505050565b600067ffffffffffffffff80841680611b57577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611b8657611b86611ab6565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611bd057611bd0611ab6565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a060808201526000611c2260a0830184611809565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215611c6e57600080fd5b8151611866816116ee565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611cc460c0830184611809565b9897505050505050505056fea164736f6c634300080f000a" +var L1CrossDomainMessengerDeployedBin = "0x60806040526004361061015f5760003560e01c80636e296e45116100c0578063b1b1b20911610074578063c4d66de811610059578063c4d66de8146103ed578063d764ad0b1461040d578063ecc704281461042057600080fd5b8063b1b1b2091461039d578063b28ade25146103cd57600080fd5b80638cbeeef2116100a55780638cbeeef2146102505780639fce812c14610329578063a4e7f8bd1461035d57600080fd5b80636e296e45146102fd57806383a740741461031257600080fd5b80633f827a5a1161011757806354fd4d50116100fc57806354fd4d50146102665780635644cfdf146102bc5780636425666b146102d257600080fd5b80633f827a5a146102285780634c1d6a691461025057600080fd5b80630ff754ea116101485780630ff754ea146101ac5780632828d7e8146101fe5780633dbb202b1461021357600080fd5b8063028f85f7146101645780630c56849814610197575b600080fd5b34801561017057600080fd5b50610179601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101a357600080fd5b50610179603f81565b3480156101b857600080fd5b5060f9546101d99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161018e565b34801561020a57600080fd5b50610179604081565b6102266102213660046117ba565b610485565b005b34801561023457600080fd5b5061023d600181565b60405161ffff909116815260200161018e565b34801561025c57600080fd5b50610179619c4081565b34801561027257600080fd5b506102af6040518060400160405280600581526020017f312e372e3000000000000000000000000000000000000000000000000000000081525081565b60405161018e919061188c565b3480156102c857600080fd5b5061017961138881565b3480156102de57600080fd5b5060f95473ffffffffffffffffffffffffffffffffffffffff166101d9565b34801561030957600080fd5b506101d96106e9565b34801561031e57600080fd5b5061017962030d4081565b34801561033557600080fd5b506101d97f000000000000000000000000000000000000000000000000000000000000000081565b34801561036957600080fd5b5061038d6103783660046118a6565b60ce6020526000908152604090205460ff1681565b604051901515815260200161018e565b3480156103a957600080fd5b5061038d6103b83660046118a6565b60cb6020526000908152604090205460ff1681565b3480156103d957600080fd5b506101796103e83660046118bf565b6107d5565b3480156103f957600080fd5b50610226610408366004611913565b610843565b61022661041b366004611930565b610a47565b34801561042c57600080fd5b5061047760cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b60405190815260200161018e565b6105be7f00000000000000000000000000000000000000000000000000000000000000006104b48585856107d5565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061052060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161053c97969594939291906119ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526112d3565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561064360cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610655959493929190611a5e565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2153016107b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084015b60405180910390fd5b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f6107f1604063ffffffff8816611adb565b6107fb9190611b0b565b610806601088611adb565b6108139062030d40611b59565b61081d9190611b59565b6108279190611b59565b6108319190611b59565b61083b9190611b59565b949350505050565b6000546003907501000000000000000000000000000000000000000000900460ff16158015610891575060005460ff8083167401000000000000000000000000000000000000000090920416105b61091d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107af565b6000805475010000000000000000000000000000000000000000007fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff9091167401000000000000000000000000000000000000000060ff8516027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff161717905560f980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556109e561136c565b600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60f087901c60028110610b02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016107af565b8061ffff16600003610bf7576000610b53878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f9250611445915050565b600081815260cb602052604090205490915060ff1615610bf5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016107af565b505b6000610c3d898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061146492505050565b9050610c47611487565b15610c7f57853414610c5b57610c5b611b85565b600081815260ce602052604090205460ff1615610c7a57610c7a611b85565b610dd1565b3415610d33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016107af565b600081815260ce602052604090205460ff16610dd1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016107af565b610dda8761157d565b15610e8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016107af565b600081815260cb602052604090205460ff1615610f2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016107af565b610f4d85610f3e611388619c40611b59565b67ffffffffffffffff166115c3565b1580610f73575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561108c57600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016107af565b50506112c5565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061111d88619c405a6110e09190611bb4565b8988888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506115e192505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156111b457600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26112c1565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016112c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016107af565b5050505b50505050505050565b905090565b60f9546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c42908490611334908890839089906000908990600401611bcb565b6000604051808303818588803b15801561134d57600080fd5b505af1158015611361573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107af565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055565b6000611453858585856115fb565b805190602001209050949350505050565b6000611474878787878787611694565b8051906020012090509695505050505050565b60f95460009073ffffffffffffffffffffffffffffffffffffffff16331480156112ce575060f954604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116931691639bf62d829160048083019260209291908290030181865afa15801561153d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115619190611c23565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff82163014806115bd575060f95473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b6060848484846040516024016116149493929190611c40565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b60608686868686866040516024016116b196959493929190611c8a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461175557600080fd5b50565b60008083601f84011261176a57600080fd5b50813567ffffffffffffffff81111561178257600080fd5b60208301915083602082850101111561179a57600080fd5b9250929050565b803563ffffffff811681146117b557600080fd5b919050565b600080600080606085870312156117d057600080fd5b84356117db81611733565b9350602085013567ffffffffffffffff8111156117f757600080fd5b61180387828801611758565b90945092506118169050604086016117a1565b905092959194509250565b6000815180845260005b818110156118475760208185018101518683018201520161182b565b81811115611859576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061189f6020830184611821565b9392505050565b6000602082840312156118b857600080fd5b5035919050565b6000806000604084860312156118d457600080fd5b833567ffffffffffffffff8111156118eb57600080fd5b6118f786828701611758565b909450925061190a9050602085016117a1565b90509250925092565b60006020828403121561192557600080fd5b813561189f81611733565b600080600080600080600060c0888a03121561194b57600080fd5b87359650602088013561195d81611733565b9550604088013561196d81611733565b9450606088013593506080880135925060a088013567ffffffffffffffff81111561199757600080fd5b6119a38a828b01611758565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611a5160c0830184866119b6565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611a8e6080830186886119b6565b905083604083015263ffffffff831660608301529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611b0257611b02611aac565b02949350505050565b600067ffffffffffffffff80841680611b4d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611b7c57611b7c611aac565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611bc657611bc6611aac565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a060808201526000611c1860a0830184611821565b979650505050505050565b600060208284031215611c3557600080fd5b815161189f81611733565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152611c796080830185611821565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611cd560c0830184611821565b9897505050505050505056fea164736f6c634300080f000a" func init() { if err := json.Unmarshal([]byte(L1CrossDomainMessengerStorageLayoutJSON), L1CrossDomainMessengerStorageLayout); err != nil { diff --git a/op-bindings/bindings/l1erc721bridge.go b/op-bindings/bindings/l1erc721bridge.go index b4499f9a9..f2431a632 100644 --- a/op-bindings/bindings/l1erc721bridge.go +++ b/op-bindings/bindings/l1erc721bridge.go @@ -26,13 +26,12 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription - _ = abi.ConvertType ) // L1ERC721BridgeMetaData contains all meta data concerning the L1ERC721Bridge contract. var L1ERC721BridgeMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_messenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_otherBridge\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC721BridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC721BridgeInitiated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSENGER\",\"outputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_BRIDGE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC721\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC721To\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"deposits\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeERC721\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x61012060405234801561001157600080fd5b5060405162001413380380620014138339810160408190526100329161015a565b600160008084846001600160a01b0382166100a95760405162461bcd60e51b815260206004820152602c60248201527f4552433732314272696467653a206d657373656e6765722063616e6e6f74206260448201526b65206164647265737328302960a01b60648201526084015b60405180910390fd5b6001600160a01b0381166101175760405162461bcd60e51b815260206004820152602f60248201527f4552433732314272696467653a206f74686572206272696467652063616e6e6f60448201526e74206265206164647265737328302960881b60648201526084016100a0565b6001600160a01b039182166080521660a05260c09290925260e052610100525061018d9050565b80516001600160a01b038116811461015557600080fd5b919050565b6000806040838503121561016d57600080fd5b6101768361013e565b91506101846020840161013e565b90509250929050565b60805160a05160c05160e0516101005161121e620001f560003960006102970152600061026e01526000610245015260008181610111015281816103230152610aaa01526000818161015d015281816102f90152818161035a0152610a7b015261121e6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063761f44931161005b578063761f4493146100f95780637f46ddb21461010c578063927ede2d14610158578063aa5574521461017f57600080fd5b80633687011a1461008257806354fd4d50146100975780635d93a3fc146100b5575b600080fd5b610095610090366004610dbd565b610192565b005b61009f61023e565b6040516100ac9190610eba565b60405180910390f35b6100e96100c3366004610ed4565b603160209081526000938452604080852082529284528284209052825290205460ff1681565b60405190151581526020016100ac565b610095610107366004610f15565b6102e1565b6101337f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ac565b6101337f000000000000000000000000000000000000000000000000000000000000000081565b61009561018d366004610fad565b610762565b333b15610226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b610236868633338888888861081e565b505050505050565b60606102697f0000000000000000000000000000000000000000000000000000000000000000610b95565b6102927f0000000000000000000000000000000000000000000000000000000000000000610b95565b6102bb7f0000000000000000000000000000000000000000000000000000000000000000610b95565b6040516020016102cd93929190611024565b604051602081830303815290604052905090565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156103ff57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e7919061109a565b73ffffffffffffffffffffffffffffffffffffffff16145b61048b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f746865722062726964676500606482015260840161021d565b3073ffffffffffffffffffffffffffffffffffffffff881603610530576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c314552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c6600000000000000000000000000000000000000000000606482015260840161021d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152603160209081526040808320938a1683529281528282208683529052205460ff1615156001146105ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4c314552433732314272696467653a20546f6b656e204944206973206e6f742060448201527f657363726f77656420696e20746865204c312042726964676500000000000000606482015260840161021d565b73ffffffffffffffffffffffffffffffffffffffff87811660008181526031602090815260408083208b8616845282528083208884529091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152918616602483015260448201859052906342842e0e90606401600060405180830381600087803b1580156106bf57600080fd5b505af11580156106d3573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac878787876040516107519493929190611100565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516610805576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f74206265206164647265737328302900000000000000000000000000000000606482015260840161021d565b610815878733888888888861081e565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff87166108c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c314552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f742062652061646472657373283029000000000000000000000000000000606482015260840161021d565b600063761f449360e01b888a89898988886040516024016108e89796959493929190611140565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000959095169490941790935273ffffffffffffffffffffffffffffffffffffffff8c81166000818152603186528381208e8416825286528381208b82529095529382902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590517f23b872dd000000000000000000000000000000000000000000000000000000008152908a166004820152306024820152604481018890529092506323b872dd90606401600060405180830381600087803b158015610a2857600080fd5b505af1158015610a3c573d6000803e3d6000fd5b50506040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169250633dbb202b9150610ad6907f0000000000000000000000000000000000000000000000000000000000000000908590899060040161119d565b600060405180830381600087803b158015610af057600080fd5b505af1158015610b04573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a589898888604051610b829493929190611100565b60405180910390a4505050505050505050565b60606000610ba283610c53565b600101905060008167ffffffffffffffff811115610bc257610bc26111e2565b6040519080825280601f01601f191660200182016040528015610bec576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084610bf657509392505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610c9c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610cc8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ce657662386f26fc10000830492506010015b6305f5e1008310610cfe576305f5e100830492506008015b6127108310610d1257612710830492506004015b60648310610d24576064830492506002015b600a8310610d30576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff81168114610d5857600080fd5b50565b803563ffffffff81168114610d6f57600080fd5b919050565b60008083601f840112610d8657600080fd5b50813567ffffffffffffffff811115610d9e57600080fd5b602083019150836020828501011115610db657600080fd5b9250929050565b60008060008060008060a08789031215610dd657600080fd5b8635610de181610d36565b95506020870135610df181610d36565b945060408701359350610e0660608801610d5b565b9250608087013567ffffffffffffffff811115610e2257600080fd5b610e2e89828a01610d74565b979a9699509497509295939492505050565b60005b83811015610e5b578181015183820152602001610e43565b83811115610e6a576000848401525b50505050565b60008151808452610e88816020860160208601610e40565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610ecd6020830184610e70565b9392505050565b600080600060608486031215610ee957600080fd5b8335610ef481610d36565b92506020840135610f0481610d36565b929592945050506040919091013590565b600080600080600080600060c0888a031215610f3057600080fd5b8735610f3b81610d36565b96506020880135610f4b81610d36565b95506040880135610f5b81610d36565b94506060880135610f6b81610d36565b93506080880135925060a088013567ffffffffffffffff811115610f8e57600080fd5b610f9a8a828b01610d74565b989b979a50959850939692959293505050565b600080600080600080600060c0888a031215610fc857600080fd5b8735610fd381610d36565b96506020880135610fe381610d36565b95506040880135610ff381610d36565b94506060880135935061100860808901610d5b565b925060a088013567ffffffffffffffff811115610f8e57600080fd5b60008451611036818460208901610e40565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611072816001850160208a01610e40565b6001920191820152835161108d816002840160208801610e40565b0160020195945050505050565b6000602082840312156110ac57600080fd5b8151610ecd81610d36565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff851681528360208201526060604082015260006111366060830184866110b7565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a083015261119060c0830184866110b7565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006111cc6060830185610e70565b905063ffffffff83166040830152949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC721BridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC721BridgeInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSENGER\",\"outputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_BRIDGE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC721\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC721To\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"deposits\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeERC721\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"_messenger\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messenger\",\"outputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"otherBridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60a060405234801561001057600080fd5b50734200000000000000000000000000000000000014610034565b60405180910390fd5b6001600160a01b031660805261004a600061004f565b6101cb565b600054600390610100900460ff16158015610071575060005460ff8083169116105b6100d45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161002b565b6000805461ffff191660ff8316176101001790556100f182610136565b6000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b600054610100900460ff166101a15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161002b565b600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6080516112116101fb600039600081816101cd0152818161023b015281816103350152610bf101526112116000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80637f46ddb211610076578063aa5574521161005b578063aa55745214610213578063c4d66de814610226578063c89701a21461023957600080fd5b80637f46ddb2146101c8578063927ede2d146101ef57600080fd5b806354fd4d50116100a757806354fd4d50146101285780635d93a3fc14610171578063761f4493146101b557600080fd5b80633687011a146100c35780633cb747bf146100d8575b600080fd5b6100d66100d1366004610e47565b61025f565b005b6000546100fe9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101646040518060400160405280600581526020017f312e342e3000000000000000000000000000000000000000000000000000000081525081565b60405161011f9190610f35565b6101a561017f366004610f4f565b603160209081526000938452604080852082529284528284209052825290205460ff1681565b604051901515815260200161011f565b6100d66101c3366004610f90565b61030b565b6100fe7f000000000000000000000000000000000000000000000000000000000000000081565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff166100fe565b6100d6610221366004611028565b610776565b6100d661023436600461109f565b610832565b7f00000000000000000000000000000000000000000000000000000000000000006100fe565b333b156102f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b610303868633338888888861097c565b505050505050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff163314801561041357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fb91906110bc565b73ffffffffffffffffffffffffffffffffffffffff16145b61049f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f74686572206272696467650060648201526084016102ea565b3073ffffffffffffffffffffffffffffffffffffffff881603610544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c314552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c660000000000000000000000000000000000000000000060648201526084016102ea565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152603160209081526040808320938a1683529281528282208683529052205460ff161515600114610613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4c314552433732314272696467653a20546f6b656e204944206973206e6f742060448201527f657363726f77656420696e20746865204c31204272696467650000000000000060648201526084016102ea565b73ffffffffffffffffffffffffffffffffffffffff87811660008181526031602090815260408083208b8616845282528083208884529091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152918616602483015260448201859052906342842e0e90606401600060405180830381600087803b1580156106d357600080fd5b505af11580156106e7573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac878787876040516107659493929190611122565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516610819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f7420626520616464726573732830290000000000000000000000000000000060648201526084016102ea565b610829878733888888888861097c565b50505050505050565b600054600390610100900460ff16158015610854575060005460ff8083169116105b6108e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016102ea565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff83161761010017905561091a82610cdc565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff8716610a1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c314552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f74206265206164647265737328302900000000000000000000000000000060648201526084016102ea565b600063761f449360e01b888a8989898888604051602401610a469796959493929190611162565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000959095169490941790935273ffffffffffffffffffffffffffffffffffffffff8c81166000818152603186528381208e8416825286528381208b82529095529382902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590517f23b872dd000000000000000000000000000000000000000000000000000000008152908a166004820152306024820152604481018890529092506323b872dd90606401600060405180830381600087803b158015610b8657600080fd5b505af1158015610b9a573d6000803e3d6000fd5b50506000546040517f3dbb202b0000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff169250633dbb202b9150610c1d907f000000000000000000000000000000000000000000000000000000000000000090859089906004016111bf565b600060405180830381600087803b158015610c3757600080fd5b505af1158015610c4b573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a589898888604051610cc99493929190611122565b60405180910390a4505050505050505050565b600054610100900460ff16610d73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016102ea565b6000805473ffffffffffffffffffffffffffffffffffffffff90921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff81168114610de257600080fd5b50565b803563ffffffff81168114610df957600080fd5b919050565b60008083601f840112610e1057600080fd5b50813567ffffffffffffffff811115610e2857600080fd5b602083019150836020828501011115610e4057600080fd5b9250929050565b60008060008060008060a08789031215610e6057600080fd5b8635610e6b81610dc0565b95506020870135610e7b81610dc0565b945060408701359350610e9060608801610de5565b9250608087013567ffffffffffffffff811115610eac57600080fd5b610eb889828a01610dfe565b979a9699509497509295939492505050565b6000815180845260005b81811015610ef057602081850181015186830182015201610ed4565b81811115610f02576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610f486020830184610eca565b9392505050565b600080600060608486031215610f6457600080fd5b8335610f6f81610dc0565b92506020840135610f7f81610dc0565b929592945050506040919091013590565b600080600080600080600060c0888a031215610fab57600080fd5b8735610fb681610dc0565b96506020880135610fc681610dc0565b95506040880135610fd681610dc0565b94506060880135610fe681610dc0565b93506080880135925060a088013567ffffffffffffffff81111561100957600080fd5b6110158a828b01610dfe565b989b979a50959850939692959293505050565b600080600080600080600060c0888a03121561104357600080fd5b873561104e81610dc0565b9650602088013561105e81610dc0565b9550604088013561106e81610dc0565b94506060880135935061108360808901610de5565b925060a088013567ffffffffffffffff81111561100957600080fd5b6000602082840312156110b157600080fd5b8135610f4881610dc0565b6000602082840312156110ce57600080fd5b8151610f4881610dc0565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff851681528360208201526060604082015260006111586060830184866110d9565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a08301526111b260c0830184866110d9565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006111ee6060830185610eca565b905063ffffffff8316604083015294935050505056fea164736f6c634300080f000a", } // L1ERC721BridgeABI is the input ABI used to generate the binding from. @@ -44,7 +43,7 @@ var L1ERC721BridgeABI = L1ERC721BridgeMetaData.ABI var L1ERC721BridgeBin = L1ERC721BridgeMetaData.Bin // DeployL1ERC721Bridge deploys a new Ethereum contract, binding an instance of L1ERC721Bridge to it. -func DeployL1ERC721Bridge(auth *bind.TransactOpts, backend bind.ContractBackend, _messenger common.Address, _otherBridge common.Address) (common.Address, *types.Transaction, *L1ERC721Bridge, error) { +func DeployL1ERC721Bridge(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *L1ERC721Bridge, error) { parsed, err := L1ERC721BridgeMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -53,7 +52,7 @@ func DeployL1ERC721Bridge(auth *bind.TransactOpts, backend bind.ContractBackend, return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(L1ERC721BridgeBin), backend, _messenger, _otherBridge) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(L1ERC721BridgeBin), backend) if err != nil { return common.Address{}, nil, nil, err } @@ -157,11 +156,11 @@ func NewL1ERC721BridgeFilterer(address common.Address, filterer bind.ContractFil // bindL1ERC721Bridge binds a generic wrapper to an already deployed contract. func bindL1ERC721Bridge(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := L1ERC721BridgeMetaData.GetAbi() + parsed, err := abi.JSON(strings.NewReader(L1ERC721BridgeABI)) if err != nil { return nil, err } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and @@ -295,6 +294,68 @@ func (_L1ERC721Bridge *L1ERC721BridgeCallerSession) Deposits(arg0 common.Address return _L1ERC721Bridge.Contract.Deposits(&_L1ERC721Bridge.CallOpts, arg0, arg1, arg2) } +// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. +// +// Solidity: function messenger() view returns(address) +func (_L1ERC721Bridge *L1ERC721BridgeCaller) Messenger(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L1ERC721Bridge.contract.Call(opts, &out, "messenger") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. +// +// Solidity: function messenger() view returns(address) +func (_L1ERC721Bridge *L1ERC721BridgeSession) Messenger() (common.Address, error) { + return _L1ERC721Bridge.Contract.Messenger(&_L1ERC721Bridge.CallOpts) +} + +// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. +// +// Solidity: function messenger() view returns(address) +func (_L1ERC721Bridge *L1ERC721BridgeCallerSession) Messenger() (common.Address, error) { + return _L1ERC721Bridge.Contract.Messenger(&_L1ERC721Bridge.CallOpts) +} + +// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. +// +// Solidity: function otherBridge() view returns(address) +func (_L1ERC721Bridge *L1ERC721BridgeCaller) OtherBridge(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L1ERC721Bridge.contract.Call(opts, &out, "otherBridge") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. +// +// Solidity: function otherBridge() view returns(address) +func (_L1ERC721Bridge *L1ERC721BridgeSession) OtherBridge() (common.Address, error) { + return _L1ERC721Bridge.Contract.OtherBridge(&_L1ERC721Bridge.CallOpts) +} + +// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. +// +// Solidity: function otherBridge() view returns(address) +func (_L1ERC721Bridge *L1ERC721BridgeCallerSession) OtherBridge() (common.Address, error) { + return _L1ERC721Bridge.Contract.OtherBridge(&_L1ERC721Bridge.CallOpts) +} + // Version is a free data retrieval call binding the contract method 0x54fd4d50. // // Solidity: function version() view returns(string) @@ -389,6 +450,27 @@ func (_L1ERC721Bridge *L1ERC721BridgeTransactorSession) FinalizeBridgeERC721(_lo return _L1ERC721Bridge.Contract.FinalizeBridgeERC721(&_L1ERC721Bridge.TransactOpts, _localToken, _remoteToken, _from, _to, _tokenId, _extraData) } +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _messenger) returns() +func (_L1ERC721Bridge *L1ERC721BridgeTransactor) Initialize(opts *bind.TransactOpts, _messenger common.Address) (*types.Transaction, error) { + return _L1ERC721Bridge.contract.Transact(opts, "initialize", _messenger) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _messenger) returns() +func (_L1ERC721Bridge *L1ERC721BridgeSession) Initialize(_messenger common.Address) (*types.Transaction, error) { + return _L1ERC721Bridge.Contract.Initialize(&_L1ERC721Bridge.TransactOpts, _messenger) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _messenger) returns() +func (_L1ERC721Bridge *L1ERC721BridgeTransactorSession) Initialize(_messenger common.Address) (*types.Transaction, error) { + return _L1ERC721Bridge.Contract.Initialize(&_L1ERC721Bridge.TransactOpts, _messenger) +} + // L1ERC721BridgeERC721BridgeFinalizedIterator is returned from FilterERC721BridgeFinalized and is used to iterate over the raw logs and unpacked data for ERC721BridgeFinalized events raised by the L1ERC721Bridge contract. type L1ERC721BridgeERC721BridgeFinalizedIterator struct { Event *L1ERC721BridgeERC721BridgeFinalized // Event containing the contract specifics and raw log @@ -718,3 +800,137 @@ func (_L1ERC721Bridge *L1ERC721BridgeFilterer) ParseERC721BridgeInitiated(log ty event.Raw = log return event, nil } + +// L1ERC721BridgeInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the L1ERC721Bridge contract. +type L1ERC721BridgeInitializedIterator struct { + Event *L1ERC721BridgeInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L1ERC721BridgeInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L1ERC721BridgeInitialized) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L1ERC721BridgeInitialized) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L1ERC721BridgeInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L1ERC721BridgeInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L1ERC721BridgeInitialized represents a Initialized event raised by the L1ERC721Bridge contract. +type L1ERC721BridgeInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_L1ERC721Bridge *L1ERC721BridgeFilterer) FilterInitialized(opts *bind.FilterOpts) (*L1ERC721BridgeInitializedIterator, error) { + + logs, sub, err := _L1ERC721Bridge.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &L1ERC721BridgeInitializedIterator{contract: _L1ERC721Bridge.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_L1ERC721Bridge *L1ERC721BridgeFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *L1ERC721BridgeInitialized) (event.Subscription, error) { + + logs, sub, err := _L1ERC721Bridge.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: + // New log arrived, parse the event and forward to the user + event := new(L1ERC721BridgeInitialized) + if err := _L1ERC721Bridge.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 +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_L1ERC721Bridge *L1ERC721BridgeFilterer) ParseInitialized(log types.Log) (*L1ERC721BridgeInitialized, error) { + event := new(L1ERC721BridgeInitialized) + if err := _L1ERC721Bridge.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-bindings/bindings/l1standardbridge.go b/op-bindings/bindings/l1standardbridge.go index 9984c59bf..c37716de8 100644 --- a/op-bindings/bindings/l1standardbridge.go +++ b/op-bindings/bindings/l1standardbridge.go @@ -26,13 +26,12 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription - _ = abi.ConvertType ) // L1StandardBridgeMetaData contains all meta data concerning the L1StandardBridge contract. var L1StandardBridgeMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_messenger\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC20BridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC20BridgeInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ETHBridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ETHBridgeInitiated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSENGER\",\"outputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_BRIDGE\",\"outputs\":[{\"internalType\":\"contractStandardBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC20To\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeETHTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"deposits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x61012060405234801561001157600080fd5b5060405162002389380380620023898339810160408190526100329161006b565b6001600160a01b031660805273420000000000000000000000000000000000000960a052600160c052600060e08190526101005261009b565b60006020828403121561007d57600080fd5b81516001600160a01b038116811461009457600080fd5b9392505050565b60805160a05160c05160e0516101005161225c6200012d6000396000610eed01526000610ec401526000610e9b0152600081816101fd015281816104090152818161055501528181610a0e015261148e0152600081816102b9015281816103cc0152818161052b0152818161058c015281816109e401528181610a4501528181610c840152611452015261225c6000f3fe6080604052600436106100b55760003560e01c80637f46ddb2116100695780638f601f661161004e5780638f601f6614610264578063927ede2d146102a7578063e11013dd146102db57600080fd5b80637f46ddb2146101eb578063870876231461024457600080fd5b80631635f5fd1161009a5780631635f5fd1461018d578063540abf73146101a057806354fd4d50146101c057600080fd5b80630166a07a1461015a57806309fc88431461017a57600080fd5b3661015557333b156101345760405162461bcd60e51b815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61015333333462030d40604051806020016040528060008152506102ee565b005b600080fd5b34801561016657600080fd5b50610153610175366004611b82565b610513565b610153610188366004611c33565b61090f565b61015361019b366004611c86565b6109cc565b3480156101ac57600080fd5b506101536101bb366004611cf9565b610e46565b3480156101cc57600080fd5b506101d5610e94565b6040516101e29190611de6565b60405180910390f35b3480156101f757600080fd5b5061021f7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e2565b34801561025057600080fd5b5061015361025f366004611df9565b610f37565b34801561027057600080fd5b5061029961027f366004611e7c565b600060208181529281526040808220909352908152205481565b6040519081526020016101e2565b3480156102b357600080fd5b5061021f7f000000000000000000000000000000000000000000000000000000000000000081565b6101536102e9366004611eb5565b610ff1565b8234146103635760405162461bcd60e51b815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161012b565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af585846040516103c2929190611f18565b60405180910390a37f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633dbb202b847f0000000000000000000000000000000000000000000000000000000000000000631635f5fd60e01b898989886040516024016104479493929190611f31565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526104da92918890600401611f7a565b6000604051808303818588803b1580156104f357600080fd5b505af1158015610507573d6000803e3d6000fd5b50505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561063157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106199190611fbf565b73ffffffffffffffffffffffffffffffffffffffff16145b6106c95760405162461bcd60e51b815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161012b565b6106d28761103a565b15610806576106e1878761106c565b6107795760405162461bcd60e51b815260206004820152604760248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204b726f6d61204d696e7461626c65204552433230206c6f636160648201527f6c20746f6b656e00000000000000000000000000000000000000000000000000608482015260a40161012b565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b50505050610884565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260208181526040808320938a168352929052205461084290849061200b565b73ffffffffffffffffffffffffffffffffffffffff808916600081815260208181526040808320948c1683529390529190912091909155610884908585611113565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd878787876040516108fe949392919061206b565b60405180910390a450505050505050565b333b156109845760405162461bcd60e51b815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161012b565b6109c73333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506102ee92505050565b505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148015610aea57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad29190611fbf565b73ffffffffffffffffffffffffffffffffffffffff16145b610b825760405162461bcd60e51b815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161012b565b823414610bf75760405162461bcd60e51b815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161012b565b3073ffffffffffffffffffffffffffffffffffffffff851603610c825760405162461bcd60e51b815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161012b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d435760405162461bcd60e51b815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161012b565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d858585604051610da4939291906120a1565b60405180910390a36000610dc9855a86604051806020016040528060008152506111e7565b905080610e3e5760405162461bcd60e51b815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161012b565b505050505050565b610e8b87873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061120392505050565b50505050505050565b6060610ebf7f000000000000000000000000000000000000000000000000000000000000000061159e565b610ee87f000000000000000000000000000000000000000000000000000000000000000061159e565b610f117f000000000000000000000000000000000000000000000000000000000000000061159e565b604051602001610f23939291906120c4565b604051602081830303815290604052905090565b333b15610fac5760405162461bcd60e51b815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161012b565b610e3e86863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061120392505050565b6110343385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506102ee92505050565b50505050565b6000611066827f30a0c5a90000000000000000000000000000000000000000000000000000000061165c565b92915050565b60008273ffffffffffffffffffffffffffffffffffffffff1663033964be6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dd9190611fbf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614905092915050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109c79084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261167f565b600080600080845160208601878a8af19150505b949350505050565b61120c8761103a565b156113405761121b878761106c565b6112b35760405162461bcd60e51b815260206004820152604760248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204b726f6d61204d696e7461626c65204552433230206c6f636160648201527f6c20746f6b656e00000000000000000000000000000000000000000000000000608482015260a40161012b565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561132357600080fd5b505af1158015611337573d6000803e3d6000fd5b505050506113d0565b61136273ffffffffffffffffffffffffffffffffffffffff8816863086611774565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260208181526040808320938a168352929052205461139e90849061213a565b73ffffffffffffffffffffffffffffffffffffffff808916600090815260208181526040808320938b16835292905220555b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf87878660405161144893929190612152565b60405180910390a47f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633dbb202b7f0000000000000000000000000000000000000000000000000000000000000000630166a07a60e01b898b8a8a8a896040516024016114d096959493929190612187565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261156392918790600401611f7a565b600060405180830381600087803b15801561157d57600080fd5b505af1158015611591573d6000803e3d6000fd5b5050505050505050505050565b606060006115ab836117d2565b600101905060008167ffffffffffffffff8111156115cb576115cb6121e2565b6040519080825280601f01601f1916602001820160405280156115f5576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846115ff57509392505050565b6000611667836118b4565b801561167857506116788383611918565b9392505050565b60006116e1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166119e79092919063ffffffff16565b90508051600014806117025750808060200190518101906117029190612211565b6109c75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161012b565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526110349085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611165565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061181b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611847576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061186557662386f26fc10000830492506010015b6305f5e100831061187d576305f5e100830492506008015b612710831061189157612710830492506004015b606483106118a3576064830492506002015b600a83106110665760010192915050565b60006118e0827f01ffc9a700000000000000000000000000000000000000000000000000000000611918565b80156110665750611911827fffffffff00000000000000000000000000000000000000000000000000000000611918565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156119d0575060208210155b80156119dc5750600081115b979650505050505050565b60606111fb8484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051611a1b9190612233565b60006040518083038185875af1925050503d8060008114611a58576040519150601f19603f3d011682016040523d82523d6000602084013e611a5d565b606091505b50915091506119dc8783838760608315611ae5578251600003611ade5773ffffffffffffffffffffffffffffffffffffffff85163b611ade5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161012b565b50816111fb565b6111fb8383815115611afa5781518083602001fd5b8060405162461bcd60e51b815260040161012b9190611de6565b73ffffffffffffffffffffffffffffffffffffffff81168114611b3657600080fd5b50565b60008083601f840112611b4b57600080fd5b50813567ffffffffffffffff811115611b6357600080fd5b602083019150836020828501011115611b7b57600080fd5b9250929050565b600080600080600080600060c0888a031215611b9d57600080fd5b8735611ba881611b14565b96506020880135611bb881611b14565b95506040880135611bc881611b14565b94506060880135611bd881611b14565b93506080880135925060a088013567ffffffffffffffff811115611bfb57600080fd5b611c078a828b01611b39565b989b979a50959850939692959293505050565b803563ffffffff81168114611c2e57600080fd5b919050565b600080600060408486031215611c4857600080fd5b611c5184611c1a565b9250602084013567ffffffffffffffff811115611c6d57600080fd5b611c7986828701611b39565b9497909650939450505050565b600080600080600060808688031215611c9e57600080fd5b8535611ca981611b14565b94506020860135611cb981611b14565b935060408601359250606086013567ffffffffffffffff811115611cdc57600080fd5b611ce888828901611b39565b969995985093965092949392505050565b600080600080600080600060c0888a031215611d1457600080fd5b8735611d1f81611b14565b96506020880135611d2f81611b14565b95506040880135611d3f81611b14565b945060608801359350611d5460808901611c1a565b925060a088013567ffffffffffffffff811115611bfb57600080fd5b60005b83811015611d8b578181015183820152602001611d73565b838111156110345750506000910152565b60008151808452611db4816020860160208601611d70565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006116786020830184611d9c565b60008060008060008060a08789031215611e1257600080fd5b8635611e1d81611b14565b95506020870135611e2d81611b14565b945060408701359350611e4260608801611c1a565b9250608087013567ffffffffffffffff811115611e5e57600080fd5b611e6a89828a01611b39565b979a9699509497509295939492505050565b60008060408385031215611e8f57600080fd5b8235611e9a81611b14565b91506020830135611eaa81611b14565b809150509250929050565b60008060008060608587031215611ecb57600080fd5b8435611ed681611b14565b9350611ee460208601611c1a565b9250604085013567ffffffffffffffff811115611f0057600080fd5b611f0c87828801611b39565b95989497509550505050565b8281526040602082015260006111fb6040830184611d9c565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152611f706080830184611d9c565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000611fa96060830185611d9c565b905063ffffffff83166040830152949350505050565b600060208284031215611fd157600080fd5b815161167881611b14565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561201d5761201d611fdc565b500390565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000611f70606083018486612022565b8381526040602082015260006120bb604083018486612022565b95945050505050565b600084516120d6818460208901611d70565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612112816001850160208a01611d70565b6001920191820152835161212d816002840160208801611d70565b0160020195945050505050565b6000821982111561214d5761214d611fdc565b500190565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006120bb6060830184611d9c565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a08301526121d660c0830184611d9c565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561222357600080fd5b8151801515811461167857600080fd5b60008251612245818460208701611d70565b919091019291505056fea164736f6c634300080f000a", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC20BridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC20BridgeInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l1Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC20DepositInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l1Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC20WithdrawalFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ETHBridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ETHBridgeInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ETHDepositInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ETHWithdrawalFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSENGER\",\"outputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_BRIDGE\",\"outputs\":[{\"internalType\":\"contractStandardBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC20To\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeETHTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_l2Token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"depositERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"depositERC20To\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"depositETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"depositETHTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"deposits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeERC20Withdrawal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeETHWithdrawal\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"_messenger\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2TokenBridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messenger\",\"outputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"otherBridge\",\"outputs\":[{\"internalType\":\"contractStandardBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60a06040523480156200001157600080fd5b507342000000000000000000000000000000000000106080526200003660006200003c565b620001bb565b600054600390610100900460ff161580156200005f575060005460ff8083169116105b620000c85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805461ffff191660ff831617610100179055620000e7826200012c565b6000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b600054610100900460ff16620001995760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000bf565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b608051612a44620001fa60003960008181610379015281816104300152818161057001528181610a22015281816113d80152611a8b0152612a446000f3fe6080604052600436106101635760003560e01c806387087623116100c0578063a9f9e67511610074578063c4d66de811610059578063c4d66de8146104c5578063c89701a214610421578063e11013dd146104e557600080fd5b8063a9f9e67514610492578063b1a1a882146104b257600080fd5b806391c49bf8116100a557806391c49bf814610421578063927ede2d146104545780639a2ac6d51461047f57600080fd5b806387087623146103bb5780638f601f66146103db57600080fd5b8063540abf731161011757806358a997f6116100fc57806358a997f6146103475780637f46ddb214610367578063838b25201461039b57600080fd5b8063540abf73146102d157806354fd4d50146102f157600080fd5b80631532ec34116101485780631532ec34146102545780631635f5fd146102675780633cb747bf1461027a57600080fd5b80630166a07a1461022157806309fc88431461024157600080fd5b3661021c57333b156101fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61021a333362030d40604051806020016040528060008152506104f8565b005b600080fd5b34801561022d57600080fd5b5061021a61023c36600461248b565b61050b565b61021a61024f36600461253c565b6108d2565b61021a61026236600461258f565b6109a9565b61021a61027536600461258f565b6109bd565b34801561028657600080fd5b506003546102a79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102dd57600080fd5b5061021a6102ec366004612602565b610e33565b3480156102fd57600080fd5b5061033a6040518060400160405280600581526020017f312e342e3000000000000000000000000000000000000000000000000000000081525081565b6040516102c891906126ef565b34801561035357600080fd5b5061021a610362366004612702565b610e78565b34801561037357600080fd5b506102a77f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a757600080fd5b5061021a6103b6366004612602565b610f4c565b3480156103c757600080fd5b5061021a6103d6366004612702565b610f91565b3480156103e757600080fd5b506104136103f6366004612785565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102c8565b34801561042d57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102a7565b34801561046057600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102a7565b61021a61048d3660046127be565b611065565b34801561049e57600080fd5b5061021a6104ad36600461248b565b6110a7565b61021a6104c036600461253c565b6110b6565b3480156104d157600080fd5b5061021a6104e0366004612821565b611187565b61021a6104f33660046127be565b6112d1565b6105058484348585611314565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff16331480156105fa5750600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116931691636e296e459160048083019260209291908290030181865afa1580156105be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e2919061283e565b73ffffffffffffffffffffffffffffffffffffffff16145b6106ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101f3565b6106b5876114fa565b15610803576106c4878761155c565b610776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101f3565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156107e657600080fd5b505af11580156107fa573d6000803e3d6000fd5b50505050610885565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a168352929052205461084190849061288a565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c168352939052919091209190915561088590858561167c565b6108c9878787878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061175092505050565b50505050505050565b333b15610961576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101f3565b6109a43333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061131492505050565b505050565b6109b685858585856109bd565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610aac5750600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116931691636e296e459160048083019260209291908290030181865afa158015610a70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a94919061283e565b73ffffffffffffffffffffffffffffffffffffffff16145b610b5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101f3565b823414610bed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e7420726571756972656400000000000060648201526084016101f3565b3073ffffffffffffffffffffffffffffffffffffffff851603610c92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c66000000000000000000000000000000000000000000000000000000000060648201526084016101f3565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610d3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e67657200000000000000000000000000000000000000000000000060648201526084016101f3565b610d7f85858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117de92505050565b6000610d9c855a8660405180602001604052806000815250611851565b905080610e2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c6564000000000000000000000000000000000000000000000000000000000060648201526084016101f3565b505050505050565b6108c987873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061186b92505050565b333b15610f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101f3565b610e2b86863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bb392505050565b6108c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bb392505050565b333b15611020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101f3565b610e2b86863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061186b92505050565b61050533858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506104f892505050565b6108c98787878787878761050b565b333b15611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101f3565b6109a433338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506104f892505050565b600054600390610100900460ff161580156111a9575060005460ff8083169116105b611235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016101f3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff83161761010017905561126f82611bc2565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6105053385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061131492505050565b8234146113a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c7565000060648201526084016101f3565b6113af85858584611ca0565b60035460405173ffffffffffffffffffffffffffffffffffffffff90911690633dbb202b9085907f0000000000000000000000000000000000000000000000000000000000000000907f1635f5fd000000000000000000000000000000000000000000000000000000009061142e908b908b9086908a906024016128a1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526114c1929188906004016128ea565b6000604051808303818588803b1580156114da57600080fd5b505af11580156114ee573d6000803e3d6000fd5b50505050505050505050565b6000611526827f1d1d8b6300000000000000000000000000000000000000000000000000000000611d13565b806115565750611556827fec4fc8e300000000000000000000000000000000000000000000000000000000611d13565b92915050565b6000611588837f1d1d8b6300000000000000000000000000000000000000000000000000000000611d13565b15611631578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fc919061283e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611556565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d8573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109a49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611d36565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b38686866040516117c89392919061292f565b60405180910390a4610e2b868686868686611e42565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e631848460405161183d92919061296d565b60405180910390a361050584848484611eca565b600080600080845160208601878a8af19695505050505050565b611874876114fa565b156119c257611883878761155c565b611935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101f3565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b1580156119a557600080fd5b505af11580156119b9573d6000803e3d6000fd5b50505050611a56565b6119e473ffffffffffffffffffffffffffffffffffffffff8816863086611f37565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611a22908490612986565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611a64878787878786611f95565b60035460405173ffffffffffffffffffffffffffffffffffffffff90911690633dbb202b907f0000000000000000000000000000000000000000000000000000000000000000907f0166a07a0000000000000000000000000000000000000000000000000000000090611ae5908b908d908c908c908c908b9060240161299e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611b78929187906004016128ea565b600060405180830381600087803b158015611b9257600080fd5b505af1158015611ba6573d6000803e3d6000fd5b5050505050505050505050565b6108c98787878787878761186b565b600054610100900460ff16611c59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016101f3565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f238484604051611cff92919061296d565b60405180910390a361050584848484612023565b6000611d1e83612082565b8015611d2f5750611d2f83836120e6565b9392505050565b6000611d98826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166121b59092919063ffffffff16565b8051909150156109a45780806020019051810190611db691906129f9565b6109a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016101f3565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd868686604051611eba9392919061292f565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051611f2992919061296d565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526105059085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016116ce565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161200d9392919061292f565b60405180910390a4610e2b8686868686866121cc565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051611f2992919061296d565b60006120ae827f01ffc9a7000000000000000000000000000000000000000000000000000000006120e6565b801561155657506120df827fffffffff000000000000000000000000000000000000000000000000000000006120e6565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d9150600051905082801561219e575060208210155b80156121aa5750600081115b979650505050505050565b60606121c48484600085612244565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf868686604051611eba9392919061292f565b6060824710156122d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016101f3565b73ffffffffffffffffffffffffffffffffffffffff85163b612354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101f3565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161237d9190612a1b565b60006040518083038185875af1925050503d80600081146123ba576040519150601f19603f3d011682016040523d82523d6000602084013e6123bf565b606091505b50915091506121aa828286606083156123d9575081611d2f565b8251156123e95782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f391906126ef565b73ffffffffffffffffffffffffffffffffffffffff8116811461243f57600080fd5b50565b60008083601f84011261245457600080fd5b50813567ffffffffffffffff81111561246c57600080fd5b60208301915083602082850101111561248457600080fd5b9250929050565b600080600080600080600060c0888a0312156124a657600080fd5b87356124b18161241d565b965060208801356124c18161241d565b955060408801356124d18161241d565b945060608801356124e18161241d565b93506080880135925060a088013567ffffffffffffffff81111561250457600080fd5b6125108a828b01612442565b989b979a50959850939692959293505050565b803563ffffffff8116811461253757600080fd5b919050565b60008060006040848603121561255157600080fd5b61255a84612523565b9250602084013567ffffffffffffffff81111561257657600080fd5b61258286828701612442565b9497909650939450505050565b6000806000806000608086880312156125a757600080fd5b85356125b28161241d565b945060208601356125c28161241d565b935060408601359250606086013567ffffffffffffffff8111156125e557600080fd5b6125f188828901612442565b969995985093965092949392505050565b600080600080600080600060c0888a03121561261d57600080fd5b87356126288161241d565b965060208801356126388161241d565b955060408801356126488161241d565b94506060880135935061265d60808901612523565b925060a088013567ffffffffffffffff81111561250457600080fd5b60005b8381101561269457818101518382015260200161267c565b838111156105055750506000910152565b600081518084526126bd816020860160208601612679565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d2f60208301846126a5565b60008060008060008060a0878903121561271b57600080fd5b86356127268161241d565b955060208701356127368161241d565b94506040870135935061274b60608801612523565b9250608087013567ffffffffffffffff81111561276757600080fd5b61277389828a01612442565b979a9699509497509295939492505050565b6000806040838503121561279857600080fd5b82356127a38161241d565b915060208301356127b38161241d565b809150509250929050565b600080600080606085870312156127d457600080fd5b84356127df8161241d565b93506127ed60208601612523565b9250604085013567ffffffffffffffff81111561280957600080fd5b61281587828801612442565b95989497509550505050565b60006020828403121561283357600080fd5b8135611d2f8161241d565b60006020828403121561285057600080fd5b8151611d2f8161241d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561289c5761289c61285b565b500390565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526128e060808301846126a5565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815260606020820152600061291960608301856126a5565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff8416815282602082015260606040820152600061296460608301846126a5565b95945050505050565b8281526040602082015260006121c460408301846126a5565b600082198211156129995761299961285b565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a08301526129ed60c08301846126a5565b98975050505050505050565b600060208284031215612a0b57600080fd5b81518015158114611d2f57600080fd5b60008251612a2d818460208701612679565b919091019291505056fea164736f6c634300080f000a", } // L1StandardBridgeABI is the input ABI used to generate the binding from. @@ -44,7 +43,7 @@ var L1StandardBridgeABI = L1StandardBridgeMetaData.ABI var L1StandardBridgeBin = L1StandardBridgeMetaData.Bin // DeployL1StandardBridge deploys a new Ethereum contract, binding an instance of L1StandardBridge to it. -func DeployL1StandardBridge(auth *bind.TransactOpts, backend bind.ContractBackend, _messenger common.Address) (common.Address, *types.Transaction, *L1StandardBridge, error) { +func DeployL1StandardBridge(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *L1StandardBridge, error) { parsed, err := L1StandardBridgeMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -53,7 +52,7 @@ func DeployL1StandardBridge(auth *bind.TransactOpts, backend bind.ContractBacken return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(L1StandardBridgeBin), backend, _messenger) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(L1StandardBridgeBin), backend) if err != nil { return common.Address{}, nil, nil, err } @@ -157,11 +156,11 @@ func NewL1StandardBridgeFilterer(address common.Address, filterer bind.ContractF // bindL1StandardBridge binds a generic wrapper to an already deployed contract. func bindL1StandardBridge(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := L1StandardBridgeMetaData.GetAbi() + parsed, err := abi.JSON(strings.NewReader(L1StandardBridgeABI)) if err != nil { return nil, err } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and @@ -295,6 +294,99 @@ func (_L1StandardBridge *L1StandardBridgeCallerSession) Deposits(arg0 common.Add return _L1StandardBridge.Contract.Deposits(&_L1StandardBridge.CallOpts, arg0, arg1) } +// L2TokenBridge is a free data retrieval call binding the contract method 0x91c49bf8. +// +// Solidity: function l2TokenBridge() view returns(address) +func (_L1StandardBridge *L1StandardBridgeCaller) L2TokenBridge(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L1StandardBridge.contract.Call(opts, &out, "l2TokenBridge") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// L2TokenBridge is a free data retrieval call binding the contract method 0x91c49bf8. +// +// Solidity: function l2TokenBridge() view returns(address) +func (_L1StandardBridge *L1StandardBridgeSession) L2TokenBridge() (common.Address, error) { + return _L1StandardBridge.Contract.L2TokenBridge(&_L1StandardBridge.CallOpts) +} + +// L2TokenBridge is a free data retrieval call binding the contract method 0x91c49bf8. +// +// Solidity: function l2TokenBridge() view returns(address) +func (_L1StandardBridge *L1StandardBridgeCallerSession) L2TokenBridge() (common.Address, error) { + return _L1StandardBridge.Contract.L2TokenBridge(&_L1StandardBridge.CallOpts) +} + +// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. +// +// Solidity: function messenger() view returns(address) +func (_L1StandardBridge *L1StandardBridgeCaller) Messenger(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L1StandardBridge.contract.Call(opts, &out, "messenger") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. +// +// Solidity: function messenger() view returns(address) +func (_L1StandardBridge *L1StandardBridgeSession) Messenger() (common.Address, error) { + return _L1StandardBridge.Contract.Messenger(&_L1StandardBridge.CallOpts) +} + +// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. +// +// Solidity: function messenger() view returns(address) +func (_L1StandardBridge *L1StandardBridgeCallerSession) Messenger() (common.Address, error) { + return _L1StandardBridge.Contract.Messenger(&_L1StandardBridge.CallOpts) +} + +// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. +// +// Solidity: function otherBridge() view returns(address) +func (_L1StandardBridge *L1StandardBridgeCaller) OtherBridge(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L1StandardBridge.contract.Call(opts, &out, "otherBridge") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. +// +// Solidity: function otherBridge() view returns(address) +func (_L1StandardBridge *L1StandardBridgeSession) OtherBridge() (common.Address, error) { + return _L1StandardBridge.Contract.OtherBridge(&_L1StandardBridge.CallOpts) +} + +// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. +// +// Solidity: function otherBridge() view returns(address) +func (_L1StandardBridge *L1StandardBridgeCallerSession) OtherBridge() (common.Address, error) { + return _L1StandardBridge.Contract.OtherBridge(&_L1StandardBridge.CallOpts) +} + // Version is a free data retrieval call binding the contract method 0x54fd4d50. // // Solidity: function version() view returns(string) @@ -410,6 +502,90 @@ func (_L1StandardBridge *L1StandardBridgeTransactorSession) BridgeETHTo(_to comm return _L1StandardBridge.Contract.BridgeETHTo(&_L1StandardBridge.TransactOpts, _to, _minGasLimit, _extraData) } +// DepositERC20 is a paid mutator transaction binding the contract method 0x58a997f6. +// +// Solidity: function depositERC20(address _l1Token, address _l2Token, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_L1StandardBridge *L1StandardBridgeTransactor) DepositERC20(opts *bind.TransactOpts, _l1Token common.Address, _l2Token common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.contract.Transact(opts, "depositERC20", _l1Token, _l2Token, _amount, _minGasLimit, _extraData) +} + +// DepositERC20 is a paid mutator transaction binding the contract method 0x58a997f6. +// +// Solidity: function depositERC20(address _l1Token, address _l2Token, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_L1StandardBridge *L1StandardBridgeSession) DepositERC20(_l1Token common.Address, _l2Token common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.Contract.DepositERC20(&_L1StandardBridge.TransactOpts, _l1Token, _l2Token, _amount, _minGasLimit, _extraData) +} + +// DepositERC20 is a paid mutator transaction binding the contract method 0x58a997f6. +// +// Solidity: function depositERC20(address _l1Token, address _l2Token, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_L1StandardBridge *L1StandardBridgeTransactorSession) DepositERC20(_l1Token common.Address, _l2Token common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.Contract.DepositERC20(&_L1StandardBridge.TransactOpts, _l1Token, _l2Token, _amount, _minGasLimit, _extraData) +} + +// DepositERC20To is a paid mutator transaction binding the contract method 0x838b2520. +// +// Solidity: function depositERC20To(address _l1Token, address _l2Token, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_L1StandardBridge *L1StandardBridgeTransactor) DepositERC20To(opts *bind.TransactOpts, _l1Token common.Address, _l2Token common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.contract.Transact(opts, "depositERC20To", _l1Token, _l2Token, _to, _amount, _minGasLimit, _extraData) +} + +// DepositERC20To is a paid mutator transaction binding the contract method 0x838b2520. +// +// Solidity: function depositERC20To(address _l1Token, address _l2Token, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_L1StandardBridge *L1StandardBridgeSession) DepositERC20To(_l1Token common.Address, _l2Token common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.Contract.DepositERC20To(&_L1StandardBridge.TransactOpts, _l1Token, _l2Token, _to, _amount, _minGasLimit, _extraData) +} + +// DepositERC20To is a paid mutator transaction binding the contract method 0x838b2520. +// +// Solidity: function depositERC20To(address _l1Token, address _l2Token, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_L1StandardBridge *L1StandardBridgeTransactorSession) DepositERC20To(_l1Token common.Address, _l2Token common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.Contract.DepositERC20To(&_L1StandardBridge.TransactOpts, _l1Token, _l2Token, _to, _amount, _minGasLimit, _extraData) +} + +// DepositETH is a paid mutator transaction binding the contract method 0xb1a1a882. +// +// Solidity: function depositETH(uint32 _minGasLimit, bytes _extraData) payable returns() +func (_L1StandardBridge *L1StandardBridgeTransactor) DepositETH(opts *bind.TransactOpts, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.contract.Transact(opts, "depositETH", _minGasLimit, _extraData) +} + +// DepositETH is a paid mutator transaction binding the contract method 0xb1a1a882. +// +// Solidity: function depositETH(uint32 _minGasLimit, bytes _extraData) payable returns() +func (_L1StandardBridge *L1StandardBridgeSession) DepositETH(_minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.Contract.DepositETH(&_L1StandardBridge.TransactOpts, _minGasLimit, _extraData) +} + +// DepositETH is a paid mutator transaction binding the contract method 0xb1a1a882. +// +// Solidity: function depositETH(uint32 _minGasLimit, bytes _extraData) payable returns() +func (_L1StandardBridge *L1StandardBridgeTransactorSession) DepositETH(_minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.Contract.DepositETH(&_L1StandardBridge.TransactOpts, _minGasLimit, _extraData) +} + +// DepositETHTo is a paid mutator transaction binding the contract method 0x9a2ac6d5. +// +// Solidity: function depositETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() +func (_L1StandardBridge *L1StandardBridgeTransactor) DepositETHTo(opts *bind.TransactOpts, _to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.contract.Transact(opts, "depositETHTo", _to, _minGasLimit, _extraData) +} + +// DepositETHTo is a paid mutator transaction binding the contract method 0x9a2ac6d5. +// +// Solidity: function depositETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() +func (_L1StandardBridge *L1StandardBridgeSession) DepositETHTo(_to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.Contract.DepositETHTo(&_L1StandardBridge.TransactOpts, _to, _minGasLimit, _extraData) +} + +// DepositETHTo is a paid mutator transaction binding the contract method 0x9a2ac6d5. +// +// Solidity: function depositETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() +func (_L1StandardBridge *L1StandardBridgeTransactorSession) DepositETHTo(_to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.Contract.DepositETHTo(&_L1StandardBridge.TransactOpts, _to, _minGasLimit, _extraData) +} + // FinalizeBridgeERC20 is a paid mutator transaction binding the contract method 0x0166a07a. // // Solidity: function finalizeBridgeERC20(address _localToken, address _remoteToken, address _from, address _to, uint256 _amount, bytes _extraData) returns() @@ -452,6 +628,69 @@ func (_L1StandardBridge *L1StandardBridgeTransactorSession) FinalizeBridgeETH(_f return _L1StandardBridge.Contract.FinalizeBridgeETH(&_L1StandardBridge.TransactOpts, _from, _to, _amount, _extraData) } +// FinalizeERC20Withdrawal is a paid mutator transaction binding the contract method 0xa9f9e675. +// +// Solidity: function finalizeERC20Withdrawal(address _l1Token, address _l2Token, address _from, address _to, uint256 _amount, bytes _extraData) returns() +func (_L1StandardBridge *L1StandardBridgeTransactor) FinalizeERC20Withdrawal(opts *bind.TransactOpts, _l1Token common.Address, _l2Token common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.contract.Transact(opts, "finalizeERC20Withdrawal", _l1Token, _l2Token, _from, _to, _amount, _extraData) +} + +// FinalizeERC20Withdrawal is a paid mutator transaction binding the contract method 0xa9f9e675. +// +// Solidity: function finalizeERC20Withdrawal(address _l1Token, address _l2Token, address _from, address _to, uint256 _amount, bytes _extraData) returns() +func (_L1StandardBridge *L1StandardBridgeSession) FinalizeERC20Withdrawal(_l1Token common.Address, _l2Token common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.Contract.FinalizeERC20Withdrawal(&_L1StandardBridge.TransactOpts, _l1Token, _l2Token, _from, _to, _amount, _extraData) +} + +// FinalizeERC20Withdrawal is a paid mutator transaction binding the contract method 0xa9f9e675. +// +// Solidity: function finalizeERC20Withdrawal(address _l1Token, address _l2Token, address _from, address _to, uint256 _amount, bytes _extraData) returns() +func (_L1StandardBridge *L1StandardBridgeTransactorSession) FinalizeERC20Withdrawal(_l1Token common.Address, _l2Token common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.Contract.FinalizeERC20Withdrawal(&_L1StandardBridge.TransactOpts, _l1Token, _l2Token, _from, _to, _amount, _extraData) +} + +// FinalizeETHWithdrawal is a paid mutator transaction binding the contract method 0x1532ec34. +// +// Solidity: function finalizeETHWithdrawal(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() +func (_L1StandardBridge *L1StandardBridgeTransactor) FinalizeETHWithdrawal(opts *bind.TransactOpts, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.contract.Transact(opts, "finalizeETHWithdrawal", _from, _to, _amount, _extraData) +} + +// FinalizeETHWithdrawal is a paid mutator transaction binding the contract method 0x1532ec34. +// +// Solidity: function finalizeETHWithdrawal(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() +func (_L1StandardBridge *L1StandardBridgeSession) FinalizeETHWithdrawal(_from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.Contract.FinalizeETHWithdrawal(&_L1StandardBridge.TransactOpts, _from, _to, _amount, _extraData) +} + +// FinalizeETHWithdrawal is a paid mutator transaction binding the contract method 0x1532ec34. +// +// Solidity: function finalizeETHWithdrawal(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() +func (_L1StandardBridge *L1StandardBridgeTransactorSession) FinalizeETHWithdrawal(_from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _L1StandardBridge.Contract.FinalizeETHWithdrawal(&_L1StandardBridge.TransactOpts, _from, _to, _amount, _extraData) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _messenger) returns() +func (_L1StandardBridge *L1StandardBridgeTransactor) Initialize(opts *bind.TransactOpts, _messenger common.Address) (*types.Transaction, error) { + return _L1StandardBridge.contract.Transact(opts, "initialize", _messenger) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _messenger) returns() +func (_L1StandardBridge *L1StandardBridgeSession) Initialize(_messenger common.Address) (*types.Transaction, error) { + return _L1StandardBridge.Contract.Initialize(&_L1StandardBridge.TransactOpts, _messenger) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _messenger) returns() +func (_L1StandardBridge *L1StandardBridgeTransactorSession) Initialize(_messenger common.Address) (*types.Transaction, error) { + return _L1StandardBridge.Contract.Initialize(&_L1StandardBridge.TransactOpts, _messenger) +} + // Receive is a paid mutator transaction binding the contract receive function. // // Solidity: receive() payable returns() @@ -803,9 +1042,9 @@ func (_L1StandardBridge *L1StandardBridgeFilterer) ParseERC20BridgeInitiated(log return event, nil } -// L1StandardBridgeETHBridgeFinalizedIterator is returned from FilterETHBridgeFinalized and is used to iterate over the raw logs and unpacked data for ETHBridgeFinalized events raised by the L1StandardBridge contract. -type L1StandardBridgeETHBridgeFinalizedIterator struct { - Event *L1StandardBridgeETHBridgeFinalized // Event containing the contract specifics and raw log +// L1StandardBridgeERC20DepositInitiatedIterator is returned from FilterERC20DepositInitiated and is used to iterate over the raw logs and unpacked data for ERC20DepositInitiated events raised by the L1StandardBridge contract. +type L1StandardBridgeERC20DepositInitiatedIterator struct { + Event *L1StandardBridgeERC20DepositInitiated // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -819,7 +1058,7 @@ type L1StandardBridgeETHBridgeFinalizedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *L1StandardBridgeETHBridgeFinalizedIterator) Next() bool { +func (it *L1StandardBridgeERC20DepositInitiatedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -828,7 +1067,7 @@ func (it *L1StandardBridgeETHBridgeFinalizedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(L1StandardBridgeETHBridgeFinalized) + it.Event = new(L1StandardBridgeERC20DepositInitiated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -843,7 +1082,7 @@ func (it *L1StandardBridgeETHBridgeFinalizedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(L1StandardBridgeETHBridgeFinalized) + it.Event = new(L1StandardBridgeERC20DepositInitiated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -859,19 +1098,21 @@ func (it *L1StandardBridgeETHBridgeFinalizedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *L1StandardBridgeETHBridgeFinalizedIterator) Error() error { +func (it *L1StandardBridgeERC20DepositInitiatedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *L1StandardBridgeETHBridgeFinalizedIterator) Close() error { +func (it *L1StandardBridgeERC20DepositInitiatedIterator) Close() error { it.sub.Unsubscribe() return nil } -// L1StandardBridgeETHBridgeFinalized represents a ETHBridgeFinalized event raised by the L1StandardBridge contract. -type L1StandardBridgeETHBridgeFinalized struct { +// L1StandardBridgeERC20DepositInitiated represents a ERC20DepositInitiated event raised by the L1StandardBridge contract. +type L1StandardBridgeERC20DepositInitiated struct { + L1Token common.Address + L2Token common.Address From common.Address To common.Address Amount *big.Int @@ -879,42 +1120,50 @@ type L1StandardBridgeETHBridgeFinalized struct { Raw types.Log // Blockchain specific contextual infos } -// FilterETHBridgeFinalized is a free log retrieval operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. +// FilterERC20DepositInitiated is a free log retrieval operation binding the contract event 0x718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d0396. // -// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) FilterETHBridgeFinalized(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*L1StandardBridgeETHBridgeFinalizedIterator, error) { +// Solidity: event ERC20DepositInitiated(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) FilterERC20DepositInitiated(opts *bind.FilterOpts, l1Token []common.Address, l2Token []common.Address, from []common.Address) (*L1StandardBridgeERC20DepositInitiatedIterator, error) { + var l1TokenRule []interface{} + for _, l1TokenItem := range l1Token { + l1TokenRule = append(l1TokenRule, l1TokenItem) + } + var l2TokenRule []interface{} + for _, l2TokenItem := range l2Token { + l2TokenRule = append(l2TokenRule, l2TokenItem) + } 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 := _L1StandardBridge.contract.FilterLogs(opts, "ETHBridgeFinalized", fromRule, toRule) + logs, sub, err := _L1StandardBridge.contract.FilterLogs(opts, "ERC20DepositInitiated", l1TokenRule, l2TokenRule, fromRule) if err != nil { return nil, err } - return &L1StandardBridgeETHBridgeFinalizedIterator{contract: _L1StandardBridge.contract, event: "ETHBridgeFinalized", logs: logs, sub: sub}, nil + return &L1StandardBridgeERC20DepositInitiatedIterator{contract: _L1StandardBridge.contract, event: "ERC20DepositInitiated", logs: logs, sub: sub}, nil } -// WatchETHBridgeFinalized is a free log subscription operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. +// WatchERC20DepositInitiated is a free log subscription operation binding the contract event 0x718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d0396. // -// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) WatchETHBridgeFinalized(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeETHBridgeFinalized, from []common.Address, to []common.Address) (event.Subscription, error) { +// Solidity: event ERC20DepositInitiated(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) WatchERC20DepositInitiated(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeERC20DepositInitiated, l1Token []common.Address, l2Token []common.Address, from []common.Address) (event.Subscription, error) { + var l1TokenRule []interface{} + for _, l1TokenItem := range l1Token { + l1TokenRule = append(l1TokenRule, l1TokenItem) + } + var l2TokenRule []interface{} + for _, l2TokenItem := range l2Token { + l2TokenRule = append(l2TokenRule, l2TokenItem) + } 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 := _L1StandardBridge.contract.WatchLogs(opts, "ETHBridgeFinalized", fromRule, toRule) + logs, sub, err := _L1StandardBridge.contract.WatchLogs(opts, "ERC20DepositInitiated", l1TokenRule, l2TokenRule, fromRule) if err != nil { return nil, err } @@ -924,8 +1173,8 @@ func (_L1StandardBridge *L1StandardBridgeFilterer) WatchETHBridgeFinalized(opts select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(L1StandardBridgeETHBridgeFinalized) - if err := _L1StandardBridge.contract.UnpackLog(event, "ETHBridgeFinalized", log); err != nil { + event := new(L1StandardBridgeERC20DepositInitiated) + if err := _L1StandardBridge.contract.UnpackLog(event, "ERC20DepositInitiated", log); err != nil { return err } event.Raw = log @@ -946,21 +1195,21 @@ func (_L1StandardBridge *L1StandardBridgeFilterer) WatchETHBridgeFinalized(opts }), nil } -// ParseETHBridgeFinalized is a log parse operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. +// ParseERC20DepositInitiated is a log parse operation binding the contract event 0x718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d0396. // -// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) ParseETHBridgeFinalized(log types.Log) (*L1StandardBridgeETHBridgeFinalized, error) { - event := new(L1StandardBridgeETHBridgeFinalized) - if err := _L1StandardBridge.contract.UnpackLog(event, "ETHBridgeFinalized", log); err != nil { +// Solidity: event ERC20DepositInitiated(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) ParseERC20DepositInitiated(log types.Log) (*L1StandardBridgeERC20DepositInitiated, error) { + event := new(L1StandardBridgeERC20DepositInitiated) + if err := _L1StandardBridge.contract.UnpackLog(event, "ERC20DepositInitiated", log); err != nil { return nil, err } event.Raw = log return event, nil } -// L1StandardBridgeETHBridgeInitiatedIterator is returned from FilterETHBridgeInitiated and is used to iterate over the raw logs and unpacked data for ETHBridgeInitiated events raised by the L1StandardBridge contract. -type L1StandardBridgeETHBridgeInitiatedIterator struct { - Event *L1StandardBridgeETHBridgeInitiated // Event containing the contract specifics and raw log +// L1StandardBridgeERC20WithdrawalFinalizedIterator is returned from FilterERC20WithdrawalFinalized and is used to iterate over the raw logs and unpacked data for ERC20WithdrawalFinalized events raised by the L1StandardBridge contract. +type L1StandardBridgeERC20WithdrawalFinalizedIterator struct { + Event *L1StandardBridgeERC20WithdrawalFinalized // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -974,7 +1223,7 @@ type L1StandardBridgeETHBridgeInitiatedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *L1StandardBridgeETHBridgeInitiatedIterator) Next() bool { +func (it *L1StandardBridgeERC20WithdrawalFinalizedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -983,7 +1232,7 @@ func (it *L1StandardBridgeETHBridgeInitiatedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(L1StandardBridgeETHBridgeInitiated) + it.Event = new(L1StandardBridgeERC20WithdrawalFinalized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -998,7 +1247,7 @@ func (it *L1StandardBridgeETHBridgeInitiatedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(L1StandardBridgeETHBridgeInitiated) + it.Event = new(L1StandardBridgeERC20WithdrawalFinalized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1014,19 +1263,21 @@ func (it *L1StandardBridgeETHBridgeInitiatedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *L1StandardBridgeETHBridgeInitiatedIterator) Error() error { +func (it *L1StandardBridgeERC20WithdrawalFinalizedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *L1StandardBridgeETHBridgeInitiatedIterator) Close() error { +func (it *L1StandardBridgeERC20WithdrawalFinalizedIterator) Close() error { it.sub.Unsubscribe() return nil } -// L1StandardBridgeETHBridgeInitiated represents a ETHBridgeInitiated event raised by the L1StandardBridge contract. -type L1StandardBridgeETHBridgeInitiated struct { +// L1StandardBridgeERC20WithdrawalFinalized represents a ERC20WithdrawalFinalized event raised by the L1StandardBridge contract. +type L1StandardBridgeERC20WithdrawalFinalized struct { + L1Token common.Address + L2Token common.Address From common.Address To common.Address Amount *big.Int @@ -1034,42 +1285,50 @@ type L1StandardBridgeETHBridgeInitiated struct { Raw types.Log // Blockchain specific contextual infos } -// FilterETHBridgeInitiated is a free log retrieval operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. +// FilterERC20WithdrawalFinalized is a free log retrieval operation binding the contract event 0x3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3. // -// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) FilterETHBridgeInitiated(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*L1StandardBridgeETHBridgeInitiatedIterator, error) { +// Solidity: event ERC20WithdrawalFinalized(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) FilterERC20WithdrawalFinalized(opts *bind.FilterOpts, l1Token []common.Address, l2Token []common.Address, from []common.Address) (*L1StandardBridgeERC20WithdrawalFinalizedIterator, error) { + var l1TokenRule []interface{} + for _, l1TokenItem := range l1Token { + l1TokenRule = append(l1TokenRule, l1TokenItem) + } + var l2TokenRule []interface{} + for _, l2TokenItem := range l2Token { + l2TokenRule = append(l2TokenRule, l2TokenItem) + } 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 := _L1StandardBridge.contract.FilterLogs(opts, "ETHBridgeInitiated", fromRule, toRule) + logs, sub, err := _L1StandardBridge.contract.FilterLogs(opts, "ERC20WithdrawalFinalized", l1TokenRule, l2TokenRule, fromRule) if err != nil { return nil, err } - return &L1StandardBridgeETHBridgeInitiatedIterator{contract: _L1StandardBridge.contract, event: "ETHBridgeInitiated", logs: logs, sub: sub}, nil + return &L1StandardBridgeERC20WithdrawalFinalizedIterator{contract: _L1StandardBridge.contract, event: "ERC20WithdrawalFinalized", logs: logs, sub: sub}, nil } -// WatchETHBridgeInitiated is a free log subscription operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. +// WatchERC20WithdrawalFinalized is a free log subscription operation binding the contract event 0x3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3. // -// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) WatchETHBridgeInitiated(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeETHBridgeInitiated, from []common.Address, to []common.Address) (event.Subscription, error) { +// Solidity: event ERC20WithdrawalFinalized(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) WatchERC20WithdrawalFinalized(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeERC20WithdrawalFinalized, l1Token []common.Address, l2Token []common.Address, from []common.Address) (event.Subscription, error) { + var l1TokenRule []interface{} + for _, l1TokenItem := range l1Token { + l1TokenRule = append(l1TokenRule, l1TokenItem) + } + var l2TokenRule []interface{} + for _, l2TokenItem := range l2Token { + l2TokenRule = append(l2TokenRule, l2TokenItem) + } 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 := _L1StandardBridge.contract.WatchLogs(opts, "ETHBridgeInitiated", fromRule, toRule) + logs, sub, err := _L1StandardBridge.contract.WatchLogs(opts, "ERC20WithdrawalFinalized", l1TokenRule, l2TokenRule, fromRule) if err != nil { return nil, err } @@ -1079,8 +1338,8 @@ func (_L1StandardBridge *L1StandardBridgeFilterer) WatchETHBridgeInitiated(opts select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(L1StandardBridgeETHBridgeInitiated) - if err := _L1StandardBridge.contract.UnpackLog(event, "ETHBridgeInitiated", log); err != nil { + event := new(L1StandardBridgeERC20WithdrawalFinalized) + if err := _L1StandardBridge.contract.UnpackLog(event, "ERC20WithdrawalFinalized", log); err != nil { return err } event.Raw = log @@ -1101,12 +1360,766 @@ func (_L1StandardBridge *L1StandardBridgeFilterer) WatchETHBridgeInitiated(opts }), nil } -// ParseETHBridgeInitiated is a log parse operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. +// ParseERC20WithdrawalFinalized is a log parse operation binding the contract event 0x3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3. // -// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) -func (_L1StandardBridge *L1StandardBridgeFilterer) ParseETHBridgeInitiated(log types.Log) (*L1StandardBridgeETHBridgeInitiated, error) { - event := new(L1StandardBridgeETHBridgeInitiated) - if err := _L1StandardBridge.contract.UnpackLog(event, "ETHBridgeInitiated", log); err != nil { +// Solidity: event ERC20WithdrawalFinalized(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) ParseERC20WithdrawalFinalized(log types.Log) (*L1StandardBridgeERC20WithdrawalFinalized, error) { + event := new(L1StandardBridgeERC20WithdrawalFinalized) + if err := _L1StandardBridge.contract.UnpackLog(event, "ERC20WithdrawalFinalized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// L1StandardBridgeETHBridgeFinalizedIterator is returned from FilterETHBridgeFinalized and is used to iterate over the raw logs and unpacked data for ETHBridgeFinalized events raised by the L1StandardBridge contract. +type L1StandardBridgeETHBridgeFinalizedIterator struct { + Event *L1StandardBridgeETHBridgeFinalized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L1StandardBridgeETHBridgeFinalizedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L1StandardBridgeETHBridgeFinalized) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L1StandardBridgeETHBridgeFinalized) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L1StandardBridgeETHBridgeFinalizedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L1StandardBridgeETHBridgeFinalizedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L1StandardBridgeETHBridgeFinalized represents a ETHBridgeFinalized event raised by the L1StandardBridge contract. +type L1StandardBridgeETHBridgeFinalized struct { + From common.Address + To common.Address + Amount *big.Int + ExtraData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterETHBridgeFinalized is a free log retrieval operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. +// +// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) FilterETHBridgeFinalized(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*L1StandardBridgeETHBridgeFinalizedIterator, 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 := _L1StandardBridge.contract.FilterLogs(opts, "ETHBridgeFinalized", fromRule, toRule) + if err != nil { + return nil, err + } + return &L1StandardBridgeETHBridgeFinalizedIterator{contract: _L1StandardBridge.contract, event: "ETHBridgeFinalized", logs: logs, sub: sub}, nil +} + +// WatchETHBridgeFinalized is a free log subscription operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. +// +// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) WatchETHBridgeFinalized(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeETHBridgeFinalized, 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 := _L1StandardBridge.contract.WatchLogs(opts, "ETHBridgeFinalized", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L1StandardBridgeETHBridgeFinalized) + if err := _L1StandardBridge.contract.UnpackLog(event, "ETHBridgeFinalized", 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 +} + +// ParseETHBridgeFinalized is a log parse operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. +// +// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) ParseETHBridgeFinalized(log types.Log) (*L1StandardBridgeETHBridgeFinalized, error) { + event := new(L1StandardBridgeETHBridgeFinalized) + if err := _L1StandardBridge.contract.UnpackLog(event, "ETHBridgeFinalized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// L1StandardBridgeETHBridgeInitiatedIterator is returned from FilterETHBridgeInitiated and is used to iterate over the raw logs and unpacked data for ETHBridgeInitiated events raised by the L1StandardBridge contract. +type L1StandardBridgeETHBridgeInitiatedIterator struct { + Event *L1StandardBridgeETHBridgeInitiated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L1StandardBridgeETHBridgeInitiatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L1StandardBridgeETHBridgeInitiated) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L1StandardBridgeETHBridgeInitiated) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L1StandardBridgeETHBridgeInitiatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L1StandardBridgeETHBridgeInitiatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L1StandardBridgeETHBridgeInitiated represents a ETHBridgeInitiated event raised by the L1StandardBridge contract. +type L1StandardBridgeETHBridgeInitiated struct { + From common.Address + To common.Address + Amount *big.Int + ExtraData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterETHBridgeInitiated is a free log retrieval operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. +// +// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) FilterETHBridgeInitiated(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*L1StandardBridgeETHBridgeInitiatedIterator, 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 := _L1StandardBridge.contract.FilterLogs(opts, "ETHBridgeInitiated", fromRule, toRule) + if err != nil { + return nil, err + } + return &L1StandardBridgeETHBridgeInitiatedIterator{contract: _L1StandardBridge.contract, event: "ETHBridgeInitiated", logs: logs, sub: sub}, nil +} + +// WatchETHBridgeInitiated is a free log subscription operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. +// +// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) WatchETHBridgeInitiated(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeETHBridgeInitiated, 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 := _L1StandardBridge.contract.WatchLogs(opts, "ETHBridgeInitiated", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L1StandardBridgeETHBridgeInitiated) + if err := _L1StandardBridge.contract.UnpackLog(event, "ETHBridgeInitiated", 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 +} + +// ParseETHBridgeInitiated is a log parse operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. +// +// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) ParseETHBridgeInitiated(log types.Log) (*L1StandardBridgeETHBridgeInitiated, error) { + event := new(L1StandardBridgeETHBridgeInitiated) + if err := _L1StandardBridge.contract.UnpackLog(event, "ETHBridgeInitiated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// L1StandardBridgeETHDepositInitiatedIterator is returned from FilterETHDepositInitiated and is used to iterate over the raw logs and unpacked data for ETHDepositInitiated events raised by the L1StandardBridge contract. +type L1StandardBridgeETHDepositInitiatedIterator struct { + Event *L1StandardBridgeETHDepositInitiated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L1StandardBridgeETHDepositInitiatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L1StandardBridgeETHDepositInitiated) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L1StandardBridgeETHDepositInitiated) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L1StandardBridgeETHDepositInitiatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L1StandardBridgeETHDepositInitiatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L1StandardBridgeETHDepositInitiated represents a ETHDepositInitiated event raised by the L1StandardBridge contract. +type L1StandardBridgeETHDepositInitiated struct { + From common.Address + To common.Address + Amount *big.Int + ExtraData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterETHDepositInitiated is a free log retrieval operation binding the contract event 0x35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f23. +// +// Solidity: event ETHDepositInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) FilterETHDepositInitiated(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*L1StandardBridgeETHDepositInitiatedIterator, 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 := _L1StandardBridge.contract.FilterLogs(opts, "ETHDepositInitiated", fromRule, toRule) + if err != nil { + return nil, err + } + return &L1StandardBridgeETHDepositInitiatedIterator{contract: _L1StandardBridge.contract, event: "ETHDepositInitiated", logs: logs, sub: sub}, nil +} + +// WatchETHDepositInitiated is a free log subscription operation binding the contract event 0x35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f23. +// +// Solidity: event ETHDepositInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) WatchETHDepositInitiated(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeETHDepositInitiated, 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 := _L1StandardBridge.contract.WatchLogs(opts, "ETHDepositInitiated", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L1StandardBridgeETHDepositInitiated) + if err := _L1StandardBridge.contract.UnpackLog(event, "ETHDepositInitiated", 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 +} + +// ParseETHDepositInitiated is a log parse operation binding the contract event 0x35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f23. +// +// Solidity: event ETHDepositInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) ParseETHDepositInitiated(log types.Log) (*L1StandardBridgeETHDepositInitiated, error) { + event := new(L1StandardBridgeETHDepositInitiated) + if err := _L1StandardBridge.contract.UnpackLog(event, "ETHDepositInitiated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// L1StandardBridgeETHWithdrawalFinalizedIterator is returned from FilterETHWithdrawalFinalized and is used to iterate over the raw logs and unpacked data for ETHWithdrawalFinalized events raised by the L1StandardBridge contract. +type L1StandardBridgeETHWithdrawalFinalizedIterator struct { + Event *L1StandardBridgeETHWithdrawalFinalized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L1StandardBridgeETHWithdrawalFinalizedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L1StandardBridgeETHWithdrawalFinalized) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L1StandardBridgeETHWithdrawalFinalized) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L1StandardBridgeETHWithdrawalFinalizedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L1StandardBridgeETHWithdrawalFinalizedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L1StandardBridgeETHWithdrawalFinalized represents a ETHWithdrawalFinalized event raised by the L1StandardBridge contract. +type L1StandardBridgeETHWithdrawalFinalized struct { + From common.Address + To common.Address + Amount *big.Int + ExtraData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterETHWithdrawalFinalized is a free log retrieval operation binding the contract event 0x2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e631. +// +// Solidity: event ETHWithdrawalFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) FilterETHWithdrawalFinalized(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*L1StandardBridgeETHWithdrawalFinalizedIterator, 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 := _L1StandardBridge.contract.FilterLogs(opts, "ETHWithdrawalFinalized", fromRule, toRule) + if err != nil { + return nil, err + } + return &L1StandardBridgeETHWithdrawalFinalizedIterator{contract: _L1StandardBridge.contract, event: "ETHWithdrawalFinalized", logs: logs, sub: sub}, nil +} + +// WatchETHWithdrawalFinalized is a free log subscription operation binding the contract event 0x2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e631. +// +// Solidity: event ETHWithdrawalFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) WatchETHWithdrawalFinalized(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeETHWithdrawalFinalized, 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 := _L1StandardBridge.contract.WatchLogs(opts, "ETHWithdrawalFinalized", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L1StandardBridgeETHWithdrawalFinalized) + if err := _L1StandardBridge.contract.UnpackLog(event, "ETHWithdrawalFinalized", 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 +} + +// ParseETHWithdrawalFinalized is a log parse operation binding the contract event 0x2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e631. +// +// Solidity: event ETHWithdrawalFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_L1StandardBridge *L1StandardBridgeFilterer) ParseETHWithdrawalFinalized(log types.Log) (*L1StandardBridgeETHWithdrawalFinalized, error) { + event := new(L1StandardBridgeETHWithdrawalFinalized) + if err := _L1StandardBridge.contract.UnpackLog(event, "ETHWithdrawalFinalized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// L1StandardBridgeInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the L1StandardBridge contract. +type L1StandardBridgeInitializedIterator struct { + Event *L1StandardBridgeInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L1StandardBridgeInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L1StandardBridgeInitialized) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L1StandardBridgeInitialized) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L1StandardBridgeInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L1StandardBridgeInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L1StandardBridgeInitialized represents a Initialized event raised by the L1StandardBridge contract. +type L1StandardBridgeInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_L1StandardBridge *L1StandardBridgeFilterer) FilterInitialized(opts *bind.FilterOpts) (*L1StandardBridgeInitializedIterator, error) { + + logs, sub, err := _L1StandardBridge.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &L1StandardBridgeInitializedIterator{contract: _L1StandardBridge.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_L1StandardBridge *L1StandardBridgeFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *L1StandardBridgeInitialized) (event.Subscription, error) { + + logs, sub, err := _L1StandardBridge.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: + // New log arrived, parse the event and forward to the user + event := new(L1StandardBridgeInitialized) + if err := _L1StandardBridge.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 +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_L1StandardBridge *L1StandardBridgeFilterer) ParseInitialized(log types.Log) (*L1StandardBridgeInitialized, error) { + event := new(L1StandardBridgeInitialized) + if err := _L1StandardBridge.contract.UnpackLog(event, "Initialized", log); err != nil { return nil, err } event.Raw = log diff --git a/op-bindings/bindings/l2crossdomainmessenger.go b/op-bindings/bindings/l2crossdomainmessenger.go index ae34bfe48..26bc69cfd 100644 --- a/op-bindings/bindings/l2crossdomainmessenger.go +++ b/op-bindings/bindings/l2crossdomainmessenger.go @@ -26,13 +26,12 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription - _ = abi.ConvertType ) // L2CrossDomainMessengerMetaData contains all meta data concerning the L2CrossDomainMessenger contract. var L2CrossDomainMessengerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1CrossDomainMessenger\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"FailedRelayedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"RelayedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"messageNonce\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"}],\"name\":\"SentMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSAGE_VERSION\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_MESSENGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_CALL_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_RESERVED_GAS\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"}],\"name\":\"baseGas\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"failedMessages\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"relayMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"}],\"name\":\"sendMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"successfulMessages\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"xDomainMessageSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6101006040523480156200001257600080fd5b5060405162001de138038062001de1833981016040819052620000359162000226565b6001600160a01b038116608052600160a052600060c081905260e0526200005b62000062565b5062000258565b600054610100900460ff1615808015620000835750600054600160ff909116105b80620000b35750620000a0306200019460201b620011251760201c565b158015620000b3575060005460ff166001145b6200011c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000140576000805461ff0019166101001790555b6200014a620001a3565b801562000191576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6001600160a01b03163b151590565b600054610100900460ff16620002105760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000113565b606680546001600160a01b03191661dead179055565b6000602082840312156200023957600080fd5b81516001600160a01b03811681146200025157600080fd5b9392505050565b60805160a05160c05160e051611b41620002a06000396000610607015260006105de015260006105b50152600081816102cd015281816103c50152610a7c0152611b416000f3fe6080604052600436106101445760003560e01c80636e296e45116100c0578063a4e7f8bd11610074578063b28ade2511610059578063b28ade251461034f578063d764ad0b1461036f578063ecc704281461038257600080fd5b8063a4e7f8bd146102ef578063b1b1b2091461031f57600080fd5b806383a74074116100a557806383a74074146102a45780638cbeeef2146101e35780639fce812c146102bb57600080fd5b80636e296e45146102555780638129fc1c1461028f57600080fd5b80633f827a5a1161011757806354fd4d50116100fc57806354fd4d50146101f95780635644cfdf1461021b5780635c975abb1461023157600080fd5b80633f827a5a146101bb5780634c1d6a69146101e357600080fd5b8063028f85f7146101495780630c5684981461017c5780632828d7e8146101915780633dbb202b146101a6575b600080fd5b34801561015557600080fd5b5061015e601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561018857600080fd5b5061015e603f81565b34801561019d57600080fd5b5061015e604081565b6101b96101b4366004611609565b6103c0565b005b3480156101c757600080fd5b506101d0600081565b60405161ffff9091168152602001610173565b3480156101ef57600080fd5b5061015e619c4081565b34801561020557600080fd5b5061020e6105ae565b60405161017391906116e8565b34801561022757600080fd5b5061015e61138881565b34801561023d57600080fd5b5060335460ff165b6040519015158152602001610173565b34801561026157600080fd5b5061026a610651565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610173565b34801561029b57600080fd5b506101b961073d565b3480156102b057600080fd5b5061015e62030d4081565b3480156102c757600080fd5b5061026a7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102fb57600080fd5b5061024561030a366004611702565b60686020526000908152604090205460ff1681565b34801561032b57600080fd5b5061024561033a366004611702565b60656020526000908152604090205460ff1681565b34801561035b57600080fd5b5061015e61036a36600461171b565b6108cf565b6101b961037d36600461176f565b61093d565b34801561038e57600080fd5b506067547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16604051908152602001610173565b6104d87f00000000000000000000000000000000000000000000000000000000000000006103ef8585856108cf565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061043a6067547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b338a34898c8c604051602401610456979695949392919061183a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611141565b3373ffffffffffffffffffffffffffffffffffffffff85167fdd28cef75ff18fb538e43317144469f339702f973eace2bc808f2acc37db310e34868661053d6067547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b8760405161054f959493929190611899565b60405180910390a35050606780547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60606105d97f00000000000000000000000000000000000000000000000000000000000000006111cf565b6106027f00000000000000000000000000000000000000000000000000000000000000006111cf565b61062b7f00000000000000000000000000000000000000000000000000000000000000006111cf565b60405160200161063d939291906118d1565b604051602081830303815290604052905090565b60665460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610720576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084015b60405180910390fd5b5060665473ffffffffffffffffffffffffffffffffffffffff1690565b600054610100900460ff161580801561075d5750600054600160ff909116105b806107775750303b158015610777575060005460ff166001145b610803576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610717565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561086157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61086961128d565b80156108cc57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6000611388619c4080603f6108eb604063ffffffff8816611976565b6108f591906119a6565b610900601088611976565b61090d9062030d406119f4565b61091791906119f4565b61092191906119f4565b61092b91906119f4565b61093591906119f4565b949350505050565b60f087901c600181106109f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206d6573736167657320697320737570706f7274656420617420746860648201527f69732074696d6500000000000000000000000000000000000000000000000000608482015260a401610717565b6000610a3e898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061135292505050565b905073ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef330181167f000000000000000000000000000000000000000000000000000000000000000090911603610ad657853414610ab257610ab2611a20565b60008181526068602052604090205460ff1615610ad157610ad1611a20565b610c28565b3415610b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610717565b60008181526068602052604090205460ff16610c28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610717565b610c3187611375565b15610ce4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610717565b60008181526065602052604090205460ff1615610d83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610717565b610da485610d95611388619c406119f4565b67ffffffffffffffff166113ca565b1580610dca575060665473ffffffffffffffffffffffffffffffffffffffff1661dead14155b15610ee35760008181526068602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201610edc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610717565b505061111c565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a161790556000610f7488619c405a610f379190611a4f565b8988888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113e892505050565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801561100b5760008281526065602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2611118565b60008281526068602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610717565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6040517fc2b3e5ac0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000039063c2b3e5ac90849061119790889088908790600401611a66565b6000604051808303818588803b1580156111b057600080fd5b505af11580156111c4573d6000803e3d6000fd5b505050505050505050565b606060006111dc83611402565b600101905060008167ffffffffffffffff8111156111fc576111fc611aae565b6040519080825280601f01601f191660200182016040528015611226576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461123057509392505050565b600054610100900460ff16611324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610717565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055565b60006113628787878787876114e4565b8051906020012090509695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82163014806113c4575073ffffffffffffffffffffffffffffffffffffffff8216734200000000000000000000000000000000000003145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061144b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611477576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061149557662386f26fc10000830492506010015b6305f5e10083106114ad576305f5e100830492506008015b61271083106114c157612710830492506004015b606483106114d3576064830492506002015b600a83106113c45760010192915050565b606086868686868660405160240161150196959493929190611add565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146115a757600080fd5b919050565b60008083601f8401126115be57600080fd5b50813567ffffffffffffffff8111156115d657600080fd5b6020830191508360208285010111156115ee57600080fd5b9250929050565b803563ffffffff811681146115a757600080fd5b6000806000806060858703121561161f57600080fd5b61162885611583565b9350602085013567ffffffffffffffff81111561164457600080fd5b611650878288016115ac565b90945092506116639050604086016115f5565b905092959194509250565b60005b83811015611689578181015183820152602001611671565b83811115611698576000848401525b50505050565b600081518084526116b681602086016020860161166e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006116fb602083018461169e565b9392505050565b60006020828403121561171457600080fd5b5035919050565b60008060006040848603121561173057600080fd5b833567ffffffffffffffff81111561174757600080fd5b611753868287016115ac565b90945092506117669050602085016115f5565b90509250925092565b600080600080600080600060c0888a03121561178a57600080fd5b8735965061179a60208901611583565b95506117a860408901611583565b9450606088013593506080880135925060a088013567ffffffffffffffff8111156117d257600080fd5b6117de8a828b016115ac565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a083015261188c60c0830184866117f1565b9998505050505050505050565b8581526080602082015260006118b36080830186886117f1565b905083604083015263ffffffff831660608301529695505050505050565b600084516118e381846020890161166e565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161191f816001850160208a0161166e565b6001920191820152835161193a81600284016020880161166e565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168183048111821515161561199d5761199d611947565b02949350505050565b600067ffffffffffffffff808416806119e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611a1757611a17611947565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611a6157611a61611947565b500390565b73ffffffffffffffffffffffffffffffffffffffff8416815267ffffffffffffffff83166020820152606060408201526000611aa5606083018461169e565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611b2860c083018461169e565b9897505050505050505056fea164736f6c634300080f000a", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1CrossDomainMessenger\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"FailedRelayedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"RelayedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"messageNonce\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"}],\"name\":\"SentMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SentMessageExtension1\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSAGE_VERSION\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_MESSENGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_CALL_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAY_RESERVED_GAS\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"}],\"name\":\"baseGas\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"failedMessages\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1CrossDomainMessenger\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"relayMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"}],\"name\":\"sendMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"successfulMessages\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"xDomainMessageSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60a06040523480156200001157600080fd5b5060405162001db738038062001db78339810160408190526200003491620001e4565b6001600160a01b0381166080526200004b62000052565b5062000216565b600054600290600160a81b900460ff161580156200007e575060005460ff808316600160a01b90920416105b620000e75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a81b1960ff8416600160a01b021661ffff60a01b1990911617600160a81b179055620001196200015f565b6000805460ff60a81b1916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b600054600160a81b900460ff16620001ce5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000de565b60cc80546001600160a01b03191661dead179055565b600060208284031215620001f757600080fd5b81516001600160a01b03811681146200020f57600080fd5b9392505050565b608051611b7062000247600039600081816102dd0152818161034e0152818161043f0152610bef0152611b706000f3fe6080604052600436106101445760003560e01c80638129fc1c116100c0578063a711986911610074578063b28ade2511610059578063b28ade25146103a2578063d764ad0b146103c2578063ecc70428146103d557600080fd5b8063a71198691461033f578063b1b1b2091461037257600080fd5b80638cbeeef2116100a55780638cbeeef2146101e35780639fce812c146102cb578063a4e7f8bd146102ff57600080fd5b80638129fc1c1461029f57806383a74074146102b457600080fd5b80633f827a5a1161011757806354fd4d50116100fc57806354fd4d50146101f95780635644cfdf1461024f5780636e296e451461026557600080fd5b80633f827a5a146101bb5780634c1d6a69146101e357600080fd5b8063028f85f7146101495780630c5684981461017c5780632828d7e8146101915780633dbb202b146101a6575b600080fd5b34801561015557600080fd5b5061015e601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561018857600080fd5b5061015e603f81565b34801561019d57600080fd5b5061015e604081565b6101b96101b436600461168c565b61043a565b005b3480156101c757600080fd5b506101d0600181565b60405161ffff9091168152602001610173565b3480156101ef57600080fd5b5061015e619c4081565b34801561020557600080fd5b506102426040518060400160405280600581526020017f312e362e3000000000000000000000000000000000000000000000000000000081525081565b604051610173919061175c565b34801561025b57600080fd5b5061015e61138881565b34801561027157600080fd5b5061027a61069e565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610173565b3480156102ab57600080fd5b506101b961078a565b3480156102c057600080fd5b5061015e62030d4081565b3480156102d757600080fd5b5061027a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561030b57600080fd5b5061032f61031a366004611776565b60ce6020526000908152604090205460ff1681565b6040519015158152602001610173565b34801561034b57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061027a565b34801561037e57600080fd5b5061032f61038d366004611776565b60cb6020526000908152604090205460ff1681565b3480156103ae57600080fd5b5061015e6103bd36600461178f565b61094d565b6101b96103d03660046117e3565b6109bb565b3480156103e157600080fd5b5061042c60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b604051908152602001610173565b6105737f000000000000000000000000000000000000000000000000000000000000000061046985858561094d565b347fd764ad0b000000000000000000000000000000000000000000000000000000006104d560cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016104f197969594939291906118ae565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611298565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385856105f860cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b8660405161060a95949392919061190d565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21530161076d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084015b60405180910390fd5b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000546002907501000000000000000000000000000000000000000000900460ff161580156107d8575060005460ff8083167401000000000000000000000000000000000000000090920416105b610864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610764565b600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff60ff84167401000000000000000000000000000000000000000002167fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff9091161775010000000000000000000000000000000000000000001790556108ec611326565b600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b6000611388619c4080603f610969604063ffffffff881661198a565b61097391906119ba565b61097e60108861198a565b61098b9062030d40611a08565b6109959190611a08565b61099f9190611a08565b6109a99190611a08565b6109b39190611a08565b949350505050565b60f087901c60028110610a76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a401610764565b8061ffff16600003610b6b576000610ac7878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506113ff915050565b600081815260cb602052604090205490915060ff1615610b69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c617965640000000000000000006064820152608401610764565b505b6000610bb1898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061141e92505050565b905073ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef330181167f000000000000000000000000000000000000000000000000000000000000000090911603610c4957853414610c2557610c25611a34565b600081815260ce602052604090205460ff1615610c4457610c44611a34565b610d9b565b3415610cfd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610764565b600081815260ce602052604090205460ff16610d9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610764565b610da487611441565b15610e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610764565b600081815260cb602052604090205460ff1615610ef6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610764565b610f1785610f08611388619c40611a08565b67ffffffffffffffff16611496565b1580610f3d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561105657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161104f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610764565b505061128f565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a1617905560006110e788619c405a6110aa9190611a63565b8988888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114b492505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801561117e57600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a261128b565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161128b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610764565b5050505b50505050505050565b6040517fc2b3e5ac0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000169063c2b3e5ac9084906112ee90889088908790600401611a7a565b6000604051808303818588803b15801561130757600080fd5b505af115801561131b573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff166113d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610764565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055565b600061140d858585856114ce565b805190602001209050949350505050565b600061142e878787878787611567565b8051906020012090509695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611490575073ffffffffffffffffffffffffffffffffffffffff8216734200000000000000000000000000000000000016145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b6060848484846040516024016114e79493929190611ac2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b606086868686868660405160240161158496959493929190611b0c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461162a57600080fd5b919050565b60008083601f84011261164157600080fd5b50813567ffffffffffffffff81111561165957600080fd5b60208301915083602082850101111561167157600080fd5b9250929050565b803563ffffffff8116811461162a57600080fd5b600080600080606085870312156116a257600080fd5b6116ab85611606565b9350602085013567ffffffffffffffff8111156116c757600080fd5b6116d38782880161162f565b90945092506116e6905060408601611678565b905092959194509250565b6000815180845260005b81811015611717576020818501810151868301820152016116fb565b81811115611729576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061176f60208301846116f1565b9392505050565b60006020828403121561178857600080fd5b5035919050565b6000806000604084860312156117a457600080fd5b833567ffffffffffffffff8111156117bb57600080fd5b6117c78682870161162f565b90945092506117da905060208501611678565b90509250925092565b600080600080600080600060c0888a0312156117fe57600080fd5b8735965061180e60208901611606565b955061181c60408901611606565b9450606088013593506080880135925060a088013567ffffffffffffffff81111561184657600080fd5b6118528a828b0161162f565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a083015261190060c083018486611865565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815260806020820152600061193d608083018688611865565b905083604083015263ffffffff831660608301529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818516818304811182151516156119b1576119b161195b565b02949350505050565b600067ffffffffffffffff808416806119fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611a2b57611a2b61195b565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611a7557611a7561195b565b500390565b73ffffffffffffffffffffffffffffffffffffffff8416815267ffffffffffffffff83166020820152606060408201526000611ab960608301846116f1565b95945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152611afb60808301856116f1565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611b5760c08301846116f1565b9897505050505050505056fea164736f6c634300080f000a", } // L2CrossDomainMessengerABI is the input ABI used to generate the binding from. @@ -157,11 +156,11 @@ func NewL2CrossDomainMessengerFilterer(address common.Address, filterer bind.Con // bindL2CrossDomainMessenger binds a generic wrapper to an already deployed contract. func bindL2CrossDomainMessenger(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := L2CrossDomainMessengerMetaData.GetAbi() + parsed, err := abi.JSON(strings.NewReader(L2CrossDomainMessengerABI)) if err != nil { return nil, err } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and @@ -543,66 +542,66 @@ func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) FailedMessag return _L2CrossDomainMessenger.Contract.FailedMessages(&_L2CrossDomainMessenger.CallOpts, arg0) } -// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. +// L1CrossDomainMessenger is a free data retrieval call binding the contract method 0xa7119869. // -// Solidity: function messageNonce() view returns(uint256) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) MessageNonce(opts *bind.CallOpts) (*big.Int, error) { +// Solidity: function l1CrossDomainMessenger() view returns(address) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) L1CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _L2CrossDomainMessenger.contract.Call(opts, &out, "messageNonce") + err := _L2CrossDomainMessenger.contract.Call(opts, &out, "l1CrossDomainMessenger") if err != nil { - return *new(*big.Int), err + return *new(common.Address), err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) return out0, err } -// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. +// L1CrossDomainMessenger is a free data retrieval call binding the contract method 0xa7119869. // -// Solidity: function messageNonce() view returns(uint256) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) MessageNonce() (*big.Int, error) { - return _L2CrossDomainMessenger.Contract.MessageNonce(&_L2CrossDomainMessenger.CallOpts) +// Solidity: function l1CrossDomainMessenger() view returns(address) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) L1CrossDomainMessenger() (common.Address, error) { + return _L2CrossDomainMessenger.Contract.L1CrossDomainMessenger(&_L2CrossDomainMessenger.CallOpts) } -// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. +// L1CrossDomainMessenger is a free data retrieval call binding the contract method 0xa7119869. // -// Solidity: function messageNonce() view returns(uint256) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) MessageNonce() (*big.Int, error) { - return _L2CrossDomainMessenger.Contract.MessageNonce(&_L2CrossDomainMessenger.CallOpts) +// Solidity: function l1CrossDomainMessenger() view returns(address) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) L1CrossDomainMessenger() (common.Address, error) { + return _L2CrossDomainMessenger.Contract.L1CrossDomainMessenger(&_L2CrossDomainMessenger.CallOpts) } -// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. // -// Solidity: function paused() view returns(bool) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) Paused(opts *bind.CallOpts) (bool, error) { +// Solidity: function messageNonce() view returns(uint256) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) MessageNonce(opts *bind.CallOpts) (*big.Int, error) { var out []interface{} - err := _L2CrossDomainMessenger.contract.Call(opts, &out, "paused") + err := _L2CrossDomainMessenger.contract.Call(opts, &out, "messageNonce") if err != nil { - return *new(bool), err + return *new(*big.Int), err } - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) return out0, err } -// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. // -// Solidity: function paused() view returns(bool) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) Paused() (bool, error) { - return _L2CrossDomainMessenger.Contract.Paused(&_L2CrossDomainMessenger.CallOpts) +// Solidity: function messageNonce() view returns(uint256) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) MessageNonce() (*big.Int, error) { + return _L2CrossDomainMessenger.Contract.MessageNonce(&_L2CrossDomainMessenger.CallOpts) } -// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// MessageNonce is a free data retrieval call binding the contract method 0xecc70428. // -// Solidity: function paused() view returns(bool) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) Paused() (bool, error) { - return _L2CrossDomainMessenger.Contract.Paused(&_L2CrossDomainMessenger.CallOpts) +// Solidity: function messageNonce() view returns(uint256) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) MessageNonce() (*big.Int, error) { + return _L2CrossDomainMessenger.Contract.MessageNonce(&_L2CrossDomainMessenger.CallOpts) } // SuccessfulMessages is a free data retrieval call binding the contract method 0xb1b1b209. @@ -1039,140 +1038,6 @@ func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) ParseInitialized( return event, nil } -// L2CrossDomainMessengerPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the L2CrossDomainMessenger contract. -type L2CrossDomainMessengerPausedIterator struct { - Event *L2CrossDomainMessengerPaused // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *L2CrossDomainMessengerPausedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L2CrossDomainMessengerPaused) - 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 - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L2CrossDomainMessengerPaused) - 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() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L2CrossDomainMessengerPausedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L2CrossDomainMessengerPausedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L2CrossDomainMessengerPaused represents a Paused event raised by the L2CrossDomainMessenger contract. -type L2CrossDomainMessengerPaused struct { - Account common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterPaused is a free log retrieval operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. -// -// Solidity: event Paused(address account) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) FilterPaused(opts *bind.FilterOpts) (*L2CrossDomainMessengerPausedIterator, error) { - - logs, sub, err := _L2CrossDomainMessenger.contract.FilterLogs(opts, "Paused") - if err != nil { - return nil, err - } - return &L2CrossDomainMessengerPausedIterator{contract: _L2CrossDomainMessenger.contract, event: "Paused", logs: logs, sub: sub}, nil -} - -// WatchPaused is a free log subscription operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. -// -// Solidity: event Paused(address account) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *L2CrossDomainMessengerPaused) (event.Subscription, error) { - - logs, sub, err := _L2CrossDomainMessenger.contract.WatchLogs(opts, "Paused") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L2CrossDomainMessengerPaused) - if err := _L2CrossDomainMessenger.contract.UnpackLog(event, "Paused", 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 -} - -// ParsePaused is a log parse operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. -// -// Solidity: event Paused(address account) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) ParsePaused(log types.Log) (*L2CrossDomainMessengerPaused, error) { - event := new(L2CrossDomainMessengerPaused) - if err := _L2CrossDomainMessenger.contract.UnpackLog(event, "Paused", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // L2CrossDomainMessengerRelayedMessageIterator is returned from FilterRelayedMessage and is used to iterate over the raw logs and unpacked data for RelayedMessage events raised by the L2CrossDomainMessenger contract. type L2CrossDomainMessengerRelayedMessageIterator struct { Event *L2CrossDomainMessengerRelayedMessage // Event containing the contract specifics and raw log @@ -1388,49 +1253,40 @@ func (it *L2CrossDomainMessengerSentMessageIterator) Close() error { type L2CrossDomainMessengerSentMessage struct { Target common.Address Sender common.Address - Value *big.Int Message []byte MessageNonce *big.Int GasLimit *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterSentMessage is a free log retrieval operation binding the contract event 0xdd28cef75ff18fb538e43317144469f339702f973eace2bc808f2acc37db310e. +// FilterSentMessage is a free log retrieval operation binding the contract event 0xcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a. // -// Solidity: event SentMessage(address indexed target, address indexed sender, uint256 value, bytes message, uint256 messageNonce, uint256 gasLimit) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) FilterSentMessage(opts *bind.FilterOpts, target []common.Address, sender []common.Address) (*L2CrossDomainMessengerSentMessageIterator, error) { +// Solidity: event SentMessage(address indexed target, address sender, bytes message, uint256 messageNonce, uint256 gasLimit) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) FilterSentMessage(opts *bind.FilterOpts, target []common.Address) (*L2CrossDomainMessengerSentMessageIterator, error) { var targetRule []interface{} for _, targetItem := range target { targetRule = append(targetRule, targetItem) } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - logs, sub, err := _L2CrossDomainMessenger.contract.FilterLogs(opts, "SentMessage", targetRule, senderRule) + logs, sub, err := _L2CrossDomainMessenger.contract.FilterLogs(opts, "SentMessage", targetRule) if err != nil { return nil, err } return &L2CrossDomainMessengerSentMessageIterator{contract: _L2CrossDomainMessenger.contract, event: "SentMessage", logs: logs, sub: sub}, nil } -// WatchSentMessage is a free log subscription operation binding the contract event 0xdd28cef75ff18fb538e43317144469f339702f973eace2bc808f2acc37db310e. +// WatchSentMessage is a free log subscription operation binding the contract event 0xcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a. // -// Solidity: event SentMessage(address indexed target, address indexed sender, uint256 value, bytes message, uint256 messageNonce, uint256 gasLimit) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) WatchSentMessage(opts *bind.WatchOpts, sink chan<- *L2CrossDomainMessengerSentMessage, target []common.Address, sender []common.Address) (event.Subscription, error) { +// Solidity: event SentMessage(address indexed target, address sender, bytes message, uint256 messageNonce, uint256 gasLimit) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) WatchSentMessage(opts *bind.WatchOpts, sink chan<- *L2CrossDomainMessengerSentMessage, target []common.Address) (event.Subscription, error) { var targetRule []interface{} for _, targetItem := range target { targetRule = append(targetRule, targetItem) } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - logs, sub, err := _L2CrossDomainMessenger.contract.WatchLogs(opts, "SentMessage", targetRule, senderRule) + logs, sub, err := _L2CrossDomainMessenger.contract.WatchLogs(opts, "SentMessage", targetRule) if err != nil { return nil, err } @@ -1462,9 +1318,9 @@ func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) WatchSentMessage( }), nil } -// ParseSentMessage is a log parse operation binding the contract event 0xdd28cef75ff18fb538e43317144469f339702f973eace2bc808f2acc37db310e. +// ParseSentMessage is a log parse operation binding the contract event 0xcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a. // -// Solidity: event SentMessage(address indexed target, address indexed sender, uint256 value, bytes message, uint256 messageNonce, uint256 gasLimit) +// Solidity: event SentMessage(address indexed target, address sender, bytes message, uint256 messageNonce, uint256 gasLimit) func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) ParseSentMessage(log types.Log) (*L2CrossDomainMessengerSentMessage, error) { event := new(L2CrossDomainMessengerSentMessage) if err := _L2CrossDomainMessenger.contract.UnpackLog(event, "SentMessage", log); err != nil { @@ -1474,9 +1330,9 @@ func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) ParseSentMessage( return event, nil } -// L2CrossDomainMessengerUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the L2CrossDomainMessenger contract. -type L2CrossDomainMessengerUnpausedIterator struct { - Event *L2CrossDomainMessengerUnpaused // Event containing the contract specifics and raw log +// L2CrossDomainMessengerSentMessageExtension1Iterator is returned from FilterSentMessageExtension1 and is used to iterate over the raw logs and unpacked data for SentMessageExtension1 events raised by the L2CrossDomainMessenger contract. +type L2CrossDomainMessengerSentMessageExtension1Iterator struct { + Event *L2CrossDomainMessengerSentMessageExtension1 // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1490,7 +1346,7 @@ type L2CrossDomainMessengerUnpausedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *L2CrossDomainMessengerUnpausedIterator) Next() bool { +func (it *L2CrossDomainMessengerSentMessageExtension1Iterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1499,7 +1355,7 @@ func (it *L2CrossDomainMessengerUnpausedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(L2CrossDomainMessengerUnpaused) + it.Event = new(L2CrossDomainMessengerSentMessageExtension1) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1514,7 +1370,7 @@ func (it *L2CrossDomainMessengerUnpausedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(L2CrossDomainMessengerUnpaused) + it.Event = new(L2CrossDomainMessengerSentMessageExtension1) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1530,41 +1386,52 @@ func (it *L2CrossDomainMessengerUnpausedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *L2CrossDomainMessengerUnpausedIterator) Error() error { +func (it *L2CrossDomainMessengerSentMessageExtension1Iterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *L2CrossDomainMessengerUnpausedIterator) Close() error { +func (it *L2CrossDomainMessengerSentMessageExtension1Iterator) Close() error { it.sub.Unsubscribe() return nil } -// L2CrossDomainMessengerUnpaused represents a Unpaused event raised by the L2CrossDomainMessenger contract. -type L2CrossDomainMessengerUnpaused struct { - Account common.Address - Raw types.Log // Blockchain specific contextual infos +// L2CrossDomainMessengerSentMessageExtension1 represents a SentMessageExtension1 event raised by the L2CrossDomainMessenger contract. +type L2CrossDomainMessengerSentMessageExtension1 struct { + Sender common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos } -// FilterUnpaused is a free log retrieval operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// FilterSentMessageExtension1 is a free log retrieval operation binding the contract event 0x8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d546. // -// Solidity: event Unpaused(address account) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) FilterUnpaused(opts *bind.FilterOpts) (*L2CrossDomainMessengerUnpausedIterator, error) { +// Solidity: event SentMessageExtension1(address indexed sender, uint256 value) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) FilterSentMessageExtension1(opts *bind.FilterOpts, sender []common.Address) (*L2CrossDomainMessengerSentMessageExtension1Iterator, error) { - logs, sub, err := _L2CrossDomainMessenger.contract.FilterLogs(opts, "Unpaused") + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _L2CrossDomainMessenger.contract.FilterLogs(opts, "SentMessageExtension1", senderRule) if err != nil { return nil, err } - return &L2CrossDomainMessengerUnpausedIterator{contract: _L2CrossDomainMessenger.contract, event: "Unpaused", logs: logs, sub: sub}, nil + return &L2CrossDomainMessengerSentMessageExtension1Iterator{contract: _L2CrossDomainMessenger.contract, event: "SentMessageExtension1", logs: logs, sub: sub}, nil } -// WatchUnpaused is a free log subscription operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// WatchSentMessageExtension1 is a free log subscription operation binding the contract event 0x8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d546. // -// Solidity: event Unpaused(address account) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *L2CrossDomainMessengerUnpaused) (event.Subscription, error) { +// Solidity: event SentMessageExtension1(address indexed sender, uint256 value) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) WatchSentMessageExtension1(opts *bind.WatchOpts, sink chan<- *L2CrossDomainMessengerSentMessageExtension1, sender []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } - logs, sub, err := _L2CrossDomainMessenger.contract.WatchLogs(opts, "Unpaused") + logs, sub, err := _L2CrossDomainMessenger.contract.WatchLogs(opts, "SentMessageExtension1", senderRule) if err != nil { return nil, err } @@ -1574,8 +1441,8 @@ func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) WatchUnpaused(opt select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(L2CrossDomainMessengerUnpaused) - if err := _L2CrossDomainMessenger.contract.UnpackLog(event, "Unpaused", log); err != nil { + event := new(L2CrossDomainMessengerSentMessageExtension1) + if err := _L2CrossDomainMessenger.contract.UnpackLog(event, "SentMessageExtension1", log); err != nil { return err } event.Raw = log @@ -1596,12 +1463,12 @@ func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) WatchUnpaused(opt }), nil } -// ParseUnpaused is a log parse operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// ParseSentMessageExtension1 is a log parse operation binding the contract event 0x8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d546. // -// Solidity: event Unpaused(address account) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) ParseUnpaused(log types.Log) (*L2CrossDomainMessengerUnpaused, error) { - event := new(L2CrossDomainMessengerUnpaused) - if err := _L2CrossDomainMessenger.contract.UnpackLog(event, "Unpaused", log); err != nil { +// Solidity: event SentMessageExtension1(address indexed sender, uint256 value) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerFilterer) ParseSentMessageExtension1(log types.Log) (*L2CrossDomainMessengerSentMessageExtension1, error) { + event := new(L2CrossDomainMessengerSentMessageExtension1) + if err := _L2CrossDomainMessenger.contract.UnpackLog(event, "SentMessageExtension1", log); err != nil { return nil, err } event.Raw = log diff --git a/op-bindings/bindings/l2crossdomainmessenger_more.go b/op-bindings/bindings/l2crossdomainmessenger_more.go index ab6eef890..30939b96a 100644 --- a/op-bindings/bindings/l2crossdomainmessenger_more.go +++ b/op-bindings/bindings/l2crossdomainmessenger_more.go @@ -9,11 +9,11 @@ import ( "github.com/ethereum-optimism/optimism/op-bindings/solc" ) -const L2CrossDomainMessengerStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)1012_storage\"},{\"astId\":1003,\"contract\":\"contracts/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"_paused\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_bool\"},{\"astId\":1004,\"contract\":\"contracts/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_array(t_uint256)1011_storage\"},{\"astId\":1005,\"contract\":\"contracts/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"successfulMessages\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1006,\"contract\":\"contracts/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"xDomainMsgSender\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_address\"},{\"astId\":1007,\"contract\":\"contracts/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"msgNonce\",\"offset\":0,\"slot\":\"103\",\"type\":\"t_uint240\"},{\"astId\":1008,\"contract\":\"contracts/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"failedMessages\",\"offset\":0,\"slot\":\"104\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1009,\"contract\":\"contracts/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"105\",\"type\":\"t_array(t_uint256)1010_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)1010_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[45]\",\"numberOfBytes\":\"1440\"},\"t_array(t_uint256)1011_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\"},\"t_array(t_uint256)1012_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_bytes32,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_bool\"},\"t_uint240\":{\"encoding\":\"inplace\",\"label\":\"uint240\",\"numberOfBytes\":\"30\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" +const L2CrossDomainMessengerStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"spacer_0_0_20\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_address\"},{\"astId\":1001,\"contract\":\"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"_initialized\",\"offset\":20,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1002,\"contract\":\"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"_initializing\",\"offset\":21,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1003,\"contract\":\"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"spacer_1_0_1600\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)50_storage\"},{\"astId\":1004,\"contract\":\"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"spacer_51_0_20\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_address\"},{\"astId\":1005,\"contract\":\"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"spacer_52_0_1568\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_array(t_uint256)49_storage\"},{\"astId\":1006,\"contract\":\"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"spacer_101_0_1\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_bool\"},{\"astId\":1007,\"contract\":\"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"spacer_102_0_1568\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_array(t_uint256)49_storage\"},{\"astId\":1008,\"contract\":\"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"spacer_151_0_32\",\"offset\":0,\"slot\":\"151\",\"type\":\"t_uint256\"},{\"astId\":1009,\"contract\":\"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"spacer_152_0_1568\",\"offset\":0,\"slot\":\"152\",\"type\":\"t_array(t_uint256)49_storage\"},{\"astId\":1010,\"contract\":\"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"spacer_201_0_32\",\"offset\":0,\"slot\":\"201\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1011,\"contract\":\"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"spacer_202_0_32\",\"offset\":0,\"slot\":\"202\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1012,\"contract\":\"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"successfulMessages\",\"offset\":0,\"slot\":\"203\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1013,\"contract\":\"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"xDomainMsgSender\",\"offset\":0,\"slot\":\"204\",\"type\":\"t_address\"},{\"astId\":1014,\"contract\":\"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"msgNonce\",\"offset\":0,\"slot\":\"205\",\"type\":\"t_uint240\"},{\"astId\":1015,\"contract\":\"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"failedMessages\",\"offset\":0,\"slot\":\"206\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1016,\"contract\":\"src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"207\",\"type\":\"t_array(t_uint256)42_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)42_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[42]\",\"numberOfBytes\":\"1344\",\"base\":\"t_uint256\"},\"t_array(t_uint256)49_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\",\"base\":\"t_uint256\"},\"t_array(t_uint256)50_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\",\"base\":\"t_uint256\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_bytes32,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_bool\"},\"t_uint240\":{\"encoding\":\"inplace\",\"label\":\"uint240\",\"numberOfBytes\":\"30\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" var L2CrossDomainMessengerStorageLayout = new(solc.StorageLayout) -var L2CrossDomainMessengerDeployedBin = "0x6080604052600436106101445760003560e01c80636e296e45116100c0578063a4e7f8bd11610074578063b28ade2511610059578063b28ade251461034f578063d764ad0b1461036f578063ecc704281461038257600080fd5b8063a4e7f8bd146102ef578063b1b1b2091461031f57600080fd5b806383a74074116100a557806383a74074146102a45780638cbeeef2146101e35780639fce812c146102bb57600080fd5b80636e296e45146102555780638129fc1c1461028f57600080fd5b80633f827a5a1161011757806354fd4d50116100fc57806354fd4d50146101f95780635644cfdf1461021b5780635c975abb1461023157600080fd5b80633f827a5a146101bb5780634c1d6a69146101e357600080fd5b8063028f85f7146101495780630c5684981461017c5780632828d7e8146101915780633dbb202b146101a6575b600080fd5b34801561015557600080fd5b5061015e601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561018857600080fd5b5061015e603f81565b34801561019d57600080fd5b5061015e604081565b6101b96101b4366004611609565b6103c0565b005b3480156101c757600080fd5b506101d0600081565b60405161ffff9091168152602001610173565b3480156101ef57600080fd5b5061015e619c4081565b34801561020557600080fd5b5061020e6105ae565b60405161017391906116e8565b34801561022757600080fd5b5061015e61138881565b34801561023d57600080fd5b5060335460ff165b6040519015158152602001610173565b34801561026157600080fd5b5061026a610651565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610173565b34801561029b57600080fd5b506101b961073d565b3480156102b057600080fd5b5061015e62030d4081565b3480156102c757600080fd5b5061026a7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102fb57600080fd5b5061024561030a366004611702565b60686020526000908152604090205460ff1681565b34801561032b57600080fd5b5061024561033a366004611702565b60656020526000908152604090205460ff1681565b34801561035b57600080fd5b5061015e61036a36600461171b565b6108cf565b6101b961037d36600461176f565b61093d565b34801561038e57600080fd5b506067547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16604051908152602001610173565b6104d87f00000000000000000000000000000000000000000000000000000000000000006103ef8585856108cf565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061043a6067547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b338a34898c8c604051602401610456979695949392919061183a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611141565b3373ffffffffffffffffffffffffffffffffffffffff85167fdd28cef75ff18fb538e43317144469f339702f973eace2bc808f2acc37db310e34868661053d6067547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b8760405161054f959493929190611899565b60405180910390a35050606780547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60606105d97f00000000000000000000000000000000000000000000000000000000000000006111cf565b6106027f00000000000000000000000000000000000000000000000000000000000000006111cf565b61062b7f00000000000000000000000000000000000000000000000000000000000000006111cf565b60405160200161063d939291906118d1565b604051602081830303815290604052905090565b60665460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610720576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084015b60405180910390fd5b5060665473ffffffffffffffffffffffffffffffffffffffff1690565b600054610100900460ff161580801561075d5750600054600160ff909116105b806107775750303b158015610777575060005460ff166001145b610803576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610717565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561086157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61086961128d565b80156108cc57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6000611388619c4080603f6108eb604063ffffffff8816611976565b6108f591906119a6565b610900601088611976565b61090d9062030d406119f4565b61091791906119f4565b61092191906119f4565b61092b91906119f4565b61093591906119f4565b949350505050565b60f087901c600181106109f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206d6573736167657320697320737570706f7274656420617420746860648201527f69732074696d6500000000000000000000000000000000000000000000000000608482015260a401610717565b6000610a3e898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061135292505050565b905073ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef330181167f000000000000000000000000000000000000000000000000000000000000000090911603610ad657853414610ab257610ab2611a20565b60008181526068602052604090205460ff1615610ad157610ad1611a20565b610c28565b3415610b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610717565b60008181526068602052604090205460ff16610c28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610717565b610c3187611375565b15610ce4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610717565b60008181526065602052604090205460ff1615610d83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610717565b610da485610d95611388619c406119f4565b67ffffffffffffffff166113ca565b1580610dca575060665473ffffffffffffffffffffffffffffffffffffffff1661dead14155b15610ee35760008181526068602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201610edc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610717565b505061111c565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a161790556000610f7488619c405a610f379190611a4f565b8988888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113e892505050565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801561100b5760008281526065602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2611118565b60008281526068602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611118576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610717565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6040517fc2b3e5ac0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000039063c2b3e5ac90849061119790889088908790600401611a66565b6000604051808303818588803b1580156111b057600080fd5b505af11580156111c4573d6000803e3d6000fd5b505050505050505050565b606060006111dc83611402565b600101905060008167ffffffffffffffff8111156111fc576111fc611aae565b6040519080825280601f01601f191660200182016040528015611226576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461123057509392505050565b600054610100900460ff16611324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610717565b606680547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055565b60006113628787878787876114e4565b8051906020012090509695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82163014806113c4575073ffffffffffffffffffffffffffffffffffffffff8216734200000000000000000000000000000000000003145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061144b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611477576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061149557662386f26fc10000830492506010015b6305f5e10083106114ad576305f5e100830492506008015b61271083106114c157612710830492506004015b606483106114d3576064830492506002015b600a83106113c45760010192915050565b606086868686868660405160240161150196959493929190611add565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146115a757600080fd5b919050565b60008083601f8401126115be57600080fd5b50813567ffffffffffffffff8111156115d657600080fd5b6020830191508360208285010111156115ee57600080fd5b9250929050565b803563ffffffff811681146115a757600080fd5b6000806000806060858703121561161f57600080fd5b61162885611583565b9350602085013567ffffffffffffffff81111561164457600080fd5b611650878288016115ac565b90945092506116639050604086016115f5565b905092959194509250565b60005b83811015611689578181015183820152602001611671565b83811115611698576000848401525b50505050565b600081518084526116b681602086016020860161166e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006116fb602083018461169e565b9392505050565b60006020828403121561171457600080fd5b5035919050565b60008060006040848603121561173057600080fd5b833567ffffffffffffffff81111561174757600080fd5b611753868287016115ac565b90945092506117669050602085016115f5565b90509250925092565b600080600080600080600060c0888a03121561178a57600080fd5b8735965061179a60208901611583565b95506117a860408901611583565b9450606088013593506080880135925060a088013567ffffffffffffffff8111156117d257600080fd5b6117de8a828b016115ac565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a083015261188c60c0830184866117f1565b9998505050505050505050565b8581526080602082015260006118b36080830186886117f1565b905083604083015263ffffffff831660608301529695505050505050565b600084516118e381846020890161166e565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161191f816001850160208a0161166e565b6001920191820152835161193a81600284016020880161166e565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168183048111821515161561199d5761199d611947565b02949350505050565b600067ffffffffffffffff808416806119e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611a1757611a17611947565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611a6157611a61611947565b500390565b73ffffffffffffffffffffffffffffffffffffffff8416815267ffffffffffffffff83166020820152606060408201526000611aa5606083018461169e565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611b2860c083018461169e565b9897505050505050505056fea164736f6c634300080f000a" +var L2CrossDomainMessengerDeployedBin = "0x6080604052600436106101445760003560e01c80638129fc1c116100c0578063a711986911610074578063b28ade2511610059578063b28ade25146103a2578063d764ad0b146103c2578063ecc70428146103d557600080fd5b8063a71198691461033f578063b1b1b2091461037257600080fd5b80638cbeeef2116100a55780638cbeeef2146101e35780639fce812c146102cb578063a4e7f8bd146102ff57600080fd5b80638129fc1c1461029f57806383a74074146102b457600080fd5b80633f827a5a1161011757806354fd4d50116100fc57806354fd4d50146101f95780635644cfdf1461024f5780636e296e451461026557600080fd5b80633f827a5a146101bb5780634c1d6a69146101e357600080fd5b8063028f85f7146101495780630c5684981461017c5780632828d7e8146101915780633dbb202b146101a6575b600080fd5b34801561015557600080fd5b5061015e601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561018857600080fd5b5061015e603f81565b34801561019d57600080fd5b5061015e604081565b6101b96101b436600461168c565b61043a565b005b3480156101c757600080fd5b506101d0600181565b60405161ffff9091168152602001610173565b3480156101ef57600080fd5b5061015e619c4081565b34801561020557600080fd5b506102426040518060400160405280600581526020017f312e362e3000000000000000000000000000000000000000000000000000000081525081565b604051610173919061175c565b34801561025b57600080fd5b5061015e61138881565b34801561027157600080fd5b5061027a61069e565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610173565b3480156102ab57600080fd5b506101b961078a565b3480156102c057600080fd5b5061015e62030d4081565b3480156102d757600080fd5b5061027a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561030b57600080fd5b5061032f61031a366004611776565b60ce6020526000908152604090205460ff1681565b6040519015158152602001610173565b34801561034b57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061027a565b34801561037e57600080fd5b5061032f61038d366004611776565b60cb6020526000908152604090205460ff1681565b3480156103ae57600080fd5b5061015e6103bd36600461178f565b61094d565b6101b96103d03660046117e3565b6109bb565b3480156103e157600080fd5b5061042c60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b604051908152602001610173565b6105737f000000000000000000000000000000000000000000000000000000000000000061046985858561094d565b347fd764ad0b000000000000000000000000000000000000000000000000000000006104d560cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016104f197969594939291906118ae565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611298565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385856105f860cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b8660405161060a95949392919061190d565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21530161076d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084015b60405180910390fd5b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000546002907501000000000000000000000000000000000000000000900460ff161580156107d8575060005460ff8083167401000000000000000000000000000000000000000090920416105b610864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610764565b600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff60ff84167401000000000000000000000000000000000000000002167fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff9091161775010000000000000000000000000000000000000000001790556108ec611326565b600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b6000611388619c4080603f610969604063ffffffff881661198a565b61097391906119ba565b61097e60108861198a565b61098b9062030d40611a08565b6109959190611a08565b61099f9190611a08565b6109a99190611a08565b6109b39190611a08565b949350505050565b60f087901c60028110610a76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a401610764565b8061ffff16600003610b6b576000610ac7878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506113ff915050565b600081815260cb602052604090205490915060ff1615610b69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c617965640000000000000000006064820152608401610764565b505b6000610bb1898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061141e92505050565b905073ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef330181167f000000000000000000000000000000000000000000000000000000000000000090911603610c4957853414610c2557610c25611a34565b600081815260ce602052604090205460ff1615610c4457610c44611a34565b610d9b565b3415610cfd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610764565b600081815260ce602052604090205460ff16610d9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610764565b610da487611441565b15610e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610764565b600081815260cb602052604090205460ff1615610ef6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610764565b610f1785610f08611388619c40611a08565b67ffffffffffffffff16611496565b1580610f3d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561105657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161104f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610764565b505061128f565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a1617905560006110e788619c405a6110aa9190611a63565b8988888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114b492505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801561117e57600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a261128b565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161128b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610764565b5050505b50505050505050565b6040517fc2b3e5ac0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000169063c2b3e5ac9084906112ee90889088908790600401611a7a565b6000604051808303818588803b15801561130757600080fd5b505af115801561131b573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff166113d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610764565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055565b600061140d858585856114ce565b805190602001209050949350505050565b600061142e878787878787611567565b8051906020012090509695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611490575073ffffffffffffffffffffffffffffffffffffffff8216734200000000000000000000000000000000000016145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b6060848484846040516024016114e79493929190611ac2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b606086868686868660405160240161158496959493929190611b0c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461162a57600080fd5b919050565b60008083601f84011261164157600080fd5b50813567ffffffffffffffff81111561165957600080fd5b60208301915083602082850101111561167157600080fd5b9250929050565b803563ffffffff8116811461162a57600080fd5b600080600080606085870312156116a257600080fd5b6116ab85611606565b9350602085013567ffffffffffffffff8111156116c757600080fd5b6116d38782880161162f565b90945092506116e6905060408601611678565b905092959194509250565b6000815180845260005b81811015611717576020818501810151868301820152016116fb565b81811115611729576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061176f60208301846116f1565b9392505050565b60006020828403121561178857600080fd5b5035919050565b6000806000604084860312156117a457600080fd5b833567ffffffffffffffff8111156117bb57600080fd5b6117c78682870161162f565b90945092506117da905060208501611678565b90509250925092565b600080600080600080600060c0888a0312156117fe57600080fd5b8735965061180e60208901611606565b955061181c60408901611606565b9450606088013593506080880135925060a088013567ffffffffffffffff81111561184657600080fd5b6118528a828b0161162f565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a083015261190060c083018486611865565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815260806020820152600061193d608083018688611865565b905083604083015263ffffffff831660608301529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818516818304811182151516156119b1576119b161195b565b02949350505050565b600067ffffffffffffffff808416806119fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611a2b57611a2b61195b565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611a7557611a7561195b565b500390565b73ffffffffffffffffffffffffffffffffffffffff8416815267ffffffffffffffff83166020820152606060408201526000611ab960608301846116f1565b95945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152611afb60808301856116f1565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611b5760c08301846116f1565b9897505050505050505056fea164736f6c634300080f000a" func init() { if err := json.Unmarshal([]byte(L2CrossDomainMessengerStorageLayoutJSON), L2CrossDomainMessengerStorageLayout); err != nil { diff --git a/op-bindings/bindings/l2erc721bridge.go b/op-bindings/bindings/l2erc721bridge.go index da5192698..db87f16e9 100644 --- a/op-bindings/bindings/l2erc721bridge.go +++ b/op-bindings/bindings/l2erc721bridge.go @@ -26,13 +26,12 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription - _ = abi.ConvertType ) // L2ERC721BridgeMetaData contains all meta data concerning the L2ERC721Bridge contract. var L2ERC721BridgeMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_messenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_otherBridge\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC721BridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC721BridgeInitiated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSENGER\",\"outputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_BRIDGE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC721\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC721To\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeERC721\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6101206040523480156200001257600080fd5b50604051620017eb380380620017eb833981016040819052620000359162000162565b600160008084846001600160a01b038216620000ad5760405162461bcd60e51b815260206004820152602c60248201527f4552433732314272696467653a206d657373656e6765722063616e6e6f74206260448201526b65206164647265737328302960a01b60648201526084015b60405180910390fd5b6001600160a01b0381166200011d5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314272696467653a206f74686572206272696467652063616e6e6f60448201526e74206265206164647265737328302960881b6064820152608401620000a4565b6001600160a01b039182166080521660a05260c09290925260e05261010052506200019a9050565b80516001600160a01b03811681146200015d57600080fd5b919050565b600080604083850312156200017657600080fd5b620001818362000145565b9150620001916020840162000145565b90509250929050565b60805160a05160c05160e051610100516115ea6200020160003960006102480152600061021f015260006101f601526000818160c2015281816102d40152610d6701526000818161010e015281816102aa0152818161030b0152610d3a01526115ea6000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80637f46ddb2116100505780637f46ddb2146100bd578063927ede2d14610109578063aa5574521461013057600080fd5b80633687011a1461007757806354fd4d501461008c578063761f4493146100aa575b600080fd5b61008a6100853660046111d1565b610143565b005b6100946101ef565b6040516100a191906112ce565b60405180910390f35b61008a6100b83660046112e1565b610292565b6100e47f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a1565b6100e47f000000000000000000000000000000000000000000000000000000000000000081565b61008a61013e366004611379565b6107f9565b333b156101d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b6101e786863333888888886108b5565b505050505050565b606061021a7f0000000000000000000000000000000000000000000000000000000000000000610e53565b6102437f0000000000000000000000000000000000000000000000000000000000000000610e53565b61026c7f0000000000000000000000000000000000000000000000000000000000000000610e53565b60405160200161027e939291906113f0565b604051602081830303815290604052905090565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156103b057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103989190611466565b73ffffffffffffffffffffffffffffffffffffffff16145b61043c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f74686572206272696467650060648201526084016101ce565b3073ffffffffffffffffffffffffffffffffffffffff8816036104e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c324552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c660000000000000000000000000000000000000000000060648201526084016101ce565b61050b877f74259ebf00000000000000000000000000000000000000000000000000000000610f11565b610597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c324552433732314272696467653a206c6f63616c20746f6b656e20696e746560448201527f7266616365206973206e6f7420636f6d706c69616e740000000000000000000060648201526084016101ce565b8673ffffffffffffffffffffffffffffffffffffffff1663033964be6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106069190611466565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146106e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324552433732314272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204b726f6d61204d696e7461626c6520455243373231206c6f6360648201527f616c20746f6b656e000000000000000000000000000000000000000000000000608482015260a4016101ce565b6040517fa144819400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301526024820185905288169063a144819490604401600060405180830381600087803b15801561075657600080fd5b505af115801561076a573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac878787876040516107e894939291906114cc565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff851661089c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f7420626520616464726573732830290000000000000000000000000000000060648201526084016101ce565b6108ac87873388888888886108b5565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff8716610958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c324552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f74206265206164647265737328302900000000000000000000000000000060648201526084016101ce565b6040517f6352211e0000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff891690636352211e90602401602060405180830381865afa1580156109c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e79190611466565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4c324552433732314272696467653a205769746864726177616c206973206e6f60448201527f74206265696e6720696e69746961746564206279204e4654206f776e6572000060648201526084016101ce565b60008873ffffffffffffffffffffffffffffffffffffffff1663033964be6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b129190611466565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610bcf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4c324552433732314272696467653a2072656d6f746520746f6b656e20646f6560448201527f73206e6f74206d6174636820676976656e2076616c756500000000000000000060648201526084016101ce565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018790528a1690639dc29fac90604401600060405180830381600087803b158015610c3f57600080fd5b505af1158015610c53573d6000803e3d6000fd5b50505050600063761f449360e01b828b8a8a8a8989604051602401610c7e979695949392919061150c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290517f3dbb202b00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690633dbb202b90610d93907f00000000000000000000000000000000000000000000000000000000000000009085908a90600401611569565b600060405180830381600087803b158015610dad57600080fd5b505af1158015610dc1573d6000803e3d6000fd5b505050508773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a58a8a8989604051610e3f94939291906114cc565b60405180910390a450505050505050505050565b60606000610e6083610f34565b600101905060008167ffffffffffffffff811115610e8057610e806115ae565b6040519080825280601f01601f191660200182016040528015610eaa576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084610eb457509392505050565b6000610f1c83611017565b8015610f2d5750610f2d838361107b565b9392505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610f7d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610fa9576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610fc757662386f26fc10000830492506010015b6305f5e1008310610fdf576305f5e100830492506008015b6127108310610ff357612710830492506004015b60648310611005576064830492506002015b600a8310611011576001015b92915050565b6000611043827f01ffc9a70000000000000000000000000000000000000000000000000000000061107b565b80156110115750611074827fffffffff0000000000000000000000000000000000000000000000000000000061107b565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015611133575060208210155b801561113f5750600081115b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461116c57600080fd5b50565b803563ffffffff8116811461118357600080fd5b919050565b60008083601f84011261119a57600080fd5b50813567ffffffffffffffff8111156111b257600080fd5b6020830191508360208285010111156111ca57600080fd5b9250929050565b60008060008060008060a087890312156111ea57600080fd5b86356111f58161114a565b955060208701356112058161114a565b94506040870135935061121a6060880161116f565b9250608087013567ffffffffffffffff81111561123657600080fd5b61124289828a01611188565b979a9699509497509295939492505050565b60005b8381101561126f578181015183820152602001611257565b8381111561127e576000848401525b50505050565b6000815180845261129c816020860160208601611254565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610f2d6020830184611284565b600080600080600080600060c0888a0312156112fc57600080fd5b87356113078161114a565b965060208801356113178161114a565b955060408801356113278161114a565b945060608801356113378161114a565b93506080880135925060a088013567ffffffffffffffff81111561135a57600080fd5b6113668a828b01611188565b989b979a50959850939692959293505050565b600080600080600080600060c0888a03121561139457600080fd5b873561139f8161114a565b965060208801356113af8161114a565b955060408801356113bf8161114a565b9450606088013593506113d46080890161116f565b925060a088013567ffffffffffffffff81111561135a57600080fd5b60008451611402818460208901611254565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161143e816001850160208a01611254565b60019201918201528351611459816002840160208801611254565b0160020195945050505050565b60006020828403121561147857600080fd5b8151610f2d8161114a565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000611502606083018486611483565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a083015261155c60c083018486611483565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006115986060830185611284565b905063ffffffff83166040830152949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_otherBridge\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC721BridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC721BridgeInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSENGER\",\"outputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_BRIDGE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC721\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC721To\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeERC721\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"_messenger\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messenger\",\"outputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"otherBridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60a06040523480156200001157600080fd5b506040516200187f3803806200187f83398101604081905262000034916200024b565b806001600160a01b038116620000a95760405162461bcd60e51b815260206004820152602f60248201527f4552433732314272696467653a206f74686572206272696467652063616e6e6f60448201526e74206265206164647265737328302960881b60648201526084015b60405180910390fd5b6001600160a01b0316608052620000c16000620000c8565b506200027d565b600054600290610100900460ff16158015620000eb575060005460ff8083169116105b620001505760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620000a0565b6000805461ffff191660ff8316176101001790556200016f82620001b4565b6000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b600054610100900460ff16620002215760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000a0565b600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6000602082840312156200025e57600080fd5b81516001600160a01b03811681146200027657600080fd5b9392505050565b6080516115d1620002ae6000396000818161016e015281816101dc015281816102d60152610ea101526115d16000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c80637f46ddb211610076578063aa5574521161005b578063aa557452146101b4578063c4d66de8146101c7578063c89701a2146101da57600080fd5b80637f46ddb214610169578063927ede2d1461019057600080fd5b80633687011a146100a85780633cb747bf146100bd57806354fd4d501461010d578063761f449314610156575b600080fd5b6100bb6100b636600461124f565b610200565b005b6000546100e39062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101496040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b604051610104919061133d565b6100bb610164366004611350565b6102ac565b6100e37f000000000000000000000000000000000000000000000000000000000000000081565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff166100e3565b6100bb6101c23660046113e8565b6107fd565b6100bb6101d536600461145f565b6108b9565b7f00000000000000000000000000000000000000000000000000000000000000006100e3565b333b15610294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b6102a48686333388888888610a03565b505050505050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16331480156103b457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039c919061147c565b73ffffffffffffffffffffffffffffffffffffffff16145b610440576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f746865722062726964676500606482015260840161028b565b3073ffffffffffffffffffffffffffffffffffffffff8816036104e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c324552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c6600000000000000000000000000000000000000000000606482015260840161028b565b61050f877f74259ebf00000000000000000000000000000000000000000000000000000000610f8d565b61059b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c324552433732314272696467653a206c6f63616c20746f6b656e20696e746560448201527f7266616365206973206e6f7420636f6d706c69616e7400000000000000000000606482015260840161028b565b8673ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060a919061147c565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146106ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4c324552433732314272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433732312060648201527f6c6f63616c20746f6b656e000000000000000000000000000000000000000000608482015260a40161028b565b6040517fa144819400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301526024820185905288169063a144819490604401600060405180830381600087803b15801561075a57600080fd5b505af115801561076e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac878787876040516107ec94939291906114e2565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff85166108a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f74206265206164647265737328302900000000000000000000000000000000606482015260840161028b565b6108b08787338888888888610a03565b50505050505050565b600054600290610100900460ff161580156108db575060005460ff8083169116105b610967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161028b565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556109a182610fb0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff8716610aa6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c324552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f742062652061646472657373283029000000000000000000000000000000606482015260840161028b565b6040517f6352211e0000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff891690636352211e90602401602060405180830381865afa158015610b11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b35919061147c565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610bef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4c324552433732314272696467653a205769746864726177616c206973206e6f60448201527f74206265696e6720696e69746961746564206279204e4654206f776e65720000606482015260840161028b565b60008873ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c60919061147c565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4c324552433732314272696467653a2072656d6f746520746f6b656e20646f6560448201527f73206e6f74206d6174636820676976656e2076616c7565000000000000000000606482015260840161028b565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018790528a1690639dc29fac90604401600060405180830381600087803b158015610d8d57600080fd5b505af1158015610da1573d6000803e3d6000fd5b50505050600063761f449360e01b828b8a8a8a8989604051602401610dcc9796959493929190611522565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925260005491517f3dbb202b00000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff620100009092049190911690633dbb202b90610ecd907f00000000000000000000000000000000000000000000000000000000000000009085908a9060040161157f565b600060405180830381600087803b158015610ee757600080fd5b505af1158015610efb573d6000803e3d6000fd5b505050508773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a58a8a8989604051610f7994939291906114e2565b60405180910390a450505050505050505050565b6000610f9883611094565b8015610fa95750610fa983836110f9565b9392505050565b600054610100900460ff16611047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161028b565b6000805473ffffffffffffffffffffffffffffffffffffffff90921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b60006110c0827f01ffc9a7000000000000000000000000000000000000000000000000000000006110f9565b80156110f357506110f1827fffffffff000000000000000000000000000000000000000000000000000000006110f9565b155b92915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156111b1575060208210155b80156111bd5750600081115b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146111ea57600080fd5b50565b803563ffffffff8116811461120157600080fd5b919050565b60008083601f84011261121857600080fd5b50813567ffffffffffffffff81111561123057600080fd5b60208301915083602082850101111561124857600080fd5b9250929050565b60008060008060008060a0878903121561126857600080fd5b8635611273816111c8565b95506020870135611283816111c8565b945060408701359350611298606088016111ed565b9250608087013567ffffffffffffffff8111156112b457600080fd5b6112c089828a01611206565b979a9699509497509295939492505050565b6000815180845260005b818110156112f8576020818501810151868301820152016112dc565b8181111561130a576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610fa960208301846112d2565b600080600080600080600060c0888a03121561136b57600080fd5b8735611376816111c8565b96506020880135611386816111c8565b95506040880135611396816111c8565b945060608801356113a6816111c8565b93506080880135925060a088013567ffffffffffffffff8111156113c957600080fd5b6113d58a828b01611206565b989b979a50959850939692959293505050565b600080600080600080600060c0888a03121561140357600080fd5b873561140e816111c8565b9650602088013561141e816111c8565b9550604088013561142e816111c8565b945060608801359350611443608089016111ed565b925060a088013567ffffffffffffffff8111156113c957600080fd5b60006020828403121561147157600080fd5b8135610fa9816111c8565b60006020828403121561148e57600080fd5b8151610fa9816111c8565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000611518606083018486611499565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a083015261157260c083018486611499565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006115ae60608301856112d2565b905063ffffffff8316604083015294935050505056fea164736f6c634300080f000a", } // L2ERC721BridgeABI is the input ABI used to generate the binding from. @@ -44,7 +43,7 @@ var L2ERC721BridgeABI = L2ERC721BridgeMetaData.ABI var L2ERC721BridgeBin = L2ERC721BridgeMetaData.Bin // DeployL2ERC721Bridge deploys a new Ethereum contract, binding an instance of L2ERC721Bridge to it. -func DeployL2ERC721Bridge(auth *bind.TransactOpts, backend bind.ContractBackend, _messenger common.Address, _otherBridge common.Address) (common.Address, *types.Transaction, *L2ERC721Bridge, error) { +func DeployL2ERC721Bridge(auth *bind.TransactOpts, backend bind.ContractBackend, _otherBridge common.Address) (common.Address, *types.Transaction, *L2ERC721Bridge, error) { parsed, err := L2ERC721BridgeMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -53,7 +52,7 @@ func DeployL2ERC721Bridge(auth *bind.TransactOpts, backend bind.ContractBackend, return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(L2ERC721BridgeBin), backend, _messenger, _otherBridge) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(L2ERC721BridgeBin), backend, _otherBridge) if err != nil { return common.Address{}, nil, nil, err } @@ -157,11 +156,11 @@ func NewL2ERC721BridgeFilterer(address common.Address, filterer bind.ContractFil // bindL2ERC721Bridge binds a generic wrapper to an already deployed contract. func bindL2ERC721Bridge(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := L2ERC721BridgeMetaData.GetAbi() + parsed, err := abi.JSON(strings.NewReader(L2ERC721BridgeABI)) if err != nil { return nil, err } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and @@ -264,6 +263,68 @@ func (_L2ERC721Bridge *L2ERC721BridgeCallerSession) OTHERBRIDGE() (common.Addres return _L2ERC721Bridge.Contract.OTHERBRIDGE(&_L2ERC721Bridge.CallOpts) } +// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. +// +// Solidity: function messenger() view returns(address) +func (_L2ERC721Bridge *L2ERC721BridgeCaller) Messenger(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L2ERC721Bridge.contract.Call(opts, &out, "messenger") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. +// +// Solidity: function messenger() view returns(address) +func (_L2ERC721Bridge *L2ERC721BridgeSession) Messenger() (common.Address, error) { + return _L2ERC721Bridge.Contract.Messenger(&_L2ERC721Bridge.CallOpts) +} + +// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. +// +// Solidity: function messenger() view returns(address) +func (_L2ERC721Bridge *L2ERC721BridgeCallerSession) Messenger() (common.Address, error) { + return _L2ERC721Bridge.Contract.Messenger(&_L2ERC721Bridge.CallOpts) +} + +// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. +// +// Solidity: function otherBridge() view returns(address) +func (_L2ERC721Bridge *L2ERC721BridgeCaller) OtherBridge(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L2ERC721Bridge.contract.Call(opts, &out, "otherBridge") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. +// +// Solidity: function otherBridge() view returns(address) +func (_L2ERC721Bridge *L2ERC721BridgeSession) OtherBridge() (common.Address, error) { + return _L2ERC721Bridge.Contract.OtherBridge(&_L2ERC721Bridge.CallOpts) +} + +// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. +// +// Solidity: function otherBridge() view returns(address) +func (_L2ERC721Bridge *L2ERC721BridgeCallerSession) OtherBridge() (common.Address, error) { + return _L2ERC721Bridge.Contract.OtherBridge(&_L2ERC721Bridge.CallOpts) +} + // Version is a free data retrieval call binding the contract method 0x54fd4d50. // // Solidity: function version() view returns(string) @@ -358,6 +419,27 @@ func (_L2ERC721Bridge *L2ERC721BridgeTransactorSession) FinalizeBridgeERC721(_lo return _L2ERC721Bridge.Contract.FinalizeBridgeERC721(&_L2ERC721Bridge.TransactOpts, _localToken, _remoteToken, _from, _to, _tokenId, _extraData) } +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _messenger) returns() +func (_L2ERC721Bridge *L2ERC721BridgeTransactor) Initialize(opts *bind.TransactOpts, _messenger common.Address) (*types.Transaction, error) { + return _L2ERC721Bridge.contract.Transact(opts, "initialize", _messenger) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _messenger) returns() +func (_L2ERC721Bridge *L2ERC721BridgeSession) Initialize(_messenger common.Address) (*types.Transaction, error) { + return _L2ERC721Bridge.Contract.Initialize(&_L2ERC721Bridge.TransactOpts, _messenger) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _messenger) returns() +func (_L2ERC721Bridge *L2ERC721BridgeTransactorSession) Initialize(_messenger common.Address) (*types.Transaction, error) { + return _L2ERC721Bridge.Contract.Initialize(&_L2ERC721Bridge.TransactOpts, _messenger) +} + // L2ERC721BridgeERC721BridgeFinalizedIterator is returned from FilterERC721BridgeFinalized and is used to iterate over the raw logs and unpacked data for ERC721BridgeFinalized events raised by the L2ERC721Bridge contract. type L2ERC721BridgeERC721BridgeFinalizedIterator struct { Event *L2ERC721BridgeERC721BridgeFinalized // Event containing the contract specifics and raw log @@ -687,3 +769,137 @@ func (_L2ERC721Bridge *L2ERC721BridgeFilterer) ParseERC721BridgeInitiated(log ty event.Raw = log return event, nil } + +// L2ERC721BridgeInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the L2ERC721Bridge contract. +type L2ERC721BridgeInitializedIterator struct { + Event *L2ERC721BridgeInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L2ERC721BridgeInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L2ERC721BridgeInitialized) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L2ERC721BridgeInitialized) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L2ERC721BridgeInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L2ERC721BridgeInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L2ERC721BridgeInitialized represents a Initialized event raised by the L2ERC721Bridge contract. +type L2ERC721BridgeInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_L2ERC721Bridge *L2ERC721BridgeFilterer) FilterInitialized(opts *bind.FilterOpts) (*L2ERC721BridgeInitializedIterator, error) { + + logs, sub, err := _L2ERC721Bridge.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &L2ERC721BridgeInitializedIterator{contract: _L2ERC721Bridge.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_L2ERC721Bridge *L2ERC721BridgeFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *L2ERC721BridgeInitialized) (event.Subscription, error) { + + logs, sub, err := _L2ERC721Bridge.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: + // New log arrived, parse the event and forward to the user + event := new(L2ERC721BridgeInitialized) + if err := _L2ERC721Bridge.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 +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_L2ERC721Bridge *L2ERC721BridgeFilterer) ParseInitialized(log types.Log) (*L2ERC721BridgeInitialized, error) { + event := new(L2ERC721BridgeInitialized) + if err := _L2ERC721Bridge.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-bindings/bindings/l2erc721bridge_more.go b/op-bindings/bindings/l2erc721bridge_more.go index 0a6675283..117575ffb 100644 --- a/op-bindings/bindings/l2erc721bridge_more.go +++ b/op-bindings/bindings/l2erc721bridge_more.go @@ -9,11 +9,11 @@ import ( "github.com/ethereum-optimism/optimism/op-bindings/solc" ) -const L2ERC721BridgeStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L2/L2ERC721Bridge.sol:L2ERC721Bridge\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_array(t_uint256)1001_storage\"}],\"types\":{\"t_array(t_uint256)1001_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"}}}" +const L2ERC721BridgeStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/L2/L2ERC721Bridge.sol:L2ERC721Bridge\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"src/L2/L2ERC721Bridge.sol:L2ERC721Bridge\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"src/L2/L2ERC721Bridge.sol:L2ERC721Bridge\",\"label\":\"messenger\",\"offset\":2,\"slot\":\"0\",\"type\":\"t_contract(CrossDomainMessenger)1004\"},{\"astId\":1003,\"contract\":\"src/L2/L2ERC721Bridge.sol:L2ERC721Bridge\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)48_storage\"}],\"types\":{\"t_array(t_uint256)48_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[48]\",\"numberOfBytes\":\"1536\",\"base\":\"t_uint256\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_contract(CrossDomainMessenger)1004\":{\"encoding\":\"inplace\",\"label\":\"contract CrossDomainMessenger\",\"numberOfBytes\":\"20\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" var L2ERC721BridgeStorageLayout = new(solc.StorageLayout) -var L2ERC721BridgeDeployedBin = "0x608060405234801561001057600080fd5b50600436106100725760003560e01c80637f46ddb2116100505780637f46ddb2146100bd578063927ede2d14610109578063aa5574521461013057600080fd5b80633687011a1461007757806354fd4d501461008c578063761f4493146100aa575b600080fd5b61008a6100853660046111d1565b610143565b005b6100946101ef565b6040516100a191906112ce565b60405180910390f35b61008a6100b83660046112e1565b610292565b6100e47f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a1565b6100e47f000000000000000000000000000000000000000000000000000000000000000081565b61008a61013e366004611379565b6107f9565b333b156101d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b6101e786863333888888886108b5565b505050505050565b606061021a7f0000000000000000000000000000000000000000000000000000000000000000610e53565b6102437f0000000000000000000000000000000000000000000000000000000000000000610e53565b61026c7f0000000000000000000000000000000000000000000000000000000000000000610e53565b60405160200161027e939291906113f0565b604051602081830303815290604052905090565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480156103b057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103989190611466565b73ffffffffffffffffffffffffffffffffffffffff16145b61043c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f74686572206272696467650060648201526084016101ce565b3073ffffffffffffffffffffffffffffffffffffffff8816036104e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c324552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c660000000000000000000000000000000000000000000060648201526084016101ce565b61050b877f74259ebf00000000000000000000000000000000000000000000000000000000610f11565b610597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c324552433732314272696467653a206c6f63616c20746f6b656e20696e746560448201527f7266616365206973206e6f7420636f6d706c69616e740000000000000000000060648201526084016101ce565b8673ffffffffffffffffffffffffffffffffffffffff1663033964be6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106069190611466565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146106e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324552433732314272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204b726f6d61204d696e7461626c6520455243373231206c6f6360648201527f616c20746f6b656e000000000000000000000000000000000000000000000000608482015260a4016101ce565b6040517fa144819400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301526024820185905288169063a144819490604401600060405180830381600087803b15801561075657600080fd5b505af115801561076a573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac878787876040516107e894939291906114cc565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff851661089c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f7420626520616464726573732830290000000000000000000000000000000060648201526084016101ce565b6108ac87873388888888886108b5565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff8716610958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c324552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f74206265206164647265737328302900000000000000000000000000000060648201526084016101ce565b6040517f6352211e0000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff891690636352211e90602401602060405180830381865afa1580156109c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e79190611466565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4c324552433732314272696467653a205769746864726177616c206973206e6f60448201527f74206265696e6720696e69746961746564206279204e4654206f776e6572000060648201526084016101ce565b60008873ffffffffffffffffffffffffffffffffffffffff1663033964be6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b129190611466565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610bcf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4c324552433732314272696467653a2072656d6f746520746f6b656e20646f6560448201527f73206e6f74206d6174636820676976656e2076616c756500000000000000000060648201526084016101ce565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018790528a1690639dc29fac90604401600060405180830381600087803b158015610c3f57600080fd5b505af1158015610c53573d6000803e3d6000fd5b50505050600063761f449360e01b828b8a8a8a8989604051602401610c7e979695949392919061150c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290517f3dbb202b00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690633dbb202b90610d93907f00000000000000000000000000000000000000000000000000000000000000009085908a90600401611569565b600060405180830381600087803b158015610dad57600080fd5b505af1158015610dc1573d6000803e3d6000fd5b505050508773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a58a8a8989604051610e3f94939291906114cc565b60405180910390a450505050505050505050565b60606000610e6083610f34565b600101905060008167ffffffffffffffff811115610e8057610e806115ae565b6040519080825280601f01601f191660200182016040528015610eaa576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084610eb457509392505050565b6000610f1c83611017565b8015610f2d5750610f2d838361107b565b9392505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610f7d577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610fa9576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610fc757662386f26fc10000830492506010015b6305f5e1008310610fdf576305f5e100830492506008015b6127108310610ff357612710830492506004015b60648310611005576064830492506002015b600a8310611011576001015b92915050565b6000611043827f01ffc9a70000000000000000000000000000000000000000000000000000000061107b565b80156110115750611074827fffffffff0000000000000000000000000000000000000000000000000000000061107b565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015611133575060208210155b801561113f5750600081115b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461116c57600080fd5b50565b803563ffffffff8116811461118357600080fd5b919050565b60008083601f84011261119a57600080fd5b50813567ffffffffffffffff8111156111b257600080fd5b6020830191508360208285010111156111ca57600080fd5b9250929050565b60008060008060008060a087890312156111ea57600080fd5b86356111f58161114a565b955060208701356112058161114a565b94506040870135935061121a6060880161116f565b9250608087013567ffffffffffffffff81111561123657600080fd5b61124289828a01611188565b979a9699509497509295939492505050565b60005b8381101561126f578181015183820152602001611257565b8381111561127e576000848401525b50505050565b6000815180845261129c816020860160208601611254565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610f2d6020830184611284565b600080600080600080600060c0888a0312156112fc57600080fd5b87356113078161114a565b965060208801356113178161114a565b955060408801356113278161114a565b945060608801356113378161114a565b93506080880135925060a088013567ffffffffffffffff81111561135a57600080fd5b6113668a828b01611188565b989b979a50959850939692959293505050565b600080600080600080600060c0888a03121561139457600080fd5b873561139f8161114a565b965060208801356113af8161114a565b955060408801356113bf8161114a565b9450606088013593506113d46080890161116f565b925060a088013567ffffffffffffffff81111561135a57600080fd5b60008451611402818460208901611254565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161143e816001850160208a01611254565b60019201918201528351611459816002840160208801611254565b0160020195945050505050565b60006020828403121561147857600080fd5b8151610f2d8161114a565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000611502606083018486611483565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a083015261155c60c083018486611483565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006115986060830185611284565b905063ffffffff83166040830152949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a" +var L2ERC721BridgeDeployedBin = "0x608060405234801561001057600080fd5b50600436106100a35760003560e01c80637f46ddb211610076578063aa5574521161005b578063aa557452146101b4578063c4d66de8146101c7578063c89701a2146101da57600080fd5b80637f46ddb214610169578063927ede2d1461019057600080fd5b80633687011a146100a85780633cb747bf146100bd57806354fd4d501461010d578063761f449314610156575b600080fd5b6100bb6100b636600461124f565b610200565b005b6000546100e39062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101496040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b604051610104919061133d565b6100bb610164366004611350565b6102ac565b6100e37f000000000000000000000000000000000000000000000000000000000000000081565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff166100e3565b6100bb6101c23660046113e8565b6107fd565b6100bb6101d536600461145f565b6108b9565b7f00000000000000000000000000000000000000000000000000000000000000006100e3565b333b15610294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b6102a48686333388888888610a03565b505050505050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16331480156103b457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039c919061147c565b73ffffffffffffffffffffffffffffffffffffffff16145b610440576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f746865722062726964676500606482015260840161028b565b3073ffffffffffffffffffffffffffffffffffffffff8816036104e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c324552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c6600000000000000000000000000000000000000000000606482015260840161028b565b61050f877f74259ebf00000000000000000000000000000000000000000000000000000000610f8d565b61059b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c324552433732314272696467653a206c6f63616c20746f6b656e20696e746560448201527f7266616365206973206e6f7420636f6d706c69616e7400000000000000000000606482015260840161028b565b8673ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060a919061147c565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146106ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4c324552433732314272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433732312060648201527f6c6f63616c20746f6b656e000000000000000000000000000000000000000000608482015260a40161028b565b6040517fa144819400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301526024820185905288169063a144819490604401600060405180830381600087803b15801561075a57600080fd5b505af115801561076e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac878787876040516107ec94939291906114e2565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff85166108a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f74206265206164647265737328302900000000000000000000000000000000606482015260840161028b565b6108b08787338888888888610a03565b50505050505050565b600054600290610100900460ff161580156108db575060005460ff8083169116105b610967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161028b565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556109a182610fb0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff8716610aa6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c324552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f742062652061646472657373283029000000000000000000000000000000606482015260840161028b565b6040517f6352211e0000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff891690636352211e90602401602060405180830381865afa158015610b11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b35919061147c565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610bef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4c324552433732314272696467653a205769746864726177616c206973206e6f60448201527f74206265696e6720696e69746961746564206279204e4654206f776e65720000606482015260840161028b565b60008873ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c60919061147c565b90508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4c324552433732314272696467653a2072656d6f746520746f6b656e20646f6560448201527f73206e6f74206d6174636820676976656e2076616c7565000000000000000000606482015260840161028b565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018790528a1690639dc29fac90604401600060405180830381600087803b158015610d8d57600080fd5b505af1158015610da1573d6000803e3d6000fd5b50505050600063761f449360e01b828b8a8a8a8989604051602401610dcc9796959493929190611522565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925260005491517f3dbb202b00000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff620100009092049190911690633dbb202b90610ecd907f00000000000000000000000000000000000000000000000000000000000000009085908a9060040161157f565b600060405180830381600087803b158015610ee757600080fd5b505af1158015610efb573d6000803e3d6000fd5b505050508773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a58a8a8989604051610f7994939291906114e2565b60405180910390a450505050505050505050565b6000610f9883611094565b8015610fa95750610fa983836110f9565b9392505050565b600054610100900460ff16611047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161028b565b6000805473ffffffffffffffffffffffffffffffffffffffff90921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b60006110c0827f01ffc9a7000000000000000000000000000000000000000000000000000000006110f9565b80156110f357506110f1827fffffffff000000000000000000000000000000000000000000000000000000006110f9565b155b92915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156111b1575060208210155b80156111bd5750600081115b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146111ea57600080fd5b50565b803563ffffffff8116811461120157600080fd5b919050565b60008083601f84011261121857600080fd5b50813567ffffffffffffffff81111561123057600080fd5b60208301915083602082850101111561124857600080fd5b9250929050565b60008060008060008060a0878903121561126857600080fd5b8635611273816111c8565b95506020870135611283816111c8565b945060408701359350611298606088016111ed565b9250608087013567ffffffffffffffff8111156112b457600080fd5b6112c089828a01611206565b979a9699509497509295939492505050565b6000815180845260005b818110156112f8576020818501810151868301820152016112dc565b8181111561130a576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610fa960208301846112d2565b600080600080600080600060c0888a03121561136b57600080fd5b8735611376816111c8565b96506020880135611386816111c8565b95506040880135611396816111c8565b945060608801356113a6816111c8565b93506080880135925060a088013567ffffffffffffffff8111156113c957600080fd5b6113d58a828b01611206565b989b979a50959850939692959293505050565b600080600080600080600060c0888a03121561140357600080fd5b873561140e816111c8565b9650602088013561141e816111c8565b9550604088013561142e816111c8565b945060608801359350611443608089016111ed565b925060a088013567ffffffffffffffff8111156113c957600080fd5b60006020828403121561147157600080fd5b8135610fa9816111c8565b60006020828403121561148e57600080fd5b8151610fa9816111c8565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000611518606083018486611499565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a083015261157260c083018486611499565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006115ae60608301856112d2565b905063ffffffff8316604083015294935050505056fea164736f6c634300080f000a" func init() { if err := json.Unmarshal([]byte(L2ERC721BridgeStorageLayoutJSON), L2ERC721BridgeStorageLayout); err != nil { diff --git a/op-bindings/bindings/l2outputoracle.go b/op-bindings/bindings/l2outputoracle.go index f1fe30c25..c0b397415 100644 --- a/op-bindings/bindings/l2outputoracle.go +++ b/op-bindings/bindings/l2outputoracle.go @@ -26,13 +26,19 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription - _ = abi.ConvertType ) +// TypesOutputProposal is an auto generated low-level Go binding around an user-defined struct. +type TypesOutputProposal struct { + OutputRoot [32]byte + Timestamp *big.Int + L2BlockNumber *big.Int +} + // L2OutputOracleMetaData contains all meta data concerning the L2OutputOracle contract. var L2OutputOracleMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"contractValidatorPool\",\"name\":\"_validatorPool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_colosseum\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_submissionInterval\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_l2BlockTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startingTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"outputIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"newOutputRoot\",\"type\":\"bytes32\"}],\"name\":\"OutputReplaced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2OutputIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2BlockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"l1Timestamp\",\"type\":\"uint256\"}],\"name\":\"OutputSubmitted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"COLOSSEUM\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FINALIZATION_PERIOD_SECONDS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_BLOCK_TIME\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SUBMISSION_INTERVAL\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_POOL\",\"outputs\":[{\"internalType\":\"contractValidatorPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"computeL2Timestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_outputIndex\",\"type\":\"uint256\"}],\"name\":\"finalizedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"}],\"name\":\"getL2Output\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"submitter\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint128\",\"name\":\"timestamp\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2BlockNumber\",\"type\":\"uint128\"}],\"internalType\":\"structTypes.CheckpointOutput\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"getL2OutputAfter\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"submitter\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint128\",\"name\":\"timestamp\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2BlockNumber\",\"type\":\"uint128\"}],\"internalType\":\"structTypes.CheckpointOutput\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"getL2OutputIndexAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_outputIndex\",\"type\":\"uint256\"}],\"name\":\"getSubmitter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_startingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startingTimestamp\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_outputIndex\",\"type\":\"uint256\"}],\"name\":\"isFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestOutputIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextOutputIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_newOutputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_submitter\",\"type\":\"address\"}],\"name\":\"replaceL2Output\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startingBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startingTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_l1BlockHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_l1BlockNumber\",\"type\":\"uint256\"}],\"name\":\"submitL2Output\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6101806040523480156200001257600080fd5b5060405162001f8a38038062001f8a833981016040819052620000359162000352565b6001608052600060a081905260c05283620000bd5760405162461bcd60e51b815260206004820152603460248201527f4c324f75747075744f7261636c653a204c3220626c6f636b2074696d65206d7560448201527f73742062652067726561746572207468616e203000000000000000000000000060648201526084015b60405180910390fd5b60008511620001355760405162461bcd60e51b815260206004820152603a60248201527f4c324f75747075744f7261636c653a207375626d697373696f6e20696e74657260448201527f76616c206d7573742062652067726561746572207468616e20300000000000006064820152608401620000b4565b6001600160a01b0380881660e05286166101005261012085905261014084905261016081905262000167838362000174565b50505050505050620003be565b600054610100900460ff1615808015620001955750600054600160ff909116105b80620001c55750620001b2306200032a60201b620016441760201c565b158015620001c5575060005460ff166001145b6200022a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620000b4565b6000805460ff1916600117905580156200024e576000805461ff0019166101001790555b42821115620002d45760405162461bcd60e51b8152602060048201526044602482018190527f4c324f75747075744f7261636c653a207374617274696e67204c322074696d65908201527f7374616d70206d757374206265206c657373207468616e2063757272656e742060648201526374696d6560e01b608482015260a401620000b4565b60028290556001839055801562000325576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6001600160a01b03811681146200034f57600080fd5b50565b600080600080600080600060e0888a0312156200036e57600080fd5b87516200037b8162000339565b60208901519097506200038e8162000339565b604089015160608a015160808b015160a08c015160c0909c01519a9d939c50919a90999198509650945092505050565b60805160a05160c05160e05161010051610120516101405161016051611b2762000463600039600081816104d90152818161050001528181610bd901528181610f3901526114ef01526000818161018b015261102601526000818161021701526110770152600081816102f801526112e1015260008181610410015281816106830152610bae015260006106350152600061060c015260006105e30152611b276000f3fe6080604052600436106101745760003560e01c80639e45e8f4116100cb578063cf8e5cf01161007f578063e4a3011611610059578063e4a3011614610487578063e6646723146104a7578063f4daa291146104c757600080fd5b8063cf8e5cf014610432578063d1de856c14610452578063dcec33481461047257600080fd5b8063a48ea6de116100b0578063a48ea6de146103be578063b0ea09a8146103de578063b98debbf146103fe57600080fd5b80639e45e8f4146102e6578063a25ae5571461033f57600080fd5b80635a045f781161012d57806370872aa51161010757806370872aa51461029a5780637f006420146102b057806388786272146102d057600080fd5b80635a045f781461025b57806369f16eec146102705780636abcf5631461028557600080fd5b80634599c7881161015e5780634599c788146101f0578063529933df1461020557806354fd4d501461023957600080fd5b80622134cc1461017957806333727c4d146101c0575b600080fd5b34801561018557600080fd5b506101ad7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b3480156101cc57600080fd5b506101e06101db366004611800565b6104fb565b60405190151581526020016101b7565b3480156101fc57600080fd5b506101ad610569565b34801561021157600080fd5b506101ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561024557600080fd5b5061024e6105dc565b6040516101b79190611849565b61026e61026936600461189a565b61067f565b005b34801561027c57600080fd5b506101ad610c86565b34801561029157600080fd5b506003546101ad565b3480156102a657600080fd5b506101ad60015481565b3480156102bc57600080fd5b506101ad6102cb366004611800565b610c98565b3480156102dc57600080fd5b506101ad60025481565b3480156102f257600080fd5b5061031a7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b7565b34801561034b57600080fd5b5061035f61035a366004611800565b610e78565b60408051825173ffffffffffffffffffffffffffffffffffffffff16815260208084015190820152828201516fffffffffffffffffffffffffffffffff90811692820192909252606092830151909116918101919091526080016101b7565b3480156103ca57600080fd5b506101ad6103d9366004611800565b610f35565b3480156103ea57600080fd5b5061031a6103f9366004611800565b610fa1565b34801561040a57600080fd5b5061031a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561043e57600080fd5b5061035f61044d366004611800565b610fe3565b34801561045e57600080fd5b506101ad61046d366004611800565b611022565b34801561047e57600080fd5b506101ad61106a565b34801561049357600080fd5b5061026e6104a23660046118cc565b6110b0565b3480156104b357600080fd5b5061026e6104c2366004611913565b6112c9565b3480156104d357600080fd5b506101ad7f000000000000000000000000000000000000000000000000000000000000000081565b6000427f0000000000000000000000000000000000000000000000000000000000000000600384815481106105325761053261194c565b600091825260209091206002600390920201015461056291906fffffffffffffffffffffffffffffffff166119aa565b1092915050565b600354600090156105d35760038054610584906001906119c2565b815481106105945761059461194c565b600091825260209091206003909102016002015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16919050565b6001545b905090565b60606106077f0000000000000000000000000000000000000000000000000000000000000000611660565b6106307f0000000000000000000000000000000000000000000000000000000000000000611660565b6106597f0000000000000000000000000000000000000000000000000000000000000000611660565b60405160200161066b939291906119d9565b604051602081830303815290604052905090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633a5490466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107109190611a4f565b905073ffffffffffffffffffffffffffffffffffffffff808216146107e5573373ffffffffffffffffffffffffffffffffffffffff8216146107e55760405162461bcd60e51b815260206004820152604260248201527f4c324f75747075744f7261636c653a206f6e6c7920746865206e65787420736560448201527f6c65637465642076616c696461746f722063616e207375626d6974206f75747060648201527f7574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6107ed61106a565b84146108875760405162461bcd60e51b815260206004820152604860248201527f4c324f75747075744f7261636c653a20626c6f636b206e756d626572206d757360448201527f7420626520657175616c20746f206e65787420657870656374656420626c6f6360648201527f6b206e756d626572000000000000000000000000000000000000000000000000608482015260a4016107dc565b4261089185611022565b106109045760405162461bcd60e51b815260206004820152603560248201527f4c324f75747075744f7261636c653a2063616e6e6f74207375626d6974204c3260448201527f206f757470757420696e2074686520667574757265000000000000000000000060648201526084016107dc565b846109775760405162461bcd60e51b815260206004820152603c60248201527f4c324f75747075744f7261636c653a204c3220636865636b706f696e74206f7560448201527f747075742063616e6e6f7420626520746865207a65726f20686173680000000060648201526084016107dc565b82158015906109865750814015155b15610a275782824014610a275760405162461bcd60e51b815260206004820152604960248201527f4c324f75747075744f7261636c653a20626c6f636b206861736820646f65732060448201527f6e6f74206d61746368207468652068617368206174207468652065787065637460648201527f6564206865696768740000000000000000000000000000000000000000000000608482015260a4016107dc565b6000610a3260035490565b60408051608081018252338152602081018981526fffffffffffffffffffffffffffffffff428181168486019081528b831660608601908152600380546001810182556000829052965196027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b8101805473ffffffffffffffffffffffffffffffffffffffff989098167fffffffffffffffffffffffff00000000000000000000000000000000000000009098169790971790965593517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c86015551925182167001000000000000000000000000000000000292909116919091177fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85d9092019190915590519192508691839189917f457b4388026260019ae0b0b4f16c98235d74fe7359be469bdcba16e6d0d4968991610b8f9190815260200190565b60405180910390a473ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663d38dc7ee82610bfe7f0000000000000000000000000000000000000000000000000000000000000000426119aa565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526fffffffffffffffffffffffffffffffff166024820152604401600060405180830381600087803b158015610c6657600080fd5b505af1158015610c7a573d6000803e3d6000fd5b50505050505050505050565b6003546000906105d7906001906119c2565b6000610ca2610569565b821115610d3d5760405162461bcd60e51b815260206004820152604960248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f7420666f72206120626c6f636b207468617420686173206e6f74206265656e2060648201527f7375626d69747465640000000000000000000000000000000000000000000000608482015260a4016107dc565b600354610dd85760405162461bcd60e51b815260206004820152604760248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f74206173206e6f206f7574707574732068617665206265656e207375626d697460648201527f7465642079657400000000000000000000000000000000000000000000000000608482015260a4016107dc565b6003546000905b80821015610e715760006002610df583856119aa565b610dff9190611a73565b90508460038281548110610e1557610e1561194c565b600091825260209091206003909102016002015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff161015610e6757610e608160016119aa565b9250610e6b565b8091505b50610ddf565b5092915050565b60408051608081018252600080825260208201819052918101829052606081019190915260038281548110610eaf57610eaf61194c565b6000918252602091829020604080516080810182526003909302909101805473ffffffffffffffffffffffffffffffffffffffff1683526001810154938301939093526002909201546fffffffffffffffffffffffffffffffff808216938301939093527001000000000000000000000000000000009004909116606082015292915050565b60007f000000000000000000000000000000000000000000000000000000000000000060038381548110610f6b57610f6b61194c565b6000918252602090912060026003909202010154610f9b91906fffffffffffffffffffffffffffffffff166119aa565b92915050565b600060038281548110610fb657610fb661194c565b600091825260209091206003909102015473ffffffffffffffffffffffffffffffffffffffff1692915050565b604080516080810182526000808252602082018190529181018290526060810191909152600361101283610c98565b81548110610eaf57610eaf61194c565b60007f00000000000000000000000000000000000000000000000000000000000000006001548361105391906119c2565b61105d9190611aae565b600254610f9b91906119aa565b600354600090156110a8577f000000000000000000000000000000000000000000000000000000000000000061109e610569565b6105d791906119aa565b6105d7610569565b600054610100900460ff16158080156110d05750600054600160ff909116105b806110ea5750303b1580156110ea575060005460ff166001145b61115c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107dc565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156111ba57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b428211156112575760405162461bcd60e51b8152602060048201526044602482018190527f4c324f75747075744f7261636c653a207374617274696e67204c322074696d65908201527f7374616d70206d757374206265206c657373207468616e2063757272656e742060648201527f74696d6500000000000000000000000000000000000000000000000000000000608482015260a4016107dc565b6002829055600183905580156112c457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461139a5760405162461bcd60e51b815260206004820152604160248201527f4c324f75747075744f7261636c653a206f6e6c792074686520636f6c6f73736560448201527f756d20636f6e74726163742063616e207265706c61636520616e206f7574707560648201527f7400000000000000000000000000000000000000000000000000000000000000608482015260a4016107dc565b73ffffffffffffffffffffffffffffffffffffffff81166114235760405162461bcd60e51b815260206004820152603060248201527f4c324f75747075744f7261636c653a207375626d69747465722061646472657360448201527f732063616e6e6f74206265207a65726f0000000000000000000000000000000060648201526084016107dc565b60035483106114c05760405162461bcd60e51b815260206004820152604660248201527f4c324f75747075744f7261636c653a2063616e6e6f74207265706c616365206160448201527f6e206f757470757420616674657220746865206c6174657374206f757470757460648201527f20696e6465780000000000000000000000000000000000000000000000000000608482015260a4016107dc565b6000600384815481106114d5576114d561194c565b6000918252602090912060039091020160028101549091507f00000000000000000000000000000000000000000000000000000000000000009061152b906fffffffffffffffffffffffffffffffff16426119c2565b106115c45760405162461bcd60e51b815260206004820152604860248201527f4c324f75747075744f7261636c653a2063616e6e6f74207265706c616365206160448201527f6e206f757470757420746861742068617320616c7265616479206265656e206660648201527f696e616c697a6564000000000000000000000000000000000000000000000000608482015260a4016107dc565b6001810183905580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831617815560405183815284907fa1b831bb8b6b242db6d0988a6d21f869c610de9f703a5e45e1b7d3dc3137b9069060200160405180910390a250505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6060600061166d8361171e565b600101905060008167ffffffffffffffff81111561168d5761168d611aeb565b6040519080825280601f01601f1916602001820160405280156116b7576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846116c157509392505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611767577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611793576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106117b157662386f26fc10000830492506010015b6305f5e10083106117c9576305f5e100830492506008015b61271083106117dd57612710830492506004015b606483106117ef576064830492506002015b600a8310610f9b5760010192915050565b60006020828403121561181257600080fd5b5035919050565b60005b8381101561183457818101518382015260200161181c565b83811115611843576000848401525b50505050565b6020815260008251806020840152611868816040850160208701611819565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600080600080608085870312156118b057600080fd5b5050823594602084013594506040840135936060013592509050565b600080604083850312156118df57600080fd5b50508035926020909101359150565b73ffffffffffffffffffffffffffffffffffffffff8116811461191057600080fd5b50565b60008060006060848603121561192857600080fd5b83359250602084013591506040840135611941816118ee565b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156119bd576119bd61197b565b500190565b6000828210156119d4576119d461197b565b500390565b600084516119eb818460208901611819565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611a27816001850160208a01611819565b60019201918201528351611a42816002840160208801611819565b0160020195945050505050565b600060208284031215611a6157600080fd5b8151611a6c816118ee565b9392505050565b600082611aa9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ae657611ae661197b565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea164736f6c634300080f000a", + ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_submissionInterval\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_l2BlockTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2OutputIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2BlockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"l1Timestamp\",\"type\":\"uint256\"}],\"name\":\"OutputProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"prevNextOutputIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newNextOutputIndex\",\"type\":\"uint256\"}],\"name\":\"OutputsDeleted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CHALLENGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FINALIZATION_PERIOD_SECONDS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_BLOCK_TIME\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROPOSER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SUBMISSION_INTERVAL\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"challenger\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"computeL2Timestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"}],\"name\":\"deleteL2Outputs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizationPeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"}],\"name\":\"getL2Output\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint128\",\"name\":\"timestamp\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2BlockNumber\",\"type\":\"uint128\"}],\"internalType\":\"structTypes.OutputProposal\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"getL2OutputAfter\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint128\",\"name\":\"timestamp\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2BlockNumber\",\"type\":\"uint128\"}],\"internalType\":\"structTypes.OutputProposal\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"getL2OutputIndexAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_startingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startingTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_proposer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_challenger\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2BlockTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestOutputIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextOutputIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_l1BlockHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_l1BlockNumber\",\"type\":\"uint256\"}],\"name\":\"proposeL2Output\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startingBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startingTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"submissionInterval\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60e06040523480156200001157600080fd5b50604051620018ae380380620018ae8339810160408190526200003491620002f3565b60008211620000b05760405162461bcd60e51b815260206004820152603460248201527f4c324f75747075744f7261636c653a204c3220626c6f636b2074696d65206d7560448201527f73742062652067726561746572207468616e203000000000000000000000000060648201526084015b60405180910390fd5b60008311620001285760405162461bcd60e51b815260206004820152603a60248201527f4c324f75747075744f7261636c653a207375626d697373696f6e20696e74657260448201527f76616c206d7573742062652067726561746572207468616e20300000000000006064820152608401620000a7565b608083905260a082905260c08190526200014660008080806200014f565b50505062000322565b600054600390610100900460ff1615801562000172575060005460ff8083169116105b620001d75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620000a7565b6000805461ffff191660ff83161761010017905542841115620002715760405162461bcd60e51b8152602060048201526044602482018190527f4c324f75747075744f7261636c653a207374617274696e67204c322074696d65908201527f7374616d70206d757374206265206c657373207468616e2063757272656e742060648201526374696d6560e01b608482015260a401620000a7565b60028490556001859055600580546001600160a01b038581166001600160a01b03199283161790925560048054928516929091169190911790556000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6000806000606084860312156200030957600080fd5b8351925060208401519150604084015190509250925092565b60805160a05160c0516115326200037c600039600081816104b3015281816105710152610beb0152600081816101a1015281816103b9015261127401526000818161021f0152818161053b01526112c201526115326000f3fe60806040526004361061018a5760003560e01c806389c44cbb116100d6578063ce5db8d61161007f578063dcec334811610059578063dcec334814610517578063e1a41bcf1461052c578063f4daa2911461055f57600080fd5b8063ce5db8d6146104a4578063cf8e5cf0146104d7578063d1de856c146104f757600080fd5b8063a25ae557116100b0578063a25ae557146103f0578063a8e4fb901461044c578063bffa7f0f1461047957600080fd5b806389c44cbb1461038a57806393991af3146103aa5780639aaab648146103dd57600080fd5b806369f16eec1161013857806370872aa51161011257806370872aa51461033e5780637f00642014610354578063887862721461037457600080fd5b806369f16eec146102e95780636abcf563146102fe5780636b4d98dd1461031357600080fd5b8063529933df11610169578063529933df1461020d578063534db0e21461024157806354fd4d501461029357600080fd5b80622134cc1461018f578063019e2729146101d65780634599c788146101f8575b600080fd5b34801561019b57600080fd5b506101c37f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b3480156101e257600080fd5b506101f66101f136600461131c565b610593565b005b34801561020457600080fd5b506101c36107f2565b34801561021957600080fd5b506101c37f000000000000000000000000000000000000000000000000000000000000000081565b34801561024d57600080fd5b5060045461026e9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101cd565b34801561029f57600080fd5b506102dc6040518060400160405280600581526020017f312e362e3000000000000000000000000000000000000000000000000000000081525081565b6040516101cd9190611362565b3480156102f557600080fd5b506101c3610865565b34801561030a57600080fd5b506003546101c3565b34801561031f57600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff1661026e565b34801561034a57600080fd5b506101c360015481565b34801561036057600080fd5b506101c361036f3660046113d5565b610877565b34801561038057600080fd5b506101c360025481565b34801561039657600080fd5b506101f66103a53660046113d5565b610a8b565b3480156103b657600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101c3565b6101f66103eb3660046113ee565b610d43565b3480156103fc57600080fd5b5061041061040b3660046113d5565b6111a4565b60408051825181526020808401516fffffffffffffffffffffffffffffffff9081169183019190915292820151909216908201526060016101cd565b34801561045857600080fd5b5060055461026e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561048557600080fd5b5060055473ffffffffffffffffffffffffffffffffffffffff1661026e565b3480156104b057600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101c3565b3480156104e357600080fd5b506104106104f23660046113d5565b611238565b34801561050357600080fd5b506101c36105123660046113d5565b611270565b34801561052357600080fd5b506101c36112be565b34801561053857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101c3565b34801561056b57600080fd5b506101c37f000000000000000000000000000000000000000000000000000000000000000081565b600054600390610100900460ff161580156105b5575060005460ff8083169116105b610646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790554284111561072e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f4c324f75747075744f7261636c653a207374617274696e67204c322074696d65908201527f7374616d70206d757374206265206c657373207468616e2063757272656e742060648201527f74696d6500000000000000000000000000000000000000000000000000000000608482015260a40161063d565b600284905560018590556005805473ffffffffffffffffffffffffffffffffffffffff8581167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556004805492851692909116919091179055600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6003546000901561085c576003805461080d9060019061144f565b8154811061081d5761081d611466565b600091825260209091206002909102016001015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16919050565b6001545b905090565b6003546000906108609060019061144f565b60006108816107f2565b821115610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f7420666f72206120626c6f636b207468617420686173206e6f74206265656e2060648201527f70726f706f736564000000000000000000000000000000000000000000000000608482015260a40161063d565b6003546109eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f74206173206e6f206f7574707574732068617665206265656e2070726f706f7360648201527f6564207965740000000000000000000000000000000000000000000000000000608482015260a40161063d565b6003546000905b80821015610a845760006002610a088385611495565b610a1291906114ad565b90508460038281548110610a2857610a28611466565b600091825260209091206002909102016001015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff161015610a7a57610a73816001611495565b9250610a7e565b8091505b506109f2565b5092915050565b60045473ffffffffffffffffffffffffffffffffffffffff163314610b32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4c324f75747075744f7261636c653a206f6e6c7920746865206368616c6c656e60448201527f67657220616464726573732063616e2064656c657465206f7574707574730000606482015260840161063d565b6003548110610be9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4c324f75747075744f7261636c653a2063616e6e6f742064656c657465206f7560448201527f747075747320616674657220746865206c6174657374206f757470757420696e60648201527f6465780000000000000000000000000000000000000000000000000000000000608482015260a40161063d565b7f000000000000000000000000000000000000000000000000000000000000000060038281548110610c1d57610c1d611466565b6000918252602090912060016002909202010154610c4d906fffffffffffffffffffffffffffffffff164261144f565b10610d00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f4c324f75747075744f7261636c653a2063616e6e6f742064656c657465206f7560448201527f74707574732074686174206861766520616c7265616479206265656e2066696e60648201527f616c697a65640000000000000000000000000000000000000000000000000000608482015260a40161063d565b6000610d0b60035490565b90508160035581817f4ee37ac2c786ec85e87592d3c5c8a1dd66f8496dda3f125d9ea8ca5f657629b660405160405180910390a35050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610e10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f4c324f75747075744f7261636c653a206f6e6c79207468652070726f706f736560448201527f7220616464726573732063616e2070726f706f7365206e6577206f757470757460648201527f7300000000000000000000000000000000000000000000000000000000000000608482015260a40161063d565b610e186112be565b8314610ecc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324f75747075744f7261636c653a20626c6f636b206e756d626572206d757360448201527f7420626520657175616c20746f206e65787420657870656374656420626c6f6360648201527f6b206e756d626572000000000000000000000000000000000000000000000000608482015260a40161063d565b42610ed684611270565b10610f63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c324f75747075744f7261636c653a2063616e6e6f742070726f706f7365204c60448201527f32206f757470757420696e207468652066757475726500000000000000000000606482015260840161063d565b83610ff0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c324f75747075744f7261636c653a204c32206f75747075742070726f706f7360448201527f616c2063616e6e6f7420626520746865207a65726f2068617368000000000000606482015260840161063d565b81156110ac57818140146110ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4c324f75747075744f7261636c653a20626c6f636b206861736820646f65732060448201527f6e6f74206d61746368207468652068617368206174207468652065787065637460648201527f6564206865696768740000000000000000000000000000000000000000000000608482015260a40161063d565b826110b660035490565b857fa7aaf2512769da4e444e3de247be2564225c2e7a8f74cfe528e46e17d24868e2426040516110e891815260200190565b60405180910390a45050604080516060810182529283526fffffffffffffffffffffffffffffffff4281166020850190815292811691840191825260038054600181018255600091909152935160029094027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b810194909455915190518216700100000000000000000000000000000000029116177fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c90910155565b6040805160608101825260008082526020820181905291810191909152600382815481106111d4576111d4611466565b600091825260209182902060408051606081018252600290930290910180548352600101546fffffffffffffffffffffffffffffffff8082169484019490945270010000000000000000000000000000000090049092169181019190915292915050565b6040805160608101825260008082526020820181905291810191909152600361126083610877565b815481106111d4576111d4611466565b60007f0000000000000000000000000000000000000000000000000000000000000000600154836112a1919061144f565b6112ab91906114e8565b6002546112b89190611495565b92915050565b60007f00000000000000000000000000000000000000000000000000000000000000006112e96107f2565b6108609190611495565b803573ffffffffffffffffffffffffffffffffffffffff8116811461131757600080fd5b919050565b6000806000806080858703121561133257600080fd5b8435935060208501359250611349604086016112f3565b9150611357606086016112f3565b905092959194509250565b600060208083528351808285015260005b8181101561138f57858101830151858201604001528201611373565b818111156113a1576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156113e757600080fd5b5035919050565b6000806000806080858703121561140457600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561146157611461611420565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082198211156114a8576114a8611420565b500190565b6000826114e3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561152057611520611420565b50029056fea164736f6c634300080f000a", } // L2OutputOracleABI is the input ABI used to generate the binding from. @@ -44,7 +50,7 @@ var L2OutputOracleABI = L2OutputOracleMetaData.ABI var L2OutputOracleBin = L2OutputOracleMetaData.Bin // DeployL2OutputOracle deploys a new Ethereum contract, binding an instance of L2OutputOracle to it. -func DeployL2OutputOracle(auth *bind.TransactOpts, backend bind.ContractBackend, _validatorPool common.Address, _colosseum common.Address, _submissionInterval *big.Int, _l2BlockTime *big.Int, _startingBlockNumber *big.Int, _startingTimestamp *big.Int, _finalizationPeriodSeconds *big.Int) (common.Address, *types.Transaction, *L2OutputOracle, error) { +func DeployL2OutputOracle(auth *bind.TransactOpts, backend bind.ContractBackend, _submissionInterval *big.Int, _l2BlockTime *big.Int, _finalizationPeriodSeconds *big.Int) (common.Address, *types.Transaction, *L2OutputOracle, error) { parsed, err := L2OutputOracleMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -53,7 +59,7 @@ func DeployL2OutputOracle(auth *bind.TransactOpts, backend bind.ContractBackend, return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(L2OutputOracleBin), backend, _validatorPool, _colosseum, _submissionInterval, _l2BlockTime, _startingBlockNumber, _startingTimestamp, _finalizationPeriodSeconds) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(L2OutputOracleBin), backend, _submissionInterval, _l2BlockTime, _finalizationPeriodSeconds) if err != nil { return common.Address{}, nil, nil, err } @@ -157,11 +163,11 @@ func NewL2OutputOracleFilterer(address common.Address, filterer bind.ContractFil // bindL2OutputOracle binds a generic wrapper to an already deployed contract. func bindL2OutputOracle(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := L2OutputOracleMetaData.GetAbi() + parsed, err := abi.JSON(strings.NewReader(L2OutputOracleABI)) if err != nil { return nil, err } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and @@ -202,12 +208,12 @@ func (_L2OutputOracle *L2OutputOracleTransactorRaw) Transact(opts *bind.Transact return _L2OutputOracle.Contract.contract.Transact(opts, method, params...) } -// COLOSSEUM is a free data retrieval call binding the contract method 0x9e45e8f4. +// CHALLENGER is a free data retrieval call binding the contract method 0x6b4d98dd. // -// Solidity: function COLOSSEUM() view returns(address) -func (_L2OutputOracle *L2OutputOracleCaller) COLOSSEUM(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function CHALLENGER() view returns(address) +func (_L2OutputOracle *L2OutputOracleCaller) CHALLENGER(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "COLOSSEUM") + err := _L2OutputOracle.contract.Call(opts, &out, "CHALLENGER") if err != nil { return *new(common.Address), err @@ -219,18 +225,18 @@ func (_L2OutputOracle *L2OutputOracleCaller) COLOSSEUM(opts *bind.CallOpts) (com } -// COLOSSEUM is a free data retrieval call binding the contract method 0x9e45e8f4. +// CHALLENGER is a free data retrieval call binding the contract method 0x6b4d98dd. // -// Solidity: function COLOSSEUM() view returns(address) -func (_L2OutputOracle *L2OutputOracleSession) COLOSSEUM() (common.Address, error) { - return _L2OutputOracle.Contract.COLOSSEUM(&_L2OutputOracle.CallOpts) +// Solidity: function CHALLENGER() view returns(address) +func (_L2OutputOracle *L2OutputOracleSession) CHALLENGER() (common.Address, error) { + return _L2OutputOracle.Contract.CHALLENGER(&_L2OutputOracle.CallOpts) } -// COLOSSEUM is a free data retrieval call binding the contract method 0x9e45e8f4. +// CHALLENGER is a free data retrieval call binding the contract method 0x6b4d98dd. // -// Solidity: function COLOSSEUM() view returns(address) -func (_L2OutputOracle *L2OutputOracleCallerSession) COLOSSEUM() (common.Address, error) { - return _L2OutputOracle.Contract.COLOSSEUM(&_L2OutputOracle.CallOpts) +// Solidity: function CHALLENGER() view returns(address) +func (_L2OutputOracle *L2OutputOracleCallerSession) CHALLENGER() (common.Address, error) { + return _L2OutputOracle.Contract.CHALLENGER(&_L2OutputOracle.CallOpts) } // FINALIZATIONPERIODSECONDS is a free data retrieval call binding the contract method 0xf4daa291. @@ -295,6 +301,37 @@ func (_L2OutputOracle *L2OutputOracleCallerSession) L2BLOCKTIME() (*big.Int, err return _L2OutputOracle.Contract.L2BLOCKTIME(&_L2OutputOracle.CallOpts) } +// PROPOSER is a free data retrieval call binding the contract method 0xbffa7f0f. +// +// Solidity: function PROPOSER() view returns(address) +func (_L2OutputOracle *L2OutputOracleCaller) PROPOSER(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L2OutputOracle.contract.Call(opts, &out, "PROPOSER") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// PROPOSER is a free data retrieval call binding the contract method 0xbffa7f0f. +// +// Solidity: function PROPOSER() view returns(address) +func (_L2OutputOracle *L2OutputOracleSession) PROPOSER() (common.Address, error) { + return _L2OutputOracle.Contract.PROPOSER(&_L2OutputOracle.CallOpts) +} + +// PROPOSER is a free data retrieval call binding the contract method 0xbffa7f0f. +// +// Solidity: function PROPOSER() view returns(address) +func (_L2OutputOracle *L2OutputOracleCallerSession) PROPOSER() (common.Address, error) { + return _L2OutputOracle.Contract.PROPOSER(&_L2OutputOracle.CallOpts) +} + // SUBMISSIONINTERVAL is a free data retrieval call binding the contract method 0x529933df. // // Solidity: function SUBMISSION_INTERVAL() view returns(uint256) @@ -326,12 +363,12 @@ func (_L2OutputOracle *L2OutputOracleCallerSession) SUBMISSIONINTERVAL() (*big.I return _L2OutputOracle.Contract.SUBMISSIONINTERVAL(&_L2OutputOracle.CallOpts) } -// VALIDATORPOOL is a free data retrieval call binding the contract method 0xb98debbf. +// Challenger is a free data retrieval call binding the contract method 0x534db0e2. // -// Solidity: function VALIDATOR_POOL() view returns(address) -func (_L2OutputOracle *L2OutputOracleCaller) VALIDATORPOOL(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function challenger() view returns(address) +func (_L2OutputOracle *L2OutputOracleCaller) Challenger(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "VALIDATOR_POOL") + err := _L2OutputOracle.contract.Call(opts, &out, "challenger") if err != nil { return *new(common.Address), err @@ -343,18 +380,18 @@ func (_L2OutputOracle *L2OutputOracleCaller) VALIDATORPOOL(opts *bind.CallOpts) } -// VALIDATORPOOL is a free data retrieval call binding the contract method 0xb98debbf. +// Challenger is a free data retrieval call binding the contract method 0x534db0e2. // -// Solidity: function VALIDATOR_POOL() view returns(address) -func (_L2OutputOracle *L2OutputOracleSession) VALIDATORPOOL() (common.Address, error) { - return _L2OutputOracle.Contract.VALIDATORPOOL(&_L2OutputOracle.CallOpts) +// Solidity: function challenger() view returns(address) +func (_L2OutputOracle *L2OutputOracleSession) Challenger() (common.Address, error) { + return _L2OutputOracle.Contract.Challenger(&_L2OutputOracle.CallOpts) } -// VALIDATORPOOL is a free data retrieval call binding the contract method 0xb98debbf. +// Challenger is a free data retrieval call binding the contract method 0x534db0e2. // -// Solidity: function VALIDATOR_POOL() view returns(address) -func (_L2OutputOracle *L2OutputOracleCallerSession) VALIDATORPOOL() (common.Address, error) { - return _L2OutputOracle.Contract.VALIDATORPOOL(&_L2OutputOracle.CallOpts) +// Solidity: function challenger() view returns(address) +func (_L2OutputOracle *L2OutputOracleCallerSession) Challenger() (common.Address, error) { + return _L2OutputOracle.Contract.Challenger(&_L2OutputOracle.CallOpts) } // ComputeL2Timestamp is a free data retrieval call binding the contract method 0xd1de856c. @@ -388,12 +425,12 @@ func (_L2OutputOracle *L2OutputOracleCallerSession) ComputeL2Timestamp(_l2BlockN return _L2OutputOracle.Contract.ComputeL2Timestamp(&_L2OutputOracle.CallOpts, _l2BlockNumber) } -// FinalizedAt is a free data retrieval call binding the contract method 0xa48ea6de. +// FinalizationPeriodSeconds is a free data retrieval call binding the contract method 0xce5db8d6. // -// Solidity: function finalizedAt(uint256 _outputIndex) view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCaller) FinalizedAt(opts *bind.CallOpts, _outputIndex *big.Int) (*big.Int, error) { +// Solidity: function finalizationPeriodSeconds() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCaller) FinalizationPeriodSeconds(opts *bind.CallOpts) (*big.Int, error) { var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "finalizedAt", _outputIndex) + err := _L2OutputOracle.contract.Call(opts, &out, "finalizationPeriodSeconds") if err != nil { return *new(*big.Int), err @@ -405,32 +442,32 @@ func (_L2OutputOracle *L2OutputOracleCaller) FinalizedAt(opts *bind.CallOpts, _o } -// FinalizedAt is a free data retrieval call binding the contract method 0xa48ea6de. +// FinalizationPeriodSeconds is a free data retrieval call binding the contract method 0xce5db8d6. // -// Solidity: function finalizedAt(uint256 _outputIndex) view returns(uint256) -func (_L2OutputOracle *L2OutputOracleSession) FinalizedAt(_outputIndex *big.Int) (*big.Int, error) { - return _L2OutputOracle.Contract.FinalizedAt(&_L2OutputOracle.CallOpts, _outputIndex) +// Solidity: function finalizationPeriodSeconds() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleSession) FinalizationPeriodSeconds() (*big.Int, error) { + return _L2OutputOracle.Contract.FinalizationPeriodSeconds(&_L2OutputOracle.CallOpts) } -// FinalizedAt is a free data retrieval call binding the contract method 0xa48ea6de. +// FinalizationPeriodSeconds is a free data retrieval call binding the contract method 0xce5db8d6. // -// Solidity: function finalizedAt(uint256 _outputIndex) view returns(uint256) -func (_L2OutputOracle *L2OutputOracleCallerSession) FinalizedAt(_outputIndex *big.Int) (*big.Int, error) { - return _L2OutputOracle.Contract.FinalizedAt(&_L2OutputOracle.CallOpts, _outputIndex) +// Solidity: function finalizationPeriodSeconds() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCallerSession) FinalizationPeriodSeconds() (*big.Int, error) { + return _L2OutputOracle.Contract.FinalizationPeriodSeconds(&_L2OutputOracle.CallOpts) } // GetL2Output is a free data retrieval call binding the contract method 0xa25ae557. // -// Solidity: function getL2Output(uint256 _l2OutputIndex) view returns((address,bytes32,uint128,uint128)) -func (_L2OutputOracle *L2OutputOracleCaller) GetL2Output(opts *bind.CallOpts, _l2OutputIndex *big.Int) (TypesCheckpointOutput, error) { +// Solidity: function getL2Output(uint256 _l2OutputIndex) view returns((bytes32,uint128,uint128)) +func (_L2OutputOracle *L2OutputOracleCaller) GetL2Output(opts *bind.CallOpts, _l2OutputIndex *big.Int) (TypesOutputProposal, error) { var out []interface{} err := _L2OutputOracle.contract.Call(opts, &out, "getL2Output", _l2OutputIndex) if err != nil { - return *new(TypesCheckpointOutput), err + return *new(TypesOutputProposal), err } - out0 := *abi.ConvertType(out[0], new(TypesCheckpointOutput)).(*TypesCheckpointOutput) + out0 := *abi.ConvertType(out[0], new(TypesOutputProposal)).(*TypesOutputProposal) return out0, err @@ -438,30 +475,30 @@ func (_L2OutputOracle *L2OutputOracleCaller) GetL2Output(opts *bind.CallOpts, _l // GetL2Output is a free data retrieval call binding the contract method 0xa25ae557. // -// Solidity: function getL2Output(uint256 _l2OutputIndex) view returns((address,bytes32,uint128,uint128)) -func (_L2OutputOracle *L2OutputOracleSession) GetL2Output(_l2OutputIndex *big.Int) (TypesCheckpointOutput, error) { +// Solidity: function getL2Output(uint256 _l2OutputIndex) view returns((bytes32,uint128,uint128)) +func (_L2OutputOracle *L2OutputOracleSession) GetL2Output(_l2OutputIndex *big.Int) (TypesOutputProposal, error) { return _L2OutputOracle.Contract.GetL2Output(&_L2OutputOracle.CallOpts, _l2OutputIndex) } // GetL2Output is a free data retrieval call binding the contract method 0xa25ae557. // -// Solidity: function getL2Output(uint256 _l2OutputIndex) view returns((address,bytes32,uint128,uint128)) -func (_L2OutputOracle *L2OutputOracleCallerSession) GetL2Output(_l2OutputIndex *big.Int) (TypesCheckpointOutput, error) { +// Solidity: function getL2Output(uint256 _l2OutputIndex) view returns((bytes32,uint128,uint128)) +func (_L2OutputOracle *L2OutputOracleCallerSession) GetL2Output(_l2OutputIndex *big.Int) (TypesOutputProposal, error) { return _L2OutputOracle.Contract.GetL2Output(&_L2OutputOracle.CallOpts, _l2OutputIndex) } // GetL2OutputAfter is a free data retrieval call binding the contract method 0xcf8e5cf0. // -// Solidity: function getL2OutputAfter(uint256 _l2BlockNumber) view returns((address,bytes32,uint128,uint128)) -func (_L2OutputOracle *L2OutputOracleCaller) GetL2OutputAfter(opts *bind.CallOpts, _l2BlockNumber *big.Int) (TypesCheckpointOutput, error) { +// Solidity: function getL2OutputAfter(uint256 _l2BlockNumber) view returns((bytes32,uint128,uint128)) +func (_L2OutputOracle *L2OutputOracleCaller) GetL2OutputAfter(opts *bind.CallOpts, _l2BlockNumber *big.Int) (TypesOutputProposal, error) { var out []interface{} err := _L2OutputOracle.contract.Call(opts, &out, "getL2OutputAfter", _l2BlockNumber) if err != nil { - return *new(TypesCheckpointOutput), err + return *new(TypesOutputProposal), err } - out0 := *abi.ConvertType(out[0], new(TypesCheckpointOutput)).(*TypesCheckpointOutput) + out0 := *abi.ConvertType(out[0], new(TypesOutputProposal)).(*TypesOutputProposal) return out0, err @@ -469,15 +506,15 @@ func (_L2OutputOracle *L2OutputOracleCaller) GetL2OutputAfter(opts *bind.CallOpt // GetL2OutputAfter is a free data retrieval call binding the contract method 0xcf8e5cf0. // -// Solidity: function getL2OutputAfter(uint256 _l2BlockNumber) view returns((address,bytes32,uint128,uint128)) -func (_L2OutputOracle *L2OutputOracleSession) GetL2OutputAfter(_l2BlockNumber *big.Int) (TypesCheckpointOutput, error) { +// Solidity: function getL2OutputAfter(uint256 _l2BlockNumber) view returns((bytes32,uint128,uint128)) +func (_L2OutputOracle *L2OutputOracleSession) GetL2OutputAfter(_l2BlockNumber *big.Int) (TypesOutputProposal, error) { return _L2OutputOracle.Contract.GetL2OutputAfter(&_L2OutputOracle.CallOpts, _l2BlockNumber) } // GetL2OutputAfter is a free data retrieval call binding the contract method 0xcf8e5cf0. // -// Solidity: function getL2OutputAfter(uint256 _l2BlockNumber) view returns((address,bytes32,uint128,uint128)) -func (_L2OutputOracle *L2OutputOracleCallerSession) GetL2OutputAfter(_l2BlockNumber *big.Int) (TypesCheckpointOutput, error) { +// Solidity: function getL2OutputAfter(uint256 _l2BlockNumber) view returns((bytes32,uint128,uint128)) +func (_L2OutputOracle *L2OutputOracleCallerSession) GetL2OutputAfter(_l2BlockNumber *big.Int) (TypesOutputProposal, error) { return _L2OutputOracle.Contract.GetL2OutputAfter(&_L2OutputOracle.CallOpts, _l2BlockNumber) } @@ -512,66 +549,35 @@ func (_L2OutputOracle *L2OutputOracleCallerSession) GetL2OutputIndexAfter(_l2Blo return _L2OutputOracle.Contract.GetL2OutputIndexAfter(&_L2OutputOracle.CallOpts, _l2BlockNumber) } -// GetSubmitter is a free data retrieval call binding the contract method 0xb0ea09a8. +// L2BlockTime is a free data retrieval call binding the contract method 0x93991af3. // -// Solidity: function getSubmitter(uint256 _outputIndex) view returns(address) -func (_L2OutputOracle *L2OutputOracleCaller) GetSubmitter(opts *bind.CallOpts, _outputIndex *big.Int) (common.Address, error) { +// Solidity: function l2BlockTime() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCaller) L2BlockTime(opts *bind.CallOpts) (*big.Int, error) { var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "getSubmitter", _outputIndex) + err := _L2OutputOracle.contract.Call(opts, &out, "l2BlockTime") if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetSubmitter is a free data retrieval call binding the contract method 0xb0ea09a8. -// -// Solidity: function getSubmitter(uint256 _outputIndex) view returns(address) -func (_L2OutputOracle *L2OutputOracleSession) GetSubmitter(_outputIndex *big.Int) (common.Address, error) { - return _L2OutputOracle.Contract.GetSubmitter(&_L2OutputOracle.CallOpts, _outputIndex) -} - -// GetSubmitter is a free data retrieval call binding the contract method 0xb0ea09a8. -// -// Solidity: function getSubmitter(uint256 _outputIndex) view returns(address) -func (_L2OutputOracle *L2OutputOracleCallerSession) GetSubmitter(_outputIndex *big.Int) (common.Address, error) { - return _L2OutputOracle.Contract.GetSubmitter(&_L2OutputOracle.CallOpts, _outputIndex) -} - -// IsFinalized is a free data retrieval call binding the contract method 0x33727c4d. -// -// Solidity: function isFinalized(uint256 _outputIndex) view returns(bool) -func (_L2OutputOracle *L2OutputOracleCaller) IsFinalized(opts *bind.CallOpts, _outputIndex *big.Int) (bool, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "isFinalized", _outputIndex) - - if err != nil { - return *new(bool), err + return *new(*big.Int), err } - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) return out0, err } -// IsFinalized is a free data retrieval call binding the contract method 0x33727c4d. +// L2BlockTime is a free data retrieval call binding the contract method 0x93991af3. // -// Solidity: function isFinalized(uint256 _outputIndex) view returns(bool) -func (_L2OutputOracle *L2OutputOracleSession) IsFinalized(_outputIndex *big.Int) (bool, error) { - return _L2OutputOracle.Contract.IsFinalized(&_L2OutputOracle.CallOpts, _outputIndex) +// Solidity: function l2BlockTime() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleSession) L2BlockTime() (*big.Int, error) { + return _L2OutputOracle.Contract.L2BlockTime(&_L2OutputOracle.CallOpts) } -// IsFinalized is a free data retrieval call binding the contract method 0x33727c4d. +// L2BlockTime is a free data retrieval call binding the contract method 0x93991af3. // -// Solidity: function isFinalized(uint256 _outputIndex) view returns(bool) -func (_L2OutputOracle *L2OutputOracleCallerSession) IsFinalized(_outputIndex *big.Int) (bool, error) { - return _L2OutputOracle.Contract.IsFinalized(&_L2OutputOracle.CallOpts, _outputIndex) +// Solidity: function l2BlockTime() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCallerSession) L2BlockTime() (*big.Int, error) { + return _L2OutputOracle.Contract.L2BlockTime(&_L2OutputOracle.CallOpts) } // LatestBlockNumber is a free data retrieval call binding the contract method 0x4599c788. @@ -698,6 +704,37 @@ func (_L2OutputOracle *L2OutputOracleCallerSession) NextOutputIndex() (*big.Int, return _L2OutputOracle.Contract.NextOutputIndex(&_L2OutputOracle.CallOpts) } +// Proposer is a free data retrieval call binding the contract method 0xa8e4fb90. +// +// Solidity: function proposer() view returns(address) +func (_L2OutputOracle *L2OutputOracleCaller) Proposer(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L2OutputOracle.contract.Call(opts, &out, "proposer") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Proposer is a free data retrieval call binding the contract method 0xa8e4fb90. +// +// Solidity: function proposer() view returns(address) +func (_L2OutputOracle *L2OutputOracleSession) Proposer() (common.Address, error) { + return _L2OutputOracle.Contract.Proposer(&_L2OutputOracle.CallOpts) +} + +// Proposer is a free data retrieval call binding the contract method 0xa8e4fb90. +// +// Solidity: function proposer() view returns(address) +func (_L2OutputOracle *L2OutputOracleCallerSession) Proposer() (common.Address, error) { + return _L2OutputOracle.Contract.Proposer(&_L2OutputOracle.CallOpts) +} + // StartingBlockNumber is a free data retrieval call binding the contract method 0x70872aa5. // // Solidity: function startingBlockNumber() view returns(uint256) @@ -760,6 +797,37 @@ func (_L2OutputOracle *L2OutputOracleCallerSession) StartingTimestamp() (*big.In return _L2OutputOracle.Contract.StartingTimestamp(&_L2OutputOracle.CallOpts) } +// SubmissionInterval is a free data retrieval call binding the contract method 0xe1a41bcf. +// +// Solidity: function submissionInterval() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCaller) SubmissionInterval(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _L2OutputOracle.contract.Call(opts, &out, "submissionInterval") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// SubmissionInterval is a free data retrieval call binding the contract method 0xe1a41bcf. +// +// Solidity: function submissionInterval() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleSession) SubmissionInterval() (*big.Int, error) { + return _L2OutputOracle.Contract.SubmissionInterval(&_L2OutputOracle.CallOpts) +} + +// SubmissionInterval is a free data retrieval call binding the contract method 0xe1a41bcf. +// +// Solidity: function submissionInterval() view returns(uint256) +func (_L2OutputOracle *L2OutputOracleCallerSession) SubmissionInterval() (*big.Int, error) { + return _L2OutputOracle.Contract.SubmissionInterval(&_L2OutputOracle.CallOpts) +} + // Version is a free data retrieval call binding the contract method 0x54fd4d50. // // Solidity: function version() view returns(string) @@ -791,67 +859,67 @@ func (_L2OutputOracle *L2OutputOracleCallerSession) Version() (string, error) { return _L2OutputOracle.Contract.Version(&_L2OutputOracle.CallOpts) } -// Initialize is a paid mutator transaction binding the contract method 0xe4a30116. +// DeleteL2Outputs is a paid mutator transaction binding the contract method 0x89c44cbb. // -// Solidity: function initialize(uint256 _startingBlockNumber, uint256 _startingTimestamp) returns() -func (_L2OutputOracle *L2OutputOracleTransactor) Initialize(opts *bind.TransactOpts, _startingBlockNumber *big.Int, _startingTimestamp *big.Int) (*types.Transaction, error) { - return _L2OutputOracle.contract.Transact(opts, "initialize", _startingBlockNumber, _startingTimestamp) +// Solidity: function deleteL2Outputs(uint256 _l2OutputIndex) returns() +func (_L2OutputOracle *L2OutputOracleTransactor) DeleteL2Outputs(opts *bind.TransactOpts, _l2OutputIndex *big.Int) (*types.Transaction, error) { + return _L2OutputOracle.contract.Transact(opts, "deleteL2Outputs", _l2OutputIndex) } -// Initialize is a paid mutator transaction binding the contract method 0xe4a30116. +// DeleteL2Outputs is a paid mutator transaction binding the contract method 0x89c44cbb. // -// Solidity: function initialize(uint256 _startingBlockNumber, uint256 _startingTimestamp) returns() -func (_L2OutputOracle *L2OutputOracleSession) Initialize(_startingBlockNumber *big.Int, _startingTimestamp *big.Int) (*types.Transaction, error) { - return _L2OutputOracle.Contract.Initialize(&_L2OutputOracle.TransactOpts, _startingBlockNumber, _startingTimestamp) +// Solidity: function deleteL2Outputs(uint256 _l2OutputIndex) returns() +func (_L2OutputOracle *L2OutputOracleSession) DeleteL2Outputs(_l2OutputIndex *big.Int) (*types.Transaction, error) { + return _L2OutputOracle.Contract.DeleteL2Outputs(&_L2OutputOracle.TransactOpts, _l2OutputIndex) } -// Initialize is a paid mutator transaction binding the contract method 0xe4a30116. +// DeleteL2Outputs is a paid mutator transaction binding the contract method 0x89c44cbb. // -// Solidity: function initialize(uint256 _startingBlockNumber, uint256 _startingTimestamp) returns() -func (_L2OutputOracle *L2OutputOracleTransactorSession) Initialize(_startingBlockNumber *big.Int, _startingTimestamp *big.Int) (*types.Transaction, error) { - return _L2OutputOracle.Contract.Initialize(&_L2OutputOracle.TransactOpts, _startingBlockNumber, _startingTimestamp) +// Solidity: function deleteL2Outputs(uint256 _l2OutputIndex) returns() +func (_L2OutputOracle *L2OutputOracleTransactorSession) DeleteL2Outputs(_l2OutputIndex *big.Int) (*types.Transaction, error) { + return _L2OutputOracle.Contract.DeleteL2Outputs(&_L2OutputOracle.TransactOpts, _l2OutputIndex) } -// ReplaceL2Output is a paid mutator transaction binding the contract method 0xe6646723. +// Initialize is a paid mutator transaction binding the contract method 0x019e2729. // -// Solidity: function replaceL2Output(uint256 _l2OutputIndex, bytes32 _newOutputRoot, address _submitter) returns() -func (_L2OutputOracle *L2OutputOracleTransactor) ReplaceL2Output(opts *bind.TransactOpts, _l2OutputIndex *big.Int, _newOutputRoot [32]byte, _submitter common.Address) (*types.Transaction, error) { - return _L2OutputOracle.contract.Transact(opts, "replaceL2Output", _l2OutputIndex, _newOutputRoot, _submitter) +// Solidity: function initialize(uint256 _startingBlockNumber, uint256 _startingTimestamp, address _proposer, address _challenger) returns() +func (_L2OutputOracle *L2OutputOracleTransactor) Initialize(opts *bind.TransactOpts, _startingBlockNumber *big.Int, _startingTimestamp *big.Int, _proposer common.Address, _challenger common.Address) (*types.Transaction, error) { + return _L2OutputOracle.contract.Transact(opts, "initialize", _startingBlockNumber, _startingTimestamp, _proposer, _challenger) } -// ReplaceL2Output is a paid mutator transaction binding the contract method 0xe6646723. +// Initialize is a paid mutator transaction binding the contract method 0x019e2729. // -// Solidity: function replaceL2Output(uint256 _l2OutputIndex, bytes32 _newOutputRoot, address _submitter) returns() -func (_L2OutputOracle *L2OutputOracleSession) ReplaceL2Output(_l2OutputIndex *big.Int, _newOutputRoot [32]byte, _submitter common.Address) (*types.Transaction, error) { - return _L2OutputOracle.Contract.ReplaceL2Output(&_L2OutputOracle.TransactOpts, _l2OutputIndex, _newOutputRoot, _submitter) +// Solidity: function initialize(uint256 _startingBlockNumber, uint256 _startingTimestamp, address _proposer, address _challenger) returns() +func (_L2OutputOracle *L2OutputOracleSession) Initialize(_startingBlockNumber *big.Int, _startingTimestamp *big.Int, _proposer common.Address, _challenger common.Address) (*types.Transaction, error) { + return _L2OutputOracle.Contract.Initialize(&_L2OutputOracle.TransactOpts, _startingBlockNumber, _startingTimestamp, _proposer, _challenger) } -// ReplaceL2Output is a paid mutator transaction binding the contract method 0xe6646723. +// Initialize is a paid mutator transaction binding the contract method 0x019e2729. // -// Solidity: function replaceL2Output(uint256 _l2OutputIndex, bytes32 _newOutputRoot, address _submitter) returns() -func (_L2OutputOracle *L2OutputOracleTransactorSession) ReplaceL2Output(_l2OutputIndex *big.Int, _newOutputRoot [32]byte, _submitter common.Address) (*types.Transaction, error) { - return _L2OutputOracle.Contract.ReplaceL2Output(&_L2OutputOracle.TransactOpts, _l2OutputIndex, _newOutputRoot, _submitter) +// Solidity: function initialize(uint256 _startingBlockNumber, uint256 _startingTimestamp, address _proposer, address _challenger) returns() +func (_L2OutputOracle *L2OutputOracleTransactorSession) Initialize(_startingBlockNumber *big.Int, _startingTimestamp *big.Int, _proposer common.Address, _challenger common.Address) (*types.Transaction, error) { + return _L2OutputOracle.Contract.Initialize(&_L2OutputOracle.TransactOpts, _startingBlockNumber, _startingTimestamp, _proposer, _challenger) } -// SubmitL2Output is a paid mutator transaction binding the contract method 0x5a045f78. +// ProposeL2Output is a paid mutator transaction binding the contract method 0x9aaab648. // -// Solidity: function submitL2Output(bytes32 _outputRoot, uint256 _l2BlockNumber, bytes32 _l1BlockHash, uint256 _l1BlockNumber) payable returns() -func (_L2OutputOracle *L2OutputOracleTransactor) SubmitL2Output(opts *bind.TransactOpts, _outputRoot [32]byte, _l2BlockNumber *big.Int, _l1BlockHash [32]byte, _l1BlockNumber *big.Int) (*types.Transaction, error) { - return _L2OutputOracle.contract.Transact(opts, "submitL2Output", _outputRoot, _l2BlockNumber, _l1BlockHash, _l1BlockNumber) +// Solidity: function proposeL2Output(bytes32 _outputRoot, uint256 _l2BlockNumber, bytes32 _l1BlockHash, uint256 _l1BlockNumber) payable returns() +func (_L2OutputOracle *L2OutputOracleTransactor) ProposeL2Output(opts *bind.TransactOpts, _outputRoot [32]byte, _l2BlockNumber *big.Int, _l1BlockHash [32]byte, _l1BlockNumber *big.Int) (*types.Transaction, error) { + return _L2OutputOracle.contract.Transact(opts, "proposeL2Output", _outputRoot, _l2BlockNumber, _l1BlockHash, _l1BlockNumber) } -// SubmitL2Output is a paid mutator transaction binding the contract method 0x5a045f78. +// ProposeL2Output is a paid mutator transaction binding the contract method 0x9aaab648. // -// Solidity: function submitL2Output(bytes32 _outputRoot, uint256 _l2BlockNumber, bytes32 _l1BlockHash, uint256 _l1BlockNumber) payable returns() -func (_L2OutputOracle *L2OutputOracleSession) SubmitL2Output(_outputRoot [32]byte, _l2BlockNumber *big.Int, _l1BlockHash [32]byte, _l1BlockNumber *big.Int) (*types.Transaction, error) { - return _L2OutputOracle.Contract.SubmitL2Output(&_L2OutputOracle.TransactOpts, _outputRoot, _l2BlockNumber, _l1BlockHash, _l1BlockNumber) +// Solidity: function proposeL2Output(bytes32 _outputRoot, uint256 _l2BlockNumber, bytes32 _l1BlockHash, uint256 _l1BlockNumber) payable returns() +func (_L2OutputOracle *L2OutputOracleSession) ProposeL2Output(_outputRoot [32]byte, _l2BlockNumber *big.Int, _l1BlockHash [32]byte, _l1BlockNumber *big.Int) (*types.Transaction, error) { + return _L2OutputOracle.Contract.ProposeL2Output(&_L2OutputOracle.TransactOpts, _outputRoot, _l2BlockNumber, _l1BlockHash, _l1BlockNumber) } -// SubmitL2Output is a paid mutator transaction binding the contract method 0x5a045f78. +// ProposeL2Output is a paid mutator transaction binding the contract method 0x9aaab648. // -// Solidity: function submitL2Output(bytes32 _outputRoot, uint256 _l2BlockNumber, bytes32 _l1BlockHash, uint256 _l1BlockNumber) payable returns() -func (_L2OutputOracle *L2OutputOracleTransactorSession) SubmitL2Output(_outputRoot [32]byte, _l2BlockNumber *big.Int, _l1BlockHash [32]byte, _l1BlockNumber *big.Int) (*types.Transaction, error) { - return _L2OutputOracle.Contract.SubmitL2Output(&_L2OutputOracle.TransactOpts, _outputRoot, _l2BlockNumber, _l1BlockHash, _l1BlockNumber) +// Solidity: function proposeL2Output(bytes32 _outputRoot, uint256 _l2BlockNumber, bytes32 _l1BlockHash, uint256 _l1BlockNumber) payable returns() +func (_L2OutputOracle *L2OutputOracleTransactorSession) ProposeL2Output(_outputRoot [32]byte, _l2BlockNumber *big.Int, _l1BlockHash [32]byte, _l1BlockNumber *big.Int) (*types.Transaction, error) { + return _L2OutputOracle.Contract.ProposeL2Output(&_L2OutputOracle.TransactOpts, _outputRoot, _l2BlockNumber, _l1BlockHash, _l1BlockNumber) } // L2OutputOracleInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the L2OutputOracle contract. @@ -988,9 +1056,9 @@ func (_L2OutputOracle *L2OutputOracleFilterer) ParseInitialized(log types.Log) ( return event, nil } -// L2OutputOracleOutputReplacedIterator is returned from FilterOutputReplaced and is used to iterate over the raw logs and unpacked data for OutputReplaced events raised by the L2OutputOracle contract. -type L2OutputOracleOutputReplacedIterator struct { - Event *L2OutputOracleOutputReplaced // Event containing the contract specifics and raw log +// L2OutputOracleOutputProposedIterator is returned from FilterOutputProposed and is used to iterate over the raw logs and unpacked data for OutputProposed events raised by the L2OutputOracle contract. +type L2OutputOracleOutputProposedIterator struct { + Event *L2OutputOracleOutputProposed // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1004,7 +1072,7 @@ type L2OutputOracleOutputReplacedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *L2OutputOracleOutputReplacedIterator) Next() bool { +func (it *L2OutputOracleOutputProposedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1013,7 +1081,7 @@ func (it *L2OutputOracleOutputReplacedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(L2OutputOracleOutputReplaced) + it.Event = new(L2OutputOracleOutputProposed) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1028,7 +1096,7 @@ func (it *L2OutputOracleOutputReplacedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(L2OutputOracleOutputReplaced) + it.Event = new(L2OutputOracleOutputProposed) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1044,52 +1112,70 @@ func (it *L2OutputOracleOutputReplacedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *L2OutputOracleOutputReplacedIterator) Error() error { +func (it *L2OutputOracleOutputProposedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *L2OutputOracleOutputReplacedIterator) Close() error { +func (it *L2OutputOracleOutputProposedIterator) Close() error { it.sub.Unsubscribe() return nil } -// L2OutputOracleOutputReplaced represents a OutputReplaced event raised by the L2OutputOracle contract. -type L2OutputOracleOutputReplaced struct { - OutputIndex *big.Int - NewOutputRoot [32]byte +// L2OutputOracleOutputProposed represents a OutputProposed event raised by the L2OutputOracle contract. +type L2OutputOracleOutputProposed struct { + OutputRoot [32]byte + L2OutputIndex *big.Int + L2BlockNumber *big.Int + L1Timestamp *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterOutputReplaced is a free log retrieval operation binding the contract event 0xa1b831bb8b6b242db6d0988a6d21f869c610de9f703a5e45e1b7d3dc3137b906. +// FilterOutputProposed is a free log retrieval operation binding the contract event 0xa7aaf2512769da4e444e3de247be2564225c2e7a8f74cfe528e46e17d24868e2. // -// Solidity: event OutputReplaced(uint256 indexed outputIndex, bytes32 newOutputRoot) -func (_L2OutputOracle *L2OutputOracleFilterer) FilterOutputReplaced(opts *bind.FilterOpts, outputIndex []*big.Int) (*L2OutputOracleOutputReplacedIterator, error) { +// Solidity: event OutputProposed(bytes32 indexed outputRoot, uint256 indexed l2OutputIndex, uint256 indexed l2BlockNumber, uint256 l1Timestamp) +func (_L2OutputOracle *L2OutputOracleFilterer) FilterOutputProposed(opts *bind.FilterOpts, outputRoot [][32]byte, l2OutputIndex []*big.Int, l2BlockNumber []*big.Int) (*L2OutputOracleOutputProposedIterator, error) { - var outputIndexRule []interface{} - for _, outputIndexItem := range outputIndex { - outputIndexRule = append(outputIndexRule, outputIndexItem) + var outputRootRule []interface{} + for _, outputRootItem := range outputRoot { + outputRootRule = append(outputRootRule, outputRootItem) + } + var l2OutputIndexRule []interface{} + for _, l2OutputIndexItem := range l2OutputIndex { + l2OutputIndexRule = append(l2OutputIndexRule, l2OutputIndexItem) + } + var l2BlockNumberRule []interface{} + for _, l2BlockNumberItem := range l2BlockNumber { + l2BlockNumberRule = append(l2BlockNumberRule, l2BlockNumberItem) } - logs, sub, err := _L2OutputOracle.contract.FilterLogs(opts, "OutputReplaced", outputIndexRule) + logs, sub, err := _L2OutputOracle.contract.FilterLogs(opts, "OutputProposed", outputRootRule, l2OutputIndexRule, l2BlockNumberRule) if err != nil { return nil, err } - return &L2OutputOracleOutputReplacedIterator{contract: _L2OutputOracle.contract, event: "OutputReplaced", logs: logs, sub: sub}, nil + return &L2OutputOracleOutputProposedIterator{contract: _L2OutputOracle.contract, event: "OutputProposed", logs: logs, sub: sub}, nil } -// WatchOutputReplaced is a free log subscription operation binding the contract event 0xa1b831bb8b6b242db6d0988a6d21f869c610de9f703a5e45e1b7d3dc3137b906. +// WatchOutputProposed is a free log subscription operation binding the contract event 0xa7aaf2512769da4e444e3de247be2564225c2e7a8f74cfe528e46e17d24868e2. // -// Solidity: event OutputReplaced(uint256 indexed outputIndex, bytes32 newOutputRoot) -func (_L2OutputOracle *L2OutputOracleFilterer) WatchOutputReplaced(opts *bind.WatchOpts, sink chan<- *L2OutputOracleOutputReplaced, outputIndex []*big.Int) (event.Subscription, error) { +// Solidity: event OutputProposed(bytes32 indexed outputRoot, uint256 indexed l2OutputIndex, uint256 indexed l2BlockNumber, uint256 l1Timestamp) +func (_L2OutputOracle *L2OutputOracleFilterer) WatchOutputProposed(opts *bind.WatchOpts, sink chan<- *L2OutputOracleOutputProposed, outputRoot [][32]byte, l2OutputIndex []*big.Int, l2BlockNumber []*big.Int) (event.Subscription, error) { - var outputIndexRule []interface{} - for _, outputIndexItem := range outputIndex { - outputIndexRule = append(outputIndexRule, outputIndexItem) + var outputRootRule []interface{} + for _, outputRootItem := range outputRoot { + outputRootRule = append(outputRootRule, outputRootItem) + } + var l2OutputIndexRule []interface{} + for _, l2OutputIndexItem := range l2OutputIndex { + l2OutputIndexRule = append(l2OutputIndexRule, l2OutputIndexItem) + } + var l2BlockNumberRule []interface{} + for _, l2BlockNumberItem := range l2BlockNumber { + l2BlockNumberRule = append(l2BlockNumberRule, l2BlockNumberItem) } - logs, sub, err := _L2OutputOracle.contract.WatchLogs(opts, "OutputReplaced", outputIndexRule) + logs, sub, err := _L2OutputOracle.contract.WatchLogs(opts, "OutputProposed", outputRootRule, l2OutputIndexRule, l2BlockNumberRule) if err != nil { return nil, err } @@ -1099,8 +1185,8 @@ func (_L2OutputOracle *L2OutputOracleFilterer) WatchOutputReplaced(opts *bind.Wa select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(L2OutputOracleOutputReplaced) - if err := _L2OutputOracle.contract.UnpackLog(event, "OutputReplaced", log); err != nil { + event := new(L2OutputOracleOutputProposed) + if err := _L2OutputOracle.contract.UnpackLog(event, "OutputProposed", log); err != nil { return err } event.Raw = log @@ -1121,21 +1207,21 @@ func (_L2OutputOracle *L2OutputOracleFilterer) WatchOutputReplaced(opts *bind.Wa }), nil } -// ParseOutputReplaced is a log parse operation binding the contract event 0xa1b831bb8b6b242db6d0988a6d21f869c610de9f703a5e45e1b7d3dc3137b906. +// ParseOutputProposed is a log parse operation binding the contract event 0xa7aaf2512769da4e444e3de247be2564225c2e7a8f74cfe528e46e17d24868e2. // -// Solidity: event OutputReplaced(uint256 indexed outputIndex, bytes32 newOutputRoot) -func (_L2OutputOracle *L2OutputOracleFilterer) ParseOutputReplaced(log types.Log) (*L2OutputOracleOutputReplaced, error) { - event := new(L2OutputOracleOutputReplaced) - if err := _L2OutputOracle.contract.UnpackLog(event, "OutputReplaced", log); err != nil { +// Solidity: event OutputProposed(bytes32 indexed outputRoot, uint256 indexed l2OutputIndex, uint256 indexed l2BlockNumber, uint256 l1Timestamp) +func (_L2OutputOracle *L2OutputOracleFilterer) ParseOutputProposed(log types.Log) (*L2OutputOracleOutputProposed, error) { + event := new(L2OutputOracleOutputProposed) + if err := _L2OutputOracle.contract.UnpackLog(event, "OutputProposed", log); err != nil { return nil, err } event.Raw = log return event, nil } -// L2OutputOracleOutputSubmittedIterator is returned from FilterOutputSubmitted and is used to iterate over the raw logs and unpacked data for OutputSubmitted events raised by the L2OutputOracle contract. -type L2OutputOracleOutputSubmittedIterator struct { - Event *L2OutputOracleOutputSubmitted // Event containing the contract specifics and raw log +// L2OutputOracleOutputsDeletedIterator is returned from FilterOutputsDeleted and is used to iterate over the raw logs and unpacked data for OutputsDeleted events raised by the L2OutputOracle contract. +type L2OutputOracleOutputsDeletedIterator struct { + Event *L2OutputOracleOutputsDeleted // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -1149,7 +1235,7 @@ type L2OutputOracleOutputSubmittedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *L2OutputOracleOutputSubmittedIterator) Next() bool { +func (it *L2OutputOracleOutputsDeletedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1158,7 +1244,7 @@ func (it *L2OutputOracleOutputSubmittedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(L2OutputOracleOutputSubmitted) + it.Event = new(L2OutputOracleOutputsDeleted) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1173,7 +1259,7 @@ func (it *L2OutputOracleOutputSubmittedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(L2OutputOracleOutputSubmitted) + it.Event = new(L2OutputOracleOutputsDeleted) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1189,70 +1275,60 @@ func (it *L2OutputOracleOutputSubmittedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *L2OutputOracleOutputSubmittedIterator) Error() error { +func (it *L2OutputOracleOutputsDeletedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *L2OutputOracleOutputSubmittedIterator) Close() error { +func (it *L2OutputOracleOutputsDeletedIterator) Close() error { it.sub.Unsubscribe() return nil } -// L2OutputOracleOutputSubmitted represents a OutputSubmitted event raised by the L2OutputOracle contract. -type L2OutputOracleOutputSubmitted struct { - OutputRoot [32]byte - L2OutputIndex *big.Int - L2BlockNumber *big.Int - L1Timestamp *big.Int - Raw types.Log // Blockchain specific contextual infos +// L2OutputOracleOutputsDeleted represents a OutputsDeleted event raised by the L2OutputOracle contract. +type L2OutputOracleOutputsDeleted struct { + PrevNextOutputIndex *big.Int + NewNextOutputIndex *big.Int + Raw types.Log // Blockchain specific contextual infos } -// FilterOutputSubmitted is a free log retrieval operation binding the contract event 0x457b4388026260019ae0b0b4f16c98235d74fe7359be469bdcba16e6d0d49689. +// FilterOutputsDeleted is a free log retrieval operation binding the contract event 0x4ee37ac2c786ec85e87592d3c5c8a1dd66f8496dda3f125d9ea8ca5f657629b6. // -// Solidity: event OutputSubmitted(bytes32 indexed outputRoot, uint256 indexed l2OutputIndex, uint256 indexed l2BlockNumber, uint256 l1Timestamp) -func (_L2OutputOracle *L2OutputOracleFilterer) FilterOutputSubmitted(opts *bind.FilterOpts, outputRoot [][32]byte, l2OutputIndex []*big.Int, l2BlockNumber []*big.Int) (*L2OutputOracleOutputSubmittedIterator, error) { +// Solidity: event OutputsDeleted(uint256 indexed prevNextOutputIndex, uint256 indexed newNextOutputIndex) +func (_L2OutputOracle *L2OutputOracleFilterer) FilterOutputsDeleted(opts *bind.FilterOpts, prevNextOutputIndex []*big.Int, newNextOutputIndex []*big.Int) (*L2OutputOracleOutputsDeletedIterator, error) { - var outputRootRule []interface{} - for _, outputRootItem := range outputRoot { - outputRootRule = append(outputRootRule, outputRootItem) + var prevNextOutputIndexRule []interface{} + for _, prevNextOutputIndexItem := range prevNextOutputIndex { + prevNextOutputIndexRule = append(prevNextOutputIndexRule, prevNextOutputIndexItem) } - var l2OutputIndexRule []interface{} - for _, l2OutputIndexItem := range l2OutputIndex { - l2OutputIndexRule = append(l2OutputIndexRule, l2OutputIndexItem) - } - var l2BlockNumberRule []interface{} - for _, l2BlockNumberItem := range l2BlockNumber { - l2BlockNumberRule = append(l2BlockNumberRule, l2BlockNumberItem) + var newNextOutputIndexRule []interface{} + for _, newNextOutputIndexItem := range newNextOutputIndex { + newNextOutputIndexRule = append(newNextOutputIndexRule, newNextOutputIndexItem) } - logs, sub, err := _L2OutputOracle.contract.FilterLogs(opts, "OutputSubmitted", outputRootRule, l2OutputIndexRule, l2BlockNumberRule) + logs, sub, err := _L2OutputOracle.contract.FilterLogs(opts, "OutputsDeleted", prevNextOutputIndexRule, newNextOutputIndexRule) if err != nil { return nil, err } - return &L2OutputOracleOutputSubmittedIterator{contract: _L2OutputOracle.contract, event: "OutputSubmitted", logs: logs, sub: sub}, nil + return &L2OutputOracleOutputsDeletedIterator{contract: _L2OutputOracle.contract, event: "OutputsDeleted", logs: logs, sub: sub}, nil } -// WatchOutputSubmitted is a free log subscription operation binding the contract event 0x457b4388026260019ae0b0b4f16c98235d74fe7359be469bdcba16e6d0d49689. +// WatchOutputsDeleted is a free log subscription operation binding the contract event 0x4ee37ac2c786ec85e87592d3c5c8a1dd66f8496dda3f125d9ea8ca5f657629b6. // -// Solidity: event OutputSubmitted(bytes32 indexed outputRoot, uint256 indexed l2OutputIndex, uint256 indexed l2BlockNumber, uint256 l1Timestamp) -func (_L2OutputOracle *L2OutputOracleFilterer) WatchOutputSubmitted(opts *bind.WatchOpts, sink chan<- *L2OutputOracleOutputSubmitted, outputRoot [][32]byte, l2OutputIndex []*big.Int, l2BlockNumber []*big.Int) (event.Subscription, error) { +// Solidity: event OutputsDeleted(uint256 indexed prevNextOutputIndex, uint256 indexed newNextOutputIndex) +func (_L2OutputOracle *L2OutputOracleFilterer) WatchOutputsDeleted(opts *bind.WatchOpts, sink chan<- *L2OutputOracleOutputsDeleted, prevNextOutputIndex []*big.Int, newNextOutputIndex []*big.Int) (event.Subscription, error) { - var outputRootRule []interface{} - for _, outputRootItem := range outputRoot { - outputRootRule = append(outputRootRule, outputRootItem) - } - var l2OutputIndexRule []interface{} - for _, l2OutputIndexItem := range l2OutputIndex { - l2OutputIndexRule = append(l2OutputIndexRule, l2OutputIndexItem) + var prevNextOutputIndexRule []interface{} + for _, prevNextOutputIndexItem := range prevNextOutputIndex { + prevNextOutputIndexRule = append(prevNextOutputIndexRule, prevNextOutputIndexItem) } - var l2BlockNumberRule []interface{} - for _, l2BlockNumberItem := range l2BlockNumber { - l2BlockNumberRule = append(l2BlockNumberRule, l2BlockNumberItem) + var newNextOutputIndexRule []interface{} + for _, newNextOutputIndexItem := range newNextOutputIndex { + newNextOutputIndexRule = append(newNextOutputIndexRule, newNextOutputIndexItem) } - logs, sub, err := _L2OutputOracle.contract.WatchLogs(opts, "OutputSubmitted", outputRootRule, l2OutputIndexRule, l2BlockNumberRule) + logs, sub, err := _L2OutputOracle.contract.WatchLogs(opts, "OutputsDeleted", prevNextOutputIndexRule, newNextOutputIndexRule) if err != nil { return nil, err } @@ -1262,8 +1338,8 @@ func (_L2OutputOracle *L2OutputOracleFilterer) WatchOutputSubmitted(opts *bind.W select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(L2OutputOracleOutputSubmitted) - if err := _L2OutputOracle.contract.UnpackLog(event, "OutputSubmitted", log); err != nil { + event := new(L2OutputOracleOutputsDeleted) + if err := _L2OutputOracle.contract.UnpackLog(event, "OutputsDeleted", log); err != nil { return err } event.Raw = log @@ -1284,12 +1360,12 @@ func (_L2OutputOracle *L2OutputOracleFilterer) WatchOutputSubmitted(opts *bind.W }), nil } -// ParseOutputSubmitted is a log parse operation binding the contract event 0x457b4388026260019ae0b0b4f16c98235d74fe7359be469bdcba16e6d0d49689. +// ParseOutputsDeleted is a log parse operation binding the contract event 0x4ee37ac2c786ec85e87592d3c5c8a1dd66f8496dda3f125d9ea8ca5f657629b6. // -// Solidity: event OutputSubmitted(bytes32 indexed outputRoot, uint256 indexed l2OutputIndex, uint256 indexed l2BlockNumber, uint256 l1Timestamp) -func (_L2OutputOracle *L2OutputOracleFilterer) ParseOutputSubmitted(log types.Log) (*L2OutputOracleOutputSubmitted, error) { - event := new(L2OutputOracleOutputSubmitted) - if err := _L2OutputOracle.contract.UnpackLog(event, "OutputSubmitted", log); err != nil { +// Solidity: event OutputsDeleted(uint256 indexed prevNextOutputIndex, uint256 indexed newNextOutputIndex) +func (_L2OutputOracle *L2OutputOracleFilterer) ParseOutputsDeleted(log types.Log) (*L2OutputOracleOutputsDeleted, error) { + event := new(L2OutputOracleOutputsDeleted) + if err := _L2OutputOracle.contract.UnpackLog(event, "OutputsDeleted", log); err != nil { return nil, err } event.Raw = log diff --git a/op-bindings/bindings/l2standardbridge.go b/op-bindings/bindings/l2standardbridge.go index 9c8a86a9a..560bafbf7 100644 --- a/op-bindings/bindings/l2standardbridge.go +++ b/op-bindings/bindings/l2standardbridge.go @@ -26,13 +26,12 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription - _ = abi.ConvertType ) // L2StandardBridgeMetaData contains all meta data concerning the L2StandardBridge contract. var L2StandardBridgeMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_otherBridge\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC20BridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC20BridgeInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ETHBridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ETHBridgeInitiated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSENGER\",\"outputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_BRIDGE\",\"outputs\":[{\"internalType\":\"contractStandardBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC20To\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeETHTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"deposits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x61012060405234801561001157600080fd5b5060405162002389380380620023898339810160408190526100329161006b565b7342000000000000000000000000000000000000046080526001600160a01b031660a052600160c052600060e08190526101005261009b565b60006020828403121561007d57600080fd5b81516001600160a01b038116811461009457600080fd5b9392505050565b60805160a05160c05160e0516101005161225c6200012d6000396000610eed01526000610ec401526000610e9b0152600081816101fd015281816104090152818161055501528181610a0e015261148e0152600081816102b9015281816103cc0152818161052b0152818161058c015281816109e401528181610a4501528181610c840152611452015261225c6000f3fe6080604052600436106100b55760003560e01c80637f46ddb2116100695780638f601f661161004e5780638f601f6614610264578063927ede2d146102a7578063e11013dd146102db57600080fd5b80637f46ddb2146101eb578063870876231461024457600080fd5b80631635f5fd1161009a5780631635f5fd1461018d578063540abf73146101a057806354fd4d50146101c057600080fd5b80630166a07a1461015a57806309fc88431461017a57600080fd5b3661015557333b156101345760405162461bcd60e51b815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61015333333462030d40604051806020016040528060008152506102ee565b005b600080fd5b34801561016657600080fd5b50610153610175366004611b82565b610513565b610153610188366004611c33565b61090f565b61015361019b366004611c86565b6109cc565b3480156101ac57600080fd5b506101536101bb366004611cf9565b610e46565b3480156101cc57600080fd5b506101d5610e94565b6040516101e29190611de6565b60405180910390f35b3480156101f757600080fd5b5061021f7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e2565b34801561025057600080fd5b5061015361025f366004611df9565b610f37565b34801561027057600080fd5b5061029961027f366004611e7c565b600060208181529281526040808220909352908152205481565b6040519081526020016101e2565b3480156102b357600080fd5b5061021f7f000000000000000000000000000000000000000000000000000000000000000081565b6101536102e9366004611eb5565b610ff1565b8234146103635760405162461bcd60e51b815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161012b565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af585846040516103c2929190611f18565b60405180910390a37f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633dbb202b847f0000000000000000000000000000000000000000000000000000000000000000631635f5fd60e01b898989886040516024016104479493929190611f31565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526104da92918890600401611f7a565b6000604051808303818588803b1580156104f357600080fd5b505af1158015610507573d6000803e3d6000fd5b50505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561063157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106199190611fbf565b73ffffffffffffffffffffffffffffffffffffffff16145b6106c95760405162461bcd60e51b815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161012b565b6106d28761103a565b15610806576106e1878761106c565b6107795760405162461bcd60e51b815260206004820152604760248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204b726f6d61204d696e7461626c65204552433230206c6f636160648201527f6c20746f6b656e00000000000000000000000000000000000000000000000000608482015260a40161012b565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b50505050610884565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260208181526040808320938a168352929052205461084290849061200b565b73ffffffffffffffffffffffffffffffffffffffff808916600081815260208181526040808320948c1683529390529190912091909155610884908585611113565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd878787876040516108fe949392919061206b565b60405180910390a450505050505050565b333b156109845760405162461bcd60e51b815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161012b565b6109c73333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506102ee92505050565b505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148015610aea57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad29190611fbf565b73ffffffffffffffffffffffffffffffffffffffff16145b610b825760405162461bcd60e51b815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161012b565b823414610bf75760405162461bcd60e51b815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161012b565b3073ffffffffffffffffffffffffffffffffffffffff851603610c825760405162461bcd60e51b815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161012b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d435760405162461bcd60e51b815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161012b565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d858585604051610da4939291906120a1565b60405180910390a36000610dc9855a86604051806020016040528060008152506111e7565b905080610e3e5760405162461bcd60e51b815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161012b565b505050505050565b610e8b87873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061120392505050565b50505050505050565b6060610ebf7f000000000000000000000000000000000000000000000000000000000000000061159e565b610ee87f000000000000000000000000000000000000000000000000000000000000000061159e565b610f117f000000000000000000000000000000000000000000000000000000000000000061159e565b604051602001610f23939291906120c4565b604051602081830303815290604052905090565b333b15610fac5760405162461bcd60e51b815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161012b565b610e3e86863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061120392505050565b6110343385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506102ee92505050565b50505050565b6000611066827f30a0c5a90000000000000000000000000000000000000000000000000000000061165c565b92915050565b60008273ffffffffffffffffffffffffffffffffffffffff1663033964be6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dd9190611fbf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614905092915050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109c79084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261167f565b600080600080845160208601878a8af19150505b949350505050565b61120c8761103a565b156113405761121b878761106c565b6112b35760405162461bcd60e51b815260206004820152604760248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204b726f6d61204d696e7461626c65204552433230206c6f636160648201527f6c20746f6b656e00000000000000000000000000000000000000000000000000608482015260a40161012b565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561132357600080fd5b505af1158015611337573d6000803e3d6000fd5b505050506113d0565b61136273ffffffffffffffffffffffffffffffffffffffff8816863086611774565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260208181526040808320938a168352929052205461139e90849061213a565b73ffffffffffffffffffffffffffffffffffffffff808916600090815260208181526040808320938b16835292905220555b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf87878660405161144893929190612152565b60405180910390a47f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633dbb202b7f0000000000000000000000000000000000000000000000000000000000000000630166a07a60e01b898b8a8a8a896040516024016114d096959493929190612187565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261156392918790600401611f7a565b600060405180830381600087803b15801561157d57600080fd5b505af1158015611591573d6000803e3d6000fd5b5050505050505050505050565b606060006115ab836117d2565b600101905060008167ffffffffffffffff8111156115cb576115cb6121e2565b6040519080825280601f01601f1916602001820160405280156115f5576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846115ff57509392505050565b6000611667836118b4565b801561167857506116788383611918565b9392505050565b60006116e1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166119e79092919063ffffffff16565b90508051600014806117025750808060200190518101906117029190612211565b6109c75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161012b565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526110349085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611165565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061181b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611847576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061186557662386f26fc10000830492506010015b6305f5e100831061187d576305f5e100830492506008015b612710831061189157612710830492506004015b606483106118a3576064830492506002015b600a83106110665760010192915050565b60006118e0827f01ffc9a700000000000000000000000000000000000000000000000000000000611918565b80156110665750611911827fffffffff00000000000000000000000000000000000000000000000000000000611918565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156119d0575060208210155b80156119dc5750600081115b979650505050505050565b60606111fb8484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051611a1b9190612233565b60006040518083038185875af1925050503d8060008114611a58576040519150601f19603f3d011682016040523d82523d6000602084013e611a5d565b606091505b50915091506119dc8783838760608315611ae5578251600003611ade5773ffffffffffffffffffffffffffffffffffffffff85163b611ade5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161012b565b50816111fb565b6111fb8383815115611afa5781518083602001fd5b8060405162461bcd60e51b815260040161012b9190611de6565b73ffffffffffffffffffffffffffffffffffffffff81168114611b3657600080fd5b50565b60008083601f840112611b4b57600080fd5b50813567ffffffffffffffff811115611b6357600080fd5b602083019150836020828501011115611b7b57600080fd5b9250929050565b600080600080600080600060c0888a031215611b9d57600080fd5b8735611ba881611b14565b96506020880135611bb881611b14565b95506040880135611bc881611b14565b94506060880135611bd881611b14565b93506080880135925060a088013567ffffffffffffffff811115611bfb57600080fd5b611c078a828b01611b39565b989b979a50959850939692959293505050565b803563ffffffff81168114611c2e57600080fd5b919050565b600080600060408486031215611c4857600080fd5b611c5184611c1a565b9250602084013567ffffffffffffffff811115611c6d57600080fd5b611c7986828701611b39565b9497909650939450505050565b600080600080600060808688031215611c9e57600080fd5b8535611ca981611b14565b94506020860135611cb981611b14565b935060408601359250606086013567ffffffffffffffff811115611cdc57600080fd5b611ce888828901611b39565b969995985093965092949392505050565b600080600080600080600060c0888a031215611d1457600080fd5b8735611d1f81611b14565b96506020880135611d2f81611b14565b95506040880135611d3f81611b14565b945060608801359350611d5460808901611c1a565b925060a088013567ffffffffffffffff811115611bfb57600080fd5b60005b83811015611d8b578181015183820152602001611d73565b838111156110345750506000910152565b60008151808452611db4816020860160208601611d70565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006116786020830184611d9c565b60008060008060008060a08789031215611e1257600080fd5b8635611e1d81611b14565b95506020870135611e2d81611b14565b945060408701359350611e4260608801611c1a565b9250608087013567ffffffffffffffff811115611e5e57600080fd5b611e6a89828a01611b39565b979a9699509497509295939492505050565b60008060408385031215611e8f57600080fd5b8235611e9a81611b14565b91506020830135611eaa81611b14565b809150509250929050565b60008060008060608587031215611ecb57600080fd5b8435611ed681611b14565b9350611ee460208601611c1a565b9250604085013567ffffffffffffffff811115611f0057600080fd5b611f0c87828801611b39565b95989497509550505050565b8281526040602082015260006111fb6040830184611d9c565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152611f706080830184611d9c565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000611fa96060830185611d9c565b905063ffffffff83166040830152949350505050565b600060208284031215611fd157600080fd5b815161167881611b14565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561201d5761201d611fdc565b500390565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000611f70606083018486612022565b8381526040602082015260006120bb604083018486612022565b95945050505050565b600084516120d6818460208901611d70565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612112816001850160208a01611d70565b6001920191820152835161212d816002840160208801611d70565b0160020195945050505050565b6000821982111561214d5761214d611fdc565b500190565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006120bb6060830184611d9c565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a08301526121d660c0830184611d9c565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561222357600080fd5b8151801515811461167857600080fd5b60008251612245818460208701611d70565b919091019291505056fea164736f6c634300080f000a", + ABI: "[{\"inputs\":[{\"internalType\":\"contractStandardBridge\",\"name\":\"_otherBridge\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l1Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"DepositFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC20BridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC20BridgeInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ETHBridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ETHBridgeInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l1Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"l2Token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"WithdrawalInitiated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSENGER\",\"outputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_BRIDGE\",\"outputs\":[{\"internalType\":\"contractStandardBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC20To\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeETHTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"deposits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeDeposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1TokenBridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messenger\",\"outputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"otherBridge\",\"outputs\":[{\"internalType\":\"contractStandardBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l2Token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l2Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"withdrawTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60a06040523480156200001157600080fd5b5060405162002c8538038062002c858339810160408190526200003491620001e4565b6001600160a01b0381166080526200004b62000052565b5062000216565b600054600290610100900460ff1615801562000075575060005460ff8083169116105b620000de5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805461ffff191660ff8316176101001790556200011173420000000000000000000000000000000000000762000155565b6000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b600054610100900460ff16620001c25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d5565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600060208284031215620001f757600080fd5b81516001600160a01b03811681146200020f57600080fd5b9392505050565b608051612a30620002556000396000818161024e015281816103600152818161058e01528181610a230152818161134001526116820152612a306000f3fe6080604052600436106101125760003560e01c8063662a633a116100a55780638f601f6611610074578063a3a7954811610059578063a3a7954814610428578063c89701a21461023f578063e11013dd1461043b57600080fd5b80638f601f66146103b7578063927ede2d146103fd57600080fd5b8063662a633a1461033b5780637f46ddb21461034e5780638129fc1c14610382578063870876231461039757600080fd5b806336c717c1116100e157806336c717c11461023f5780633cb747bf14610298578063540abf73146102c557806354fd4d50146102e557600080fd5b80630166a07a146101e657806309fc8843146102065780631635f5fd1461021957806332b7006d1461022c57600080fd5b366101e157333b156101ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b6101df73deaddeaddeaddeaddeaddeaddeaddeaddead000033333462030d406040518060200160405280600081525061044e565b005b600080fd5b3480156101f257600080fd5b506101df610201366004612440565b610529565b6101df6102143660046124f1565b6108e7565b6101df610227366004612544565b6109be565b6101df61023a3660046125b7565b610e2c565b34801561024b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102a457600080fd5b5060035461026e9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d157600080fd5b506101df6102e036600461260b565b610f06565b3480156102f157600080fd5b5061032e6040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b60405161028f91906126f8565b6101df610349366004612440565b610f4b565b34801561035a57600080fd5b5061026e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561038e57600080fd5b506101df610fbe565b3480156103a357600080fd5b506101df6103b236600461270b565b61111b565b3480156103c357600080fd5b506103ef6103d236600461278e565b600260209081526000928352604080842090915290825290205481565b60405190815260200161028f565b34801561040957600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff1661026e565b6101df61043636600461270b565b6111ef565b6101df6104493660046127c7565b611233565b7fffffffffffffffffffffffff215221522152215221522152215221522153000073ffffffffffffffffffffffffffffffffffffffff87160161049d57610498858585858561127c565b610521565b60008673ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050e919061282a565b905061051f87828888888888611462565b505b505050505050565b60035473ffffffffffffffffffffffffffffffffffffffff16331480156106185750600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116931691636e296e459160048083019260209291908290030181865afa1580156105dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610600919061282a565b73ffffffffffffffffffffffffffffffffffffffff16145b6106ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101a2565b6106d3876117aa565b15610821576106e2878761180c565b610794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101a2565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561080457600080fd5b505af1158015610818573d6000803e3d6000fd5b505050506108a3565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a168352929052205461085f908490612876565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556108a390858561192c565b61051f878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a0092505050565b333b15610976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101a2565b6109b93333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061127c92505050565b505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610aad5750600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116931691636e296e459160048083019260209291908290030181865afa158015610a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a95919061282a565b73ffffffffffffffffffffffffffffffffffffffff16145b610b5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101a2565b823414610bee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e7420726571756972656400000000000060648201526084016101a2565b3073ffffffffffffffffffffffffffffffffffffffff851603610c93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c66000000000000000000000000000000000000000000000000000000000060648201526084016101a2565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610d3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e67657200000000000000000000000000000000000000000000000060648201526084016101a2565b610d8085858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a8e92505050565b6000610d9d855a8660405180602001604052806000815250611b2f565b905080610521576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c6564000000000000000000000000000000000000000000000000000000000060648201526084016101a2565b333b15610ebb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101a2565b610eff853333878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061044e92505050565b5050505050565b61051f87873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061146292505050565b73ffffffffffffffffffffffffffffffffffffffff8716158015610f98575073ffffffffffffffffffffffffffffffffffffffff861673deaddeaddeaddeaddeaddeaddeaddeaddead0000145b15610faf57610faa85858585856109be565b61051f565b61051f86888787878787610529565b600054600290610100900460ff16158015610fe0575060005460ff8083169116105b61106c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016101a2565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556110ba734200000000000000000000000000000000000007611b49565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b333b156111aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101a2565b61052186863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061146292505050565b610521863387878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061044e92505050565b6112763385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061127c92505050565b50505050565b82341461130b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c7565000060648201526084016101a2565b61131785858584611c27565b60035460405173ffffffffffffffffffffffffffffffffffffffff90911690633dbb202b9085907f0000000000000000000000000000000000000000000000000000000000000000907f1635f5fd0000000000000000000000000000000000000000000000000000000090611396908b908b9086908a9060240161288d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b9092168252611429929188906004016128d6565b6000604051808303818588803b15801561144257600080fd5b505af1158015611456573d6000803e3d6000fd5b50505050505050505050565b61146b876117aa565b156115b95761147a878761180c565b61152c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101a2565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561159c57600080fd5b505af11580156115b0573d6000803e3d6000fd5b5050505061164d565b6115db73ffffffffffffffffffffffffffffffffffffffff8816863086611cc8565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a168352929052205461161990849061291b565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b61165b878787878786611d26565b60035460405173ffffffffffffffffffffffffffffffffffffffff90911690633dbb202b907f0000000000000000000000000000000000000000000000000000000000000000907f0166a07a00000000000000000000000000000000000000000000000000000000906116dc908b908d908c908c908c908b90602401612933565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261176f929187906004016128d6565b600060405180830381600087803b15801561178957600080fd5b505af115801561179d573d6000803e3d6000fd5b5050505050505050505050565b60006117d6827f1d1d8b6300000000000000000000000000000000000000000000000000000000611db4565b806118065750611806827fec4fc8e300000000000000000000000000000000000000000000000000000000611db4565b92915050565b6000611838837f1d1d8b6300000000000000000000000000000000000000000000000000000000611db4565b156118e1578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611888573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ac919061282a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611806565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611888573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109b99084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611dd7565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611a789392919061298e565b60405180910390a4610521868686868686611ee3565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611b1b9392919061298e565b60405180910390a461127684848484611f6b565b600080600080845160208601878a8af19695505050505050565b600054610100900460ff16611be0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016101a2565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e868686604051611cb49392919061298e565b60405180910390a461127684848484611fd8565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526112769085907f23b872dd000000000000000000000000000000000000000000000000000000009060840161197e565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e868686604051611d9e9392919061298e565b60405180910390a4610521868686868686612037565b6000611dbf836120af565b8015611dd05750611dd08383612113565b9392505050565b6000611e39826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166121e29092919063ffffffff16565b8051909150156109b95780806020019051810190611e5791906129cc565b6109b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016101a2565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd868686604051611f5b9392919061298e565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051611fca9291906129ee565b60405180910390a350505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051611fca9291906129ee565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf868686604051611f5b9392919061298e565b60006120db827f01ffc9a700000000000000000000000000000000000000000000000000000000612113565b8015611806575061210c827fffffffff00000000000000000000000000000000000000000000000000000000612113565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156121cb575060208210155b80156121d75750600081115b979650505050505050565b60606121f184846000856121f9565b949350505050565b60608247101561228b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016101a2565b73ffffffffffffffffffffffffffffffffffffffff85163b612309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101a2565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516123329190612a07565b60006040518083038185875af1925050503d806000811461236f576040519150601f19603f3d011682016040523d82523d6000602084013e612374565b606091505b50915091506121d78282866060831561238e575081611dd0565b82511561239e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101a291906126f8565b73ffffffffffffffffffffffffffffffffffffffff811681146123f457600080fd5b50565b60008083601f84011261240957600080fd5b50813567ffffffffffffffff81111561242157600080fd5b60208301915083602082850101111561243957600080fd5b9250929050565b600080600080600080600060c0888a03121561245b57600080fd5b8735612466816123d2565b96506020880135612476816123d2565b95506040880135612486816123d2565b94506060880135612496816123d2565b93506080880135925060a088013567ffffffffffffffff8111156124b957600080fd5b6124c58a828b016123f7565b989b979a50959850939692959293505050565b803563ffffffff811681146124ec57600080fd5b919050565b60008060006040848603121561250657600080fd5b61250f846124d8565b9250602084013567ffffffffffffffff81111561252b57600080fd5b612537868287016123f7565b9497909650939450505050565b60008060008060006080868803121561255c57600080fd5b8535612567816123d2565b94506020860135612577816123d2565b935060408601359250606086013567ffffffffffffffff81111561259a57600080fd5b6125a6888289016123f7565b969995985093965092949392505050565b6000806000806000608086880312156125cf57600080fd5b85356125da816123d2565b9450602086013593506125ef604087016124d8565b9250606086013567ffffffffffffffff81111561259a57600080fd5b600080600080600080600060c0888a03121561262657600080fd5b8735612631816123d2565b96506020880135612641816123d2565b95506040880135612651816123d2565b945060608801359350612666608089016124d8565b925060a088013567ffffffffffffffff8111156124b957600080fd5b60005b8381101561269d578181015183820152602001612685565b838111156112765750506000910152565b600081518084526126c6816020860160208601612682565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611dd060208301846126ae565b60008060008060008060a0878903121561272457600080fd5b863561272f816123d2565b9550602087013561273f816123d2565b945060408701359350612754606088016124d8565b9250608087013567ffffffffffffffff81111561277057600080fd5b61277c89828a016123f7565b979a9699509497509295939492505050565b600080604083850312156127a157600080fd5b82356127ac816123d2565b915060208301356127bc816123d2565b809150509250929050565b600080600080606085870312156127dd57600080fd5b84356127e8816123d2565b93506127f6602086016124d8565b9250604085013567ffffffffffffffff81111561281257600080fd5b61281e878288016123f7565b95989497509550505050565b60006020828403121561283c57600080fd5b8151611dd0816123d2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561288857612888612847565b500390565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526128cc60808301846126ae565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815260606020820152600061290560608301856126ae565b905063ffffffff83166040830152949350505050565b6000821982111561292e5761292e612847565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a083015261298260c08301846126ae565b98975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006129c360608301846126ae565b95945050505050565b6000602082840312156129de57600080fd5b81518015158114611dd057600080fd5b8281526040602082015260006121f160408301846126ae565b60008251612a19818460208701612682565b919091019291505056fea164736f6c634300080f000a", } // L2StandardBridgeABI is the input ABI used to generate the binding from. @@ -157,11 +156,11 @@ func NewL2StandardBridgeFilterer(address common.Address, filterer bind.ContractF // bindL2StandardBridge binds a generic wrapper to an already deployed contract. func bindL2StandardBridge(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := L2StandardBridgeMetaData.GetAbi() + parsed, err := abi.JSON(strings.NewReader(L2StandardBridgeABI)) if err != nil { return nil, err } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and @@ -295,6 +294,99 @@ func (_L2StandardBridge *L2StandardBridgeCallerSession) Deposits(arg0 common.Add return _L2StandardBridge.Contract.Deposits(&_L2StandardBridge.CallOpts, arg0, arg1) } +// L1TokenBridge is a free data retrieval call binding the contract method 0x36c717c1. +// +// Solidity: function l1TokenBridge() view returns(address) +func (_L2StandardBridge *L2StandardBridgeCaller) L1TokenBridge(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L2StandardBridge.contract.Call(opts, &out, "l1TokenBridge") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// L1TokenBridge is a free data retrieval call binding the contract method 0x36c717c1. +// +// Solidity: function l1TokenBridge() view returns(address) +func (_L2StandardBridge *L2StandardBridgeSession) L1TokenBridge() (common.Address, error) { + return _L2StandardBridge.Contract.L1TokenBridge(&_L2StandardBridge.CallOpts) +} + +// L1TokenBridge is a free data retrieval call binding the contract method 0x36c717c1. +// +// Solidity: function l1TokenBridge() view returns(address) +func (_L2StandardBridge *L2StandardBridgeCallerSession) L1TokenBridge() (common.Address, error) { + return _L2StandardBridge.Contract.L1TokenBridge(&_L2StandardBridge.CallOpts) +} + +// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. +// +// Solidity: function messenger() view returns(address) +func (_L2StandardBridge *L2StandardBridgeCaller) Messenger(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L2StandardBridge.contract.Call(opts, &out, "messenger") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. +// +// Solidity: function messenger() view returns(address) +func (_L2StandardBridge *L2StandardBridgeSession) Messenger() (common.Address, error) { + return _L2StandardBridge.Contract.Messenger(&_L2StandardBridge.CallOpts) +} + +// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. +// +// Solidity: function messenger() view returns(address) +func (_L2StandardBridge *L2StandardBridgeCallerSession) Messenger() (common.Address, error) { + return _L2StandardBridge.Contract.Messenger(&_L2StandardBridge.CallOpts) +} + +// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. +// +// Solidity: function otherBridge() view returns(address) +func (_L2StandardBridge *L2StandardBridgeCaller) OtherBridge(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L2StandardBridge.contract.Call(opts, &out, "otherBridge") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. +// +// Solidity: function otherBridge() view returns(address) +func (_L2StandardBridge *L2StandardBridgeSession) OtherBridge() (common.Address, error) { + return _L2StandardBridge.Contract.OtherBridge(&_L2StandardBridge.CallOpts) +} + +// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. +// +// Solidity: function otherBridge() view returns(address) +func (_L2StandardBridge *L2StandardBridgeCallerSession) OtherBridge() (common.Address, error) { + return _L2StandardBridge.Contract.OtherBridge(&_L2StandardBridge.CallOpts) +} + // Version is a free data retrieval call binding the contract method 0x54fd4d50. // // Solidity: function version() view returns(string) @@ -452,6 +544,90 @@ func (_L2StandardBridge *L2StandardBridgeTransactorSession) FinalizeBridgeETH(_f return _L2StandardBridge.Contract.FinalizeBridgeETH(&_L2StandardBridge.TransactOpts, _from, _to, _amount, _extraData) } +// FinalizeDeposit is a paid mutator transaction binding the contract method 0x662a633a. +// +// Solidity: function finalizeDeposit(address _l1Token, address _l2Token, address _from, address _to, uint256 _amount, bytes _extraData) payable returns() +func (_L2StandardBridge *L2StandardBridgeTransactor) FinalizeDeposit(opts *bind.TransactOpts, _l1Token common.Address, _l2Token common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _L2StandardBridge.contract.Transact(opts, "finalizeDeposit", _l1Token, _l2Token, _from, _to, _amount, _extraData) +} + +// FinalizeDeposit is a paid mutator transaction binding the contract method 0x662a633a. +// +// Solidity: function finalizeDeposit(address _l1Token, address _l2Token, address _from, address _to, uint256 _amount, bytes _extraData) payable returns() +func (_L2StandardBridge *L2StandardBridgeSession) FinalizeDeposit(_l1Token common.Address, _l2Token common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _L2StandardBridge.Contract.FinalizeDeposit(&_L2StandardBridge.TransactOpts, _l1Token, _l2Token, _from, _to, _amount, _extraData) +} + +// FinalizeDeposit is a paid mutator transaction binding the contract method 0x662a633a. +// +// Solidity: function finalizeDeposit(address _l1Token, address _l2Token, address _from, address _to, uint256 _amount, bytes _extraData) payable returns() +func (_L2StandardBridge *L2StandardBridgeTransactorSession) FinalizeDeposit(_l1Token common.Address, _l2Token common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _L2StandardBridge.Contract.FinalizeDeposit(&_L2StandardBridge.TransactOpts, _l1Token, _l2Token, _from, _to, _amount, _extraData) +} + +// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c. +// +// Solidity: function initialize() returns() +func (_L2StandardBridge *L2StandardBridgeTransactor) Initialize(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L2StandardBridge.contract.Transact(opts, "initialize") +} + +// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c. +// +// Solidity: function initialize() returns() +func (_L2StandardBridge *L2StandardBridgeSession) Initialize() (*types.Transaction, error) { + return _L2StandardBridge.Contract.Initialize(&_L2StandardBridge.TransactOpts) +} + +// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c. +// +// Solidity: function initialize() returns() +func (_L2StandardBridge *L2StandardBridgeTransactorSession) Initialize() (*types.Transaction, error) { + return _L2StandardBridge.Contract.Initialize(&_L2StandardBridge.TransactOpts) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x32b7006d. +// +// Solidity: function withdraw(address _l2Token, uint256 _amount, uint32 _minGasLimit, bytes _extraData) payable returns() +func (_L2StandardBridge *L2StandardBridgeTransactor) Withdraw(opts *bind.TransactOpts, _l2Token common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L2StandardBridge.contract.Transact(opts, "withdraw", _l2Token, _amount, _minGasLimit, _extraData) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x32b7006d. +// +// Solidity: function withdraw(address _l2Token, uint256 _amount, uint32 _minGasLimit, bytes _extraData) payable returns() +func (_L2StandardBridge *L2StandardBridgeSession) Withdraw(_l2Token common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L2StandardBridge.Contract.Withdraw(&_L2StandardBridge.TransactOpts, _l2Token, _amount, _minGasLimit, _extraData) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x32b7006d. +// +// Solidity: function withdraw(address _l2Token, uint256 _amount, uint32 _minGasLimit, bytes _extraData) payable returns() +func (_L2StandardBridge *L2StandardBridgeTransactorSession) Withdraw(_l2Token common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L2StandardBridge.Contract.Withdraw(&_L2StandardBridge.TransactOpts, _l2Token, _amount, _minGasLimit, _extraData) +} + +// WithdrawTo is a paid mutator transaction binding the contract method 0xa3a79548. +// +// Solidity: function withdrawTo(address _l2Token, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) payable returns() +func (_L2StandardBridge *L2StandardBridgeTransactor) WithdrawTo(opts *bind.TransactOpts, _l2Token common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L2StandardBridge.contract.Transact(opts, "withdrawTo", _l2Token, _to, _amount, _minGasLimit, _extraData) +} + +// WithdrawTo is a paid mutator transaction binding the contract method 0xa3a79548. +// +// Solidity: function withdrawTo(address _l2Token, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) payable returns() +func (_L2StandardBridge *L2StandardBridgeSession) WithdrawTo(_l2Token common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L2StandardBridge.Contract.WithdrawTo(&_L2StandardBridge.TransactOpts, _l2Token, _to, _amount, _minGasLimit, _extraData) +} + +// WithdrawTo is a paid mutator transaction binding the contract method 0xa3a79548. +// +// Solidity: function withdrawTo(address _l2Token, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) payable returns() +func (_L2StandardBridge *L2StandardBridgeTransactorSession) WithdrawTo(_l2Token common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _L2StandardBridge.Contract.WithdrawTo(&_L2StandardBridge.TransactOpts, _l2Token, _to, _amount, _minGasLimit, _extraData) +} + // Receive is a paid mutator transaction binding the contract receive function. // // Solidity: receive() payable returns() @@ -473,6 +649,171 @@ func (_L2StandardBridge *L2StandardBridgeTransactorSession) Receive() (*types.Tr return _L2StandardBridge.Contract.Receive(&_L2StandardBridge.TransactOpts) } +// L2StandardBridgeDepositFinalizedIterator is returned from FilterDepositFinalized and is used to iterate over the raw logs and unpacked data for DepositFinalized events raised by the L2StandardBridge contract. +type L2StandardBridgeDepositFinalizedIterator struct { + Event *L2StandardBridgeDepositFinalized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L2StandardBridgeDepositFinalizedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L2StandardBridgeDepositFinalized) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L2StandardBridgeDepositFinalized) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L2StandardBridgeDepositFinalizedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L2StandardBridgeDepositFinalizedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L2StandardBridgeDepositFinalized represents a DepositFinalized event raised by the L2StandardBridge contract. +type L2StandardBridgeDepositFinalized struct { + L1Token common.Address + L2Token common.Address + From common.Address + To common.Address + Amount *big.Int + ExtraData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDepositFinalized is a free log retrieval operation binding the contract event 0xb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89. +// +// Solidity: event DepositFinalized(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) +func (_L2StandardBridge *L2StandardBridgeFilterer) FilterDepositFinalized(opts *bind.FilterOpts, l1Token []common.Address, l2Token []common.Address, from []common.Address) (*L2StandardBridgeDepositFinalizedIterator, error) { + + var l1TokenRule []interface{} + for _, l1TokenItem := range l1Token { + l1TokenRule = append(l1TokenRule, l1TokenItem) + } + var l2TokenRule []interface{} + for _, l2TokenItem := range l2Token { + l2TokenRule = append(l2TokenRule, l2TokenItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _L2StandardBridge.contract.FilterLogs(opts, "DepositFinalized", l1TokenRule, l2TokenRule, fromRule) + if err != nil { + return nil, err + } + return &L2StandardBridgeDepositFinalizedIterator{contract: _L2StandardBridge.contract, event: "DepositFinalized", logs: logs, sub: sub}, nil +} + +// WatchDepositFinalized is a free log subscription operation binding the contract event 0xb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89. +// +// Solidity: event DepositFinalized(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) +func (_L2StandardBridge *L2StandardBridgeFilterer) WatchDepositFinalized(opts *bind.WatchOpts, sink chan<- *L2StandardBridgeDepositFinalized, l1Token []common.Address, l2Token []common.Address, from []common.Address) (event.Subscription, error) { + + var l1TokenRule []interface{} + for _, l1TokenItem := range l1Token { + l1TokenRule = append(l1TokenRule, l1TokenItem) + } + var l2TokenRule []interface{} + for _, l2TokenItem := range l2Token { + l2TokenRule = append(l2TokenRule, l2TokenItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _L2StandardBridge.contract.WatchLogs(opts, "DepositFinalized", l1TokenRule, l2TokenRule, fromRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L2StandardBridgeDepositFinalized) + if err := _L2StandardBridge.contract.UnpackLog(event, "DepositFinalized", 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 +} + +// ParseDepositFinalized is a log parse operation binding the contract event 0xb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89. +// +// Solidity: event DepositFinalized(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) +func (_L2StandardBridge *L2StandardBridgeFilterer) ParseDepositFinalized(log types.Log) (*L2StandardBridgeDepositFinalized, error) { + event := new(L2StandardBridgeDepositFinalized) + if err := _L2StandardBridge.contract.UnpackLog(event, "DepositFinalized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // L2StandardBridgeERC20BridgeFinalizedIterator is returned from FilterERC20BridgeFinalized and is used to iterate over the raw logs and unpacked data for ERC20BridgeFinalized events raised by the L2StandardBridge contract. type L2StandardBridgeERC20BridgeFinalizedIterator struct { Event *L2StandardBridgeERC20BridgeFinalized // Event containing the contract specifics and raw log @@ -1112,3 +1453,302 @@ func (_L2StandardBridge *L2StandardBridgeFilterer) ParseETHBridgeInitiated(log t event.Raw = log return event, nil } + +// L2StandardBridgeInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the L2StandardBridge contract. +type L2StandardBridgeInitializedIterator struct { + Event *L2StandardBridgeInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L2StandardBridgeInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L2StandardBridgeInitialized) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L2StandardBridgeInitialized) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L2StandardBridgeInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L2StandardBridgeInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L2StandardBridgeInitialized represents a Initialized event raised by the L2StandardBridge contract. +type L2StandardBridgeInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_L2StandardBridge *L2StandardBridgeFilterer) FilterInitialized(opts *bind.FilterOpts) (*L2StandardBridgeInitializedIterator, error) { + + logs, sub, err := _L2StandardBridge.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &L2StandardBridgeInitializedIterator{contract: _L2StandardBridge.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_L2StandardBridge *L2StandardBridgeFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *L2StandardBridgeInitialized) (event.Subscription, error) { + + logs, sub, err := _L2StandardBridge.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: + // New log arrived, parse the event and forward to the user + event := new(L2StandardBridgeInitialized) + if err := _L2StandardBridge.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 +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_L2StandardBridge *L2StandardBridgeFilterer) ParseInitialized(log types.Log) (*L2StandardBridgeInitialized, error) { + event := new(L2StandardBridgeInitialized) + if err := _L2StandardBridge.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// L2StandardBridgeWithdrawalInitiatedIterator is returned from FilterWithdrawalInitiated and is used to iterate over the raw logs and unpacked data for WithdrawalInitiated events raised by the L2StandardBridge contract. +type L2StandardBridgeWithdrawalInitiatedIterator struct { + Event *L2StandardBridgeWithdrawalInitiated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L2StandardBridgeWithdrawalInitiatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L2StandardBridgeWithdrawalInitiated) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L2StandardBridgeWithdrawalInitiated) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L2StandardBridgeWithdrawalInitiatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L2StandardBridgeWithdrawalInitiatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L2StandardBridgeWithdrawalInitiated represents a WithdrawalInitiated event raised by the L2StandardBridge contract. +type L2StandardBridgeWithdrawalInitiated struct { + L1Token common.Address + L2Token common.Address + From common.Address + To common.Address + Amount *big.Int + ExtraData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawalInitiated is a free log retrieval operation binding the contract event 0x73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e. +// +// Solidity: event WithdrawalInitiated(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) +func (_L2StandardBridge *L2StandardBridgeFilterer) FilterWithdrawalInitiated(opts *bind.FilterOpts, l1Token []common.Address, l2Token []common.Address, from []common.Address) (*L2StandardBridgeWithdrawalInitiatedIterator, error) { + + var l1TokenRule []interface{} + for _, l1TokenItem := range l1Token { + l1TokenRule = append(l1TokenRule, l1TokenItem) + } + var l2TokenRule []interface{} + for _, l2TokenItem := range l2Token { + l2TokenRule = append(l2TokenRule, l2TokenItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _L2StandardBridge.contract.FilterLogs(opts, "WithdrawalInitiated", l1TokenRule, l2TokenRule, fromRule) + if err != nil { + return nil, err + } + return &L2StandardBridgeWithdrawalInitiatedIterator{contract: _L2StandardBridge.contract, event: "WithdrawalInitiated", logs: logs, sub: sub}, nil +} + +// WatchWithdrawalInitiated is a free log subscription operation binding the contract event 0x73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e. +// +// Solidity: event WithdrawalInitiated(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) +func (_L2StandardBridge *L2StandardBridgeFilterer) WatchWithdrawalInitiated(opts *bind.WatchOpts, sink chan<- *L2StandardBridgeWithdrawalInitiated, l1Token []common.Address, l2Token []common.Address, from []common.Address) (event.Subscription, error) { + + var l1TokenRule []interface{} + for _, l1TokenItem := range l1Token { + l1TokenRule = append(l1TokenRule, l1TokenItem) + } + var l2TokenRule []interface{} + for _, l2TokenItem := range l2Token { + l2TokenRule = append(l2TokenRule, l2TokenItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _L2StandardBridge.contract.WatchLogs(opts, "WithdrawalInitiated", l1TokenRule, l2TokenRule, fromRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L2StandardBridgeWithdrawalInitiated) + if err := _L2StandardBridge.contract.UnpackLog(event, "WithdrawalInitiated", 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 +} + +// ParseWithdrawalInitiated is a log parse operation binding the contract event 0x73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e. +// +// Solidity: event WithdrawalInitiated(address indexed l1Token, address indexed l2Token, address indexed from, address to, uint256 amount, bytes extraData) +func (_L2StandardBridge *L2StandardBridgeFilterer) ParseWithdrawalInitiated(log types.Log) (*L2StandardBridgeWithdrawalInitiated, error) { + event := new(L2StandardBridgeWithdrawalInitiated) + if err := _L2StandardBridge.contract.UnpackLog(event, "WithdrawalInitiated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-bindings/bindings/l2standardbridge_more.go b/op-bindings/bindings/l2standardbridge_more.go index 147ac8912..cff9b79dd 100644 --- a/op-bindings/bindings/l2standardbridge_more.go +++ b/op-bindings/bindings/l2standardbridge_more.go @@ -9,11 +9,11 @@ import ( "github.com/ethereum-optimism/optimism/op-bindings/solc" ) -const L2StandardBridgeStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L2/L2StandardBridge.sol:L2StandardBridge\",\"label\":\"deposits\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_mapping(t_address,t_mapping(t_address,t_uint256))\"},{\"astId\":1001,\"contract\":\"contracts/L2/L2StandardBridge.sol:L2StandardBridge\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)1002_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)1002_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\"},\"t_mapping(t_address,t_mapping(t_address,t_uint256))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(address =\u003e uint256))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_address,t_uint256)\"},\"t_mapping(t_address,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint256\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"}}}" +const L2StandardBridgeStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/L2/L2StandardBridge.sol:L2StandardBridge\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"src/L2/L2StandardBridge.sol:L2StandardBridge\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"src/L2/L2StandardBridge.sol:L2StandardBridge\",\"label\":\"spacer_0_2_20\",\"offset\":2,\"slot\":\"0\",\"type\":\"t_address\"},{\"astId\":1003,\"contract\":\"src/L2/L2StandardBridge.sol:L2StandardBridge\",\"label\":\"spacer_1_0_20\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_address\"},{\"astId\":1004,\"contract\":\"src/L2/L2StandardBridge.sol:L2StandardBridge\",\"label\":\"deposits\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_mapping(t_address,t_mapping(t_address,t_uint256))\"},{\"astId\":1005,\"contract\":\"src/L2/L2StandardBridge.sol:L2StandardBridge\",\"label\":\"messenger\",\"offset\":0,\"slot\":\"3\",\"type\":\"t_contract(CrossDomainMessenger)1007\"},{\"astId\":1006,\"contract\":\"src/L2/L2StandardBridge.sol:L2StandardBridge\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"4\",\"type\":\"t_array(t_uint256)46_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)46_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[46]\",\"numberOfBytes\":\"1472\",\"base\":\"t_uint256\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_contract(CrossDomainMessenger)1007\":{\"encoding\":\"inplace\",\"label\":\"contract CrossDomainMessenger\",\"numberOfBytes\":\"20\"},\"t_mapping(t_address,t_mapping(t_address,t_uint256))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(address =\u003e uint256))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_address,t_uint256)\"},\"t_mapping(t_address,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint256\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" var L2StandardBridgeStorageLayout = new(solc.StorageLayout) -var L2StandardBridgeDeployedBin = "0x6080604052600436106100b55760003560e01c80637f46ddb2116100695780638f601f661161004e5780638f601f6614610264578063927ede2d146102a7578063e11013dd146102db57600080fd5b80637f46ddb2146101eb578063870876231461024457600080fd5b80631635f5fd1161009a5780631635f5fd1461018d578063540abf73146101a057806354fd4d50146101c057600080fd5b80630166a07a1461015a57806309fc88431461017a57600080fd5b3661015557333b156101345760405162461bcd60e51b815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61015333333462030d40604051806020016040528060008152506102ee565b005b600080fd5b34801561016657600080fd5b50610153610175366004611b82565b610513565b610153610188366004611c33565b61090f565b61015361019b366004611c86565b6109cc565b3480156101ac57600080fd5b506101536101bb366004611cf9565b610e46565b3480156101cc57600080fd5b506101d5610e94565b6040516101e29190611de6565b60405180910390f35b3480156101f757600080fd5b5061021f7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e2565b34801561025057600080fd5b5061015361025f366004611df9565b610f37565b34801561027057600080fd5b5061029961027f366004611e7c565b600060208181529281526040808220909352908152205481565b6040519081526020016101e2565b3480156102b357600080fd5b5061021f7f000000000000000000000000000000000000000000000000000000000000000081565b6101536102e9366004611eb5565b610ff1565b8234146103635760405162461bcd60e51b815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161012b565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af585846040516103c2929190611f18565b60405180910390a37f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633dbb202b847f0000000000000000000000000000000000000000000000000000000000000000631635f5fd60e01b898989886040516024016104479493929190611f31565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526104da92918890600401611f7a565b6000604051808303818588803b1580156104f357600080fd5b505af1158015610507573d6000803e3d6000fd5b50505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561063157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106199190611fbf565b73ffffffffffffffffffffffffffffffffffffffff16145b6106c95760405162461bcd60e51b815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161012b565b6106d28761103a565b15610806576106e1878761106c565b6107795760405162461bcd60e51b815260206004820152604760248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204b726f6d61204d696e7461626c65204552433230206c6f636160648201527f6c20746f6b656e00000000000000000000000000000000000000000000000000608482015260a40161012b565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156107e957600080fd5b505af11580156107fd573d6000803e3d6000fd5b50505050610884565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260208181526040808320938a168352929052205461084290849061200b565b73ffffffffffffffffffffffffffffffffffffffff808916600081815260208181526040808320948c1683529390529190912091909155610884908585611113565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd878787876040516108fe949392919061206b565b60405180910390a450505050505050565b333b156109845760405162461bcd60e51b815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161012b565b6109c73333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506102ee92505050565b505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148015610aea57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad29190611fbf565b73ffffffffffffffffffffffffffffffffffffffff16145b610b825760405162461bcd60e51b815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161012b565b823414610bf75760405162461bcd60e51b815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161012b565b3073ffffffffffffffffffffffffffffffffffffffff851603610c825760405162461bcd60e51b815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161012b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d435760405162461bcd60e51b815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161012b565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d858585604051610da4939291906120a1565b60405180910390a36000610dc9855a86604051806020016040528060008152506111e7565b905080610e3e5760405162461bcd60e51b815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161012b565b505050505050565b610e8b87873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061120392505050565b50505050505050565b6060610ebf7f000000000000000000000000000000000000000000000000000000000000000061159e565b610ee87f000000000000000000000000000000000000000000000000000000000000000061159e565b610f117f000000000000000000000000000000000000000000000000000000000000000061159e565b604051602001610f23939291906120c4565b604051602081830303815290604052905090565b333b15610fac5760405162461bcd60e51b815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161012b565b610e3e86863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061120392505050565b6110343385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506102ee92505050565b50505050565b6000611066827f30a0c5a90000000000000000000000000000000000000000000000000000000061165c565b92915050565b60008273ffffffffffffffffffffffffffffffffffffffff1663033964be6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dd9190611fbf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614905092915050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109c79084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261167f565b600080600080845160208601878a8af19150505b949350505050565b61120c8761103a565b156113405761121b878761106c565b6112b35760405162461bcd60e51b815260206004820152604760248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204b726f6d61204d696e7461626c65204552433230206c6f636160648201527f6c20746f6b656e00000000000000000000000000000000000000000000000000608482015260a40161012b565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561132357600080fd5b505af1158015611337573d6000803e3d6000fd5b505050506113d0565b61136273ffffffffffffffffffffffffffffffffffffffff8816863086611774565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260208181526040808320938a168352929052205461139e90849061213a565b73ffffffffffffffffffffffffffffffffffffffff808916600090815260208181526040808320938b16835292905220555b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf87878660405161144893929190612152565b60405180910390a47f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633dbb202b7f0000000000000000000000000000000000000000000000000000000000000000630166a07a60e01b898b8a8a8a896040516024016114d096959493929190612187565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261156392918790600401611f7a565b600060405180830381600087803b15801561157d57600080fd5b505af1158015611591573d6000803e3d6000fd5b5050505050505050505050565b606060006115ab836117d2565b600101905060008167ffffffffffffffff8111156115cb576115cb6121e2565b6040519080825280601f01601f1916602001820160405280156115f5576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846115ff57509392505050565b6000611667836118b4565b801561167857506116788383611918565b9392505050565b60006116e1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166119e79092919063ffffffff16565b90508051600014806117025750808060200190518101906117029190612211565b6109c75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161012b565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526110349085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611165565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061181b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611847576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061186557662386f26fc10000830492506010015b6305f5e100831061187d576305f5e100830492506008015b612710831061189157612710830492506004015b606483106118a3576064830492506002015b600a83106110665760010192915050565b60006118e0827f01ffc9a700000000000000000000000000000000000000000000000000000000611918565b80156110665750611911827fffffffff00000000000000000000000000000000000000000000000000000000611918565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156119d0575060208210155b80156119dc5750600081115b979650505050505050565b60606111fb8484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051611a1b9190612233565b60006040518083038185875af1925050503d8060008114611a58576040519150601f19603f3d011682016040523d82523d6000602084013e611a5d565b606091505b50915091506119dc8783838760608315611ae5578251600003611ade5773ffffffffffffffffffffffffffffffffffffffff85163b611ade5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161012b565b50816111fb565b6111fb8383815115611afa5781518083602001fd5b8060405162461bcd60e51b815260040161012b9190611de6565b73ffffffffffffffffffffffffffffffffffffffff81168114611b3657600080fd5b50565b60008083601f840112611b4b57600080fd5b50813567ffffffffffffffff811115611b6357600080fd5b602083019150836020828501011115611b7b57600080fd5b9250929050565b600080600080600080600060c0888a031215611b9d57600080fd5b8735611ba881611b14565b96506020880135611bb881611b14565b95506040880135611bc881611b14565b94506060880135611bd881611b14565b93506080880135925060a088013567ffffffffffffffff811115611bfb57600080fd5b611c078a828b01611b39565b989b979a50959850939692959293505050565b803563ffffffff81168114611c2e57600080fd5b919050565b600080600060408486031215611c4857600080fd5b611c5184611c1a565b9250602084013567ffffffffffffffff811115611c6d57600080fd5b611c7986828701611b39565b9497909650939450505050565b600080600080600060808688031215611c9e57600080fd5b8535611ca981611b14565b94506020860135611cb981611b14565b935060408601359250606086013567ffffffffffffffff811115611cdc57600080fd5b611ce888828901611b39565b969995985093965092949392505050565b600080600080600080600060c0888a031215611d1457600080fd5b8735611d1f81611b14565b96506020880135611d2f81611b14565b95506040880135611d3f81611b14565b945060608801359350611d5460808901611c1a565b925060a088013567ffffffffffffffff811115611bfb57600080fd5b60005b83811015611d8b578181015183820152602001611d73565b838111156110345750506000910152565b60008151808452611db4816020860160208601611d70565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006116786020830184611d9c565b60008060008060008060a08789031215611e1257600080fd5b8635611e1d81611b14565b95506020870135611e2d81611b14565b945060408701359350611e4260608801611c1a565b9250608087013567ffffffffffffffff811115611e5e57600080fd5b611e6a89828a01611b39565b979a9699509497509295939492505050565b60008060408385031215611e8f57600080fd5b8235611e9a81611b14565b91506020830135611eaa81611b14565b809150509250929050565b60008060008060608587031215611ecb57600080fd5b8435611ed681611b14565b9350611ee460208601611c1a565b9250604085013567ffffffffffffffff811115611f0057600080fd5b611f0c87828801611b39565b95989497509550505050565b8281526040602082015260006111fb6040830184611d9c565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152611f706080830184611d9c565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000611fa96060830185611d9c565b905063ffffffff83166040830152949350505050565b600060208284031215611fd157600080fd5b815161167881611b14565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561201d5761201d611fdc565b500390565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000611f70606083018486612022565b8381526040602082015260006120bb604083018486612022565b95945050505050565b600084516120d6818460208901611d70565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612112816001850160208a01611d70565b6001920191820152835161212d816002840160208801611d70565b0160020195945050505050565b6000821982111561214d5761214d611fdc565b500190565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006120bb6060830184611d9c565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a08301526121d660c0830184611d9c565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561222357600080fd5b8151801515811461167857600080fd5b60008251612245818460208701611d70565b919091019291505056fea164736f6c634300080f000a" +var L2StandardBridgeDeployedBin = "0x6080604052600436106101125760003560e01c8063662a633a116100a55780638f601f6611610074578063a3a7954811610059578063a3a7954814610428578063c89701a21461023f578063e11013dd1461043b57600080fd5b80638f601f66146103b7578063927ede2d146103fd57600080fd5b8063662a633a1461033b5780637f46ddb21461034e5780638129fc1c14610382578063870876231461039757600080fd5b806336c717c1116100e157806336c717c11461023f5780633cb747bf14610298578063540abf73146102c557806354fd4d50146102e557600080fd5b80630166a07a146101e657806309fc8843146102065780631635f5fd1461021957806332b7006d1461022c57600080fd5b366101e157333b156101ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b6101df73deaddeaddeaddeaddeaddeaddeaddeaddead000033333462030d406040518060200160405280600081525061044e565b005b600080fd5b3480156101f257600080fd5b506101df610201366004612440565b610529565b6101df6102143660046124f1565b6108e7565b6101df610227366004612544565b6109be565b6101df61023a3660046125b7565b610e2c565b34801561024b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102a457600080fd5b5060035461026e9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d157600080fd5b506101df6102e036600461260b565b610f06565b3480156102f157600080fd5b5061032e6040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b60405161028f91906126f8565b6101df610349366004612440565b610f4b565b34801561035a57600080fd5b5061026e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561038e57600080fd5b506101df610fbe565b3480156103a357600080fd5b506101df6103b236600461270b565b61111b565b3480156103c357600080fd5b506103ef6103d236600461278e565b600260209081526000928352604080842090915290825290205481565b60405190815260200161028f565b34801561040957600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff1661026e565b6101df61043636600461270b565b6111ef565b6101df6104493660046127c7565b611233565b7fffffffffffffffffffffffff215221522152215221522152215221522153000073ffffffffffffffffffffffffffffffffffffffff87160161049d57610498858585858561127c565b610521565b60008673ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050e919061282a565b905061051f87828888888888611462565b505b505050505050565b60035473ffffffffffffffffffffffffffffffffffffffff16331480156106185750600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116931691636e296e459160048083019260209291908290030181865afa1580156105dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610600919061282a565b73ffffffffffffffffffffffffffffffffffffffff16145b6106ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101a2565b6106d3876117aa565b15610821576106e2878761180c565b610794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101a2565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561080457600080fd5b505af1158015610818573d6000803e3d6000fd5b505050506108a3565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a168352929052205461085f908490612876565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556108a390858561192c565b61051f878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a0092505050565b333b15610976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101a2565b6109b93333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061127c92505050565b505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610aad5750600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116931691636e296e459160048083019260209291908290030181865afa158015610a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a95919061282a565b73ffffffffffffffffffffffffffffffffffffffff16145b610b5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101a2565b823414610bee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e7420726571756972656400000000000060648201526084016101a2565b3073ffffffffffffffffffffffffffffffffffffffff851603610c93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c66000000000000000000000000000000000000000000000000000000000060648201526084016101a2565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610d3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e67657200000000000000000000000000000000000000000000000060648201526084016101a2565b610d8085858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a8e92505050565b6000610d9d855a8660405180602001604052806000815250611b2f565b905080610521576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c6564000000000000000000000000000000000000000000000000000000000060648201526084016101a2565b333b15610ebb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101a2565b610eff853333878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061044e92505050565b5050505050565b61051f87873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061146292505050565b73ffffffffffffffffffffffffffffffffffffffff8716158015610f98575073ffffffffffffffffffffffffffffffffffffffff861673deaddeaddeaddeaddeaddeaddeaddeaddead0000145b15610faf57610faa85858585856109be565b61051f565b61051f86888787878787610529565b600054600290610100900460ff16158015610fe0575060005460ff8083169116105b61106c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016101a2565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556110ba734200000000000000000000000000000000000007611b49565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b333b156111aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101a2565b61052186863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061146292505050565b610521863387878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061044e92505050565b6112763385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061127c92505050565b50505050565b82341461130b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c7565000060648201526084016101a2565b61131785858584611c27565b60035460405173ffffffffffffffffffffffffffffffffffffffff90911690633dbb202b9085907f0000000000000000000000000000000000000000000000000000000000000000907f1635f5fd0000000000000000000000000000000000000000000000000000000090611396908b908b9086908a9060240161288d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b9092168252611429929188906004016128d6565b6000604051808303818588803b15801561144257600080fd5b505af1158015611456573d6000803e3d6000fd5b50505050505050505050565b61146b876117aa565b156115b95761147a878761180c565b61152c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101a2565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561159c57600080fd5b505af11580156115b0573d6000803e3d6000fd5b5050505061164d565b6115db73ffffffffffffffffffffffffffffffffffffffff8816863086611cc8565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a168352929052205461161990849061291b565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b61165b878787878786611d26565b60035460405173ffffffffffffffffffffffffffffffffffffffff90911690633dbb202b907f0000000000000000000000000000000000000000000000000000000000000000907f0166a07a00000000000000000000000000000000000000000000000000000000906116dc908b908d908c908c908c908b90602401612933565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261176f929187906004016128d6565b600060405180830381600087803b15801561178957600080fd5b505af115801561179d573d6000803e3d6000fd5b5050505050505050505050565b60006117d6827f1d1d8b6300000000000000000000000000000000000000000000000000000000611db4565b806118065750611806827fec4fc8e300000000000000000000000000000000000000000000000000000000611db4565b92915050565b6000611838837f1d1d8b6300000000000000000000000000000000000000000000000000000000611db4565b156118e1578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611888573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ac919061282a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611806565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611888573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109b99084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611dd7565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611a789392919061298e565b60405180910390a4610521868686868686611ee3565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611b1b9392919061298e565b60405180910390a461127684848484611f6b565b600080600080845160208601878a8af19695505050505050565b600054610100900460ff16611be0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016101a2565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e868686604051611cb49392919061298e565b60405180910390a461127684848484611fd8565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526112769085907f23b872dd000000000000000000000000000000000000000000000000000000009060840161197e565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e868686604051611d9e9392919061298e565b60405180910390a4610521868686868686612037565b6000611dbf836120af565b8015611dd05750611dd08383612113565b9392505050565b6000611e39826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166121e29092919063ffffffff16565b8051909150156109b95780806020019051810190611e5791906129cc565b6109b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016101a2565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd868686604051611f5b9392919061298e565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051611fca9291906129ee565b60405180910390a350505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051611fca9291906129ee565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf868686604051611f5b9392919061298e565b60006120db827f01ffc9a700000000000000000000000000000000000000000000000000000000612113565b8015611806575061210c827fffffffff00000000000000000000000000000000000000000000000000000000612113565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156121cb575060208210155b80156121d75750600081115b979650505050505050565b60606121f184846000856121f9565b949350505050565b60608247101561228b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016101a2565b73ffffffffffffffffffffffffffffffffffffffff85163b612309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101a2565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516123329190612a07565b60006040518083038185875af1925050503d806000811461236f576040519150601f19603f3d011682016040523d82523d6000602084013e612374565b606091505b50915091506121d78282866060831561238e575081611dd0565b82511561239e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101a291906126f8565b73ffffffffffffffffffffffffffffffffffffffff811681146123f457600080fd5b50565b60008083601f84011261240957600080fd5b50813567ffffffffffffffff81111561242157600080fd5b60208301915083602082850101111561243957600080fd5b9250929050565b600080600080600080600060c0888a03121561245b57600080fd5b8735612466816123d2565b96506020880135612476816123d2565b95506040880135612486816123d2565b94506060880135612496816123d2565b93506080880135925060a088013567ffffffffffffffff8111156124b957600080fd5b6124c58a828b016123f7565b989b979a50959850939692959293505050565b803563ffffffff811681146124ec57600080fd5b919050565b60008060006040848603121561250657600080fd5b61250f846124d8565b9250602084013567ffffffffffffffff81111561252b57600080fd5b612537868287016123f7565b9497909650939450505050565b60008060008060006080868803121561255c57600080fd5b8535612567816123d2565b94506020860135612577816123d2565b935060408601359250606086013567ffffffffffffffff81111561259a57600080fd5b6125a6888289016123f7565b969995985093965092949392505050565b6000806000806000608086880312156125cf57600080fd5b85356125da816123d2565b9450602086013593506125ef604087016124d8565b9250606086013567ffffffffffffffff81111561259a57600080fd5b600080600080600080600060c0888a03121561262657600080fd5b8735612631816123d2565b96506020880135612641816123d2565b95506040880135612651816123d2565b945060608801359350612666608089016124d8565b925060a088013567ffffffffffffffff8111156124b957600080fd5b60005b8381101561269d578181015183820152602001612685565b838111156112765750506000910152565b600081518084526126c6816020860160208601612682565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611dd060208301846126ae565b60008060008060008060a0878903121561272457600080fd5b863561272f816123d2565b9550602087013561273f816123d2565b945060408701359350612754606088016124d8565b9250608087013567ffffffffffffffff81111561277057600080fd5b61277c89828a016123f7565b979a9699509497509295939492505050565b600080604083850312156127a157600080fd5b82356127ac816123d2565b915060208301356127bc816123d2565b809150509250929050565b600080600080606085870312156127dd57600080fd5b84356127e8816123d2565b93506127f6602086016124d8565b9250604085013567ffffffffffffffff81111561281257600080fd5b61281e878288016123f7565b95989497509550505050565b60006020828403121561283c57600080fd5b8151611dd0816123d2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561288857612888612847565b500390565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526128cc60808301846126ae565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815260606020820152600061290560608301856126ae565b905063ffffffff83166040830152949350505050565b6000821982111561292e5761292e612847565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a083015261298260c08301846126ae565b98975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006129c360608301846126ae565b95945050505050565b6000602082840312156129de57600080fd5b81518015158114611dd057600080fd5b8281526040602082015260006121f160408301846126ae565b60008251612a19818460208701612682565b919091019291505056fea164736f6c634300080f000a" func init() { if err := json.Unmarshal([]byte(L2StandardBridgeStorageLayoutJSON), L2StandardBridgeStorageLayout); err != nil { diff --git a/op-bindings/bindings/l2tol1messagepasser.go b/op-bindings/bindings/l2tol1messagepasser.go index 73aec80a3..ce4a37ae4 100644 --- a/op-bindings/bindings/l2tol1messagepasser.go +++ b/op-bindings/bindings/l2tol1messagepasser.go @@ -26,13 +26,12 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription - _ = abi.ConvertType ) // L2ToL1MessagePasserMetaData contains all meta data concerning the L2ToL1MessagePasser contract. var L2ToL1MessagePasserMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"}],\"name\":\"MessagePassed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawerBalanceBurnt\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSAGE_VERSION\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"initiateWithdrawal\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"sentMessages\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60e060405234801561001057600080fd5b5060016080819052600060a081905260c0819052806108f661004a8239600061039a015260006103710152600061034801526108f66000f3fe6080604052600436106100695760003560e01c806382e3702d1161004357806382e3702d146100f6578063c2b3e5ac14610136578063ecc704281461014957600080fd5b80633f827a5a1461009257806344df8e70146100bf57806354fd4d50146100d457600080fd5b3661008d5761008b33620186a060405180602001604052806000815250610187565b005b600080fd5b34801561009e57600080fd5b506100a7600081565b60405161ffff90911681526020015b60405180910390f35b3480156100cb57600080fd5b5061008b610309565b3480156100e057600080fd5b506100e9610341565b6040516100b69190610686565b34801561010257600080fd5b506101266101113660046106a0565b60006020819052908152604090205460ff1681565b60405190151581526020016100b6565b61008b6101443660046106e8565b610187565b34801561015557600080fd5b506001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff166040519081526020016100b6565b60006101fc6040518060c001604052806101c06001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b815233602082015273ffffffffffffffffffffffffffffffffffffffff871660408201523460608201526080810186905260a0018490526103e4565b600081815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055905073ffffffffffffffffffffffffffffffffffffffff8416336102766001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b7f02a52367d10742d8032712c1bb8e0144ff1ec5ffda1ed7d70bb05a2744955054348787876040516102ab94939291906107ec565b60405180910390a45050600180547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8082168301167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b4761031381610431565b60405181907f7967de617a5ac1cc7eba2d6f37570a0135afa950d8bb77cdd35f0d0b4e85a16f90600090a250565b606061036c7f0000000000000000000000000000000000000000000000000000000000000000610451565b6103957f0000000000000000000000000000000000000000000000000000000000000000610451565b6103be7f0000000000000000000000000000000000000000000000000000000000000000610451565b6040516020016103d09392919061081c565b604051602081830303815290604052905090565b80516020808301516040808501516060860151608087015160a08801519351600097610414979096959101610892565b604051602081830303815290604052805190602001209050919050565b61044d60005a836040518060200160405280600081525061050f565b5050565b6060600061045e83610529565b600101905060008167ffffffffffffffff81111561047e5761047e6106b9565b6040519080825280601f01601f1916602001820160405280156104a8576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846104b257509392505050565b600080600080845160208601878a8af19695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610572577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061059e576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105bc57662386f26fc10000830492506010015b6305f5e10083106105d4576305f5e100830492506008015b61271083106105e857612710830492506004015b606483106105fa576064830492506002015b600a8310610606576001015b92915050565b60005b8381101561062757818101518382015260200161060f565b83811115610636576000848401525b50505050565b6000815180845261065481602086016020860161060c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610699602083018461063c565b9392505050565b6000602082840312156106b257600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000606084860312156106fd57600080fd5b833573ffffffffffffffffffffffffffffffffffffffff8116811461072157600080fd5b925060208401359150604084013567ffffffffffffffff8082111561074557600080fd5b818601915086601f83011261075957600080fd5b81358181111561076b5761076b6106b9565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156107b1576107b16106b9565b816040528281528960208487010111156107ca57600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b84815283602082015260806040820152600061080b608083018561063c565b905082606083015295945050505050565b6000845161082e81846020890161060c565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161086a816001850160208a0161060c565b6001920191820152835161088581600284016020880161060c565b0160020195945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526108dd60c083018461063c565b9897505050505050505056fea164736f6c634300080f000a", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"}],\"name\":\"MessagePassed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawerBalanceBurnt\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSAGE_VERSION\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"initiateWithdrawal\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"sentMessages\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x608060405234801561001057600080fd5b506106d3806100206000396000f3fe6080604052600436106100695760003560e01c806382e3702d1161004357806382e3702d1461012a578063c2b3e5ac1461016a578063ecc704281461017d57600080fd5b80633f827a5a1461009257806344df8e70146100bf57806354fd4d50146100d457600080fd5b3661008d5761008b33620186a0604051806020016040528060008152506101e2565b005b600080fd5b34801561009e57600080fd5b506100a7600181565b60405161ffff90911681526020015b60405180910390f35b3480156100cb57600080fd5b5061008b6103a6565b3480156100e057600080fd5b5061011d6040518060400160405280600581526020017f312e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516100b691906104d1565b34801561013657600080fd5b5061015a6101453660046104eb565b60006020819052908152604090205460ff1681565b60405190151581526020016100b6565b61008b610178366004610533565b6101e2565b34801561018957600080fd5b506101d46001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016100b6565b60006102786040518060c0016040528061023c6001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b815233602082015273ffffffffffffffffffffffffffffffffffffffff871660408201523460608201526080810186905260a0018490526103de565b600081815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055905073ffffffffffffffffffffffffffffffffffffffff8416336103136001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b7f02a52367d10742d8032712c1bb8e0144ff1ec5ffda1ed7d70bb05a2744955054348787876040516103489493929190610637565b60405180910390a45050600180547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8082168301167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b476103b08161042b565b60405181907f7967de617a5ac1cc7eba2d6f37570a0135afa950d8bb77cdd35f0d0b4e85a16f90600090a250565b80516020808301516040808501516060860151608087015160a0880151935160009761040e979096959101610667565b604051602081830303815290604052805190602001209050919050565b806040516104389061045a565b6040518091039082f0905080158015610455573d6000803e3d6000fd5b505050565b6008806106bf83390190565b6000815180845260005b8181101561048c57602081850181015186830182015201610470565b8181111561049e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006104e46020830184610466565b9392505050565b6000602082840312156104fd57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561054857600080fd5b833573ffffffffffffffffffffffffffffffffffffffff8116811461056c57600080fd5b925060208401359150604084013567ffffffffffffffff8082111561059057600080fd5b818601915086601f8301126105a457600080fd5b8135818111156105b6576105b6610504565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156105fc576105fc610504565b8160405282815289602084870101111561061557600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b8481528360208201526080604082015260006106566080830185610466565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526106b260c0830184610466565b9897505050505050505056fe608060405230fffea164736f6c634300080f000a", } // L2ToL1MessagePasserABI is the input ABI used to generate the binding from. @@ -157,11 +156,11 @@ func NewL2ToL1MessagePasserFilterer(address common.Address, filterer bind.Contra // bindL2ToL1MessagePasser binds a generic wrapper to an already deployed contract. func bindL2ToL1MessagePasser(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := L2ToL1MessagePasserMetaData.GetAbi() + parsed, err := abi.JSON(strings.NewReader(L2ToL1MessagePasserABI)) if err != nil { return nil, err } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and diff --git a/op-bindings/bindings/l2tol1messagepasser_more.go b/op-bindings/bindings/l2tol1messagepasser_more.go index 0869b69f8..25fea0ccd 100644 --- a/op-bindings/bindings/l2tol1messagepasser_more.go +++ b/op-bindings/bindings/l2tol1messagepasser_more.go @@ -9,11 +9,11 @@ import ( "github.com/ethereum-optimism/optimism/op-bindings/solc" ) -const L2ToL1MessagePasserStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L2/L2ToL1MessagePasser.sol:L2ToL1MessagePasser\",\"label\":\"sentMessages\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1001,\"contract\":\"contracts/L2/L2ToL1MessagePasser.sol:L2ToL1MessagePasser\",\"label\":\"msgNonce\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_uint240\"}],\"types\":{\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_bytes32,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_bool\"},\"t_uint240\":{\"encoding\":\"inplace\",\"label\":\"uint240\",\"numberOfBytes\":\"30\"}}}" +const L2ToL1MessagePasserStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/L2/L2ToL1MessagePasser.sol:L2ToL1MessagePasser\",\"label\":\"sentMessages\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1001,\"contract\":\"src/L2/L2ToL1MessagePasser.sol:L2ToL1MessagePasser\",\"label\":\"msgNonce\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_uint240\"}],\"types\":{\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_bytes32,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_bool\"},\"t_uint240\":{\"encoding\":\"inplace\",\"label\":\"uint240\",\"numberOfBytes\":\"30\"}}}" var L2ToL1MessagePasserStorageLayout = new(solc.StorageLayout) -var L2ToL1MessagePasserDeployedBin = "0x6080604052600436106100695760003560e01c806382e3702d1161004357806382e3702d146100f6578063c2b3e5ac14610136578063ecc704281461014957600080fd5b80633f827a5a1461009257806344df8e70146100bf57806354fd4d50146100d457600080fd5b3661008d5761008b33620186a060405180602001604052806000815250610187565b005b600080fd5b34801561009e57600080fd5b506100a7600081565b60405161ffff90911681526020015b60405180910390f35b3480156100cb57600080fd5b5061008b610309565b3480156100e057600080fd5b506100e9610341565b6040516100b69190610686565b34801561010257600080fd5b506101266101113660046106a0565b60006020819052908152604090205460ff1681565b60405190151581526020016100b6565b61008b6101443660046106e8565b610187565b34801561015557600080fd5b506001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff166040519081526020016100b6565b60006101fc6040518060c001604052806101c06001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b815233602082015273ffffffffffffffffffffffffffffffffffffffff871660408201523460608201526080810186905260a0018490526103e4565b600081815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055905073ffffffffffffffffffffffffffffffffffffffff8416336102766001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b7f02a52367d10742d8032712c1bb8e0144ff1ec5ffda1ed7d70bb05a2744955054348787876040516102ab94939291906107ec565b60405180910390a45050600180547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8082168301167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b4761031381610431565b60405181907f7967de617a5ac1cc7eba2d6f37570a0135afa950d8bb77cdd35f0d0b4e85a16f90600090a250565b606061036c7f0000000000000000000000000000000000000000000000000000000000000000610451565b6103957f0000000000000000000000000000000000000000000000000000000000000000610451565b6103be7f0000000000000000000000000000000000000000000000000000000000000000610451565b6040516020016103d09392919061081c565b604051602081830303815290604052905090565b80516020808301516040808501516060860151608087015160a08801519351600097610414979096959101610892565b604051602081830303815290604052805190602001209050919050565b61044d60005a836040518060200160405280600081525061050f565b5050565b6060600061045e83610529565b600101905060008167ffffffffffffffff81111561047e5761047e6106b9565b6040519080825280601f01601f1916602001820160405280156104a8576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846104b257509392505050565b600080600080845160208601878a8af19695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610572577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061059e576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105bc57662386f26fc10000830492506010015b6305f5e10083106105d4576305f5e100830492506008015b61271083106105e857612710830492506004015b606483106105fa576064830492506002015b600a8310610606576001015b92915050565b60005b8381101561062757818101518382015260200161060f565b83811115610636576000848401525b50505050565b6000815180845261065481602086016020860161060c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610699602083018461063c565b9392505050565b6000602082840312156106b257600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000606084860312156106fd57600080fd5b833573ffffffffffffffffffffffffffffffffffffffff8116811461072157600080fd5b925060208401359150604084013567ffffffffffffffff8082111561074557600080fd5b818601915086601f83011261075957600080fd5b81358181111561076b5761076b6106b9565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156107b1576107b16106b9565b816040528281528960208487010111156107ca57600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b84815283602082015260806040820152600061080b608083018561063c565b905082606083015295945050505050565b6000845161082e81846020890161060c565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161086a816001850160208a0161060c565b6001920191820152835161088581600284016020880161060c565b0160020195945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526108dd60c083018461063c565b9897505050505050505056fea164736f6c634300080f000a" +var L2ToL1MessagePasserDeployedBin = "0x6080604052600436106100695760003560e01c806382e3702d1161004357806382e3702d1461012a578063c2b3e5ac1461016a578063ecc704281461017d57600080fd5b80633f827a5a1461009257806344df8e70146100bf57806354fd4d50146100d457600080fd5b3661008d5761008b33620186a0604051806020016040528060008152506101e2565b005b600080fd5b34801561009e57600080fd5b506100a7600181565b60405161ffff90911681526020015b60405180910390f35b3480156100cb57600080fd5b5061008b6103a6565b3480156100e057600080fd5b5061011d6040518060400160405280600581526020017f312e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516100b691906104d1565b34801561013657600080fd5b5061015a6101453660046104eb565b60006020819052908152604090205460ff1681565b60405190151581526020016100b6565b61008b610178366004610533565b6101e2565b34801561018957600080fd5b506101d46001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016100b6565b60006102786040518060c0016040528061023c6001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b815233602082015273ffffffffffffffffffffffffffffffffffffffff871660408201523460608201526080810186905260a0018490526103de565b600081815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055905073ffffffffffffffffffffffffffffffffffffffff8416336103136001547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b7f02a52367d10742d8032712c1bb8e0144ff1ec5ffda1ed7d70bb05a2744955054348787876040516103489493929190610637565b60405180910390a45050600180547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8082168301167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b476103b08161042b565b60405181907f7967de617a5ac1cc7eba2d6f37570a0135afa950d8bb77cdd35f0d0b4e85a16f90600090a250565b80516020808301516040808501516060860151608087015160a0880151935160009761040e979096959101610667565b604051602081830303815290604052805190602001209050919050565b806040516104389061045a565b6040518091039082f0905080158015610455573d6000803e3d6000fd5b505050565b6008806106bf83390190565b6000815180845260005b8181101561048c57602081850181015186830182015201610470565b8181111561049e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006104e46020830184610466565b9392505050565b6000602082840312156104fd57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561054857600080fd5b833573ffffffffffffffffffffffffffffffffffffffff8116811461056c57600080fd5b925060208401359150604084013567ffffffffffffffff8082111561059057600080fd5b818601915086601f8301126105a457600080fd5b8135818111156105b6576105b6610504565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156105fc576105fc610504565b8160405282815289602084870101111561061557600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b8481528360208201526080604082015260006106566080830185610466565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526106b260c0830184610466565b9897505050505050505056fe608060405230fffea164736f6c634300080f000a" func init() { if err := json.Unmarshal([]byte(L2ToL1MessagePasserStorageLayoutJSON), L2ToL1MessagePasserStorageLayout); err != nil { diff --git a/op-bindings/bindings/legacyerc20eth.go b/op-bindings/bindings/legacyerc20eth.go new file mode 100644 index 000000000..6b0cf74b9 --- /dev/null +++ b/op-bindings/bindings/legacyerc20eth.go @@ -0,0 +1,1381 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// LegacyERC20ETHMetaData contains all meta data concerning the LegacyERC20ETH contract. +var LegacyERC20ETHMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BRIDGE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REMOTE_TOKEN\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_who\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1Token\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2Bridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"remoteToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x6101406040523480156200001257600080fd5b5073420000000000000000000000000000000000001060006040518060400160405280600581526020016422ba3432b960d91b8152506040518060400160405280600381526020016208aa8960eb1b8152506012600160026000858581600390816200007f919062000167565b5060046200008e828262000167565b50505060809290925260a05260c0526001600160a01b0393841660e0529390921661010052505060ff166101205262000233565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620000ed57607f821691505b6020821081036200010e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200016257600081815260208120601f850160051c810160208610156200013d5750805b601f850160051c820191505b818110156200015e5782815560010162000149565b5050505b505050565b81516001600160401b03811115620001835762000183620000c2565b6200019b81620001948454620000d8565b8462000114565b602080601f831160018114620001d35760008415620001ba5750858301515b600019600386901b1c1916600185901b1785556200015e565b600085815260208120601f198616915b828110156200020457888601518255948401946001909101908401620001e3565b5085821015620002235787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e0516101005161012051610e79620002916000396000610244015260008181610309015261039e0152600081816101a9015261032f015260006107a40152600061077b015260006107520152610e796000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063ae1f6aaf1161008c578063dd62ed3e11610066578063dd62ed3e14610353578063e78cea9214610307578063ee9a31a21461039957600080fd5b8063ae1f6aaf14610307578063c01e1bd61461032d578063d6c0b2c41461032d57600080fd5b80639dc29fac116100bd5780639dc29fac146102ce578063a457c2d7146102e1578063a9059cbb146102f457600080fd5b806370a082311461029e57806395d89b41146102c657600080fd5b806323b872dd1161012f5780633950935111610114578063395093511461026e57806340c10f191461028157806354fd4d501461029657600080fd5b806323b872dd1461022a578063313ce5671461023d57600080fd5b806306fdde031161016057806306fdde03146101f0578063095ea7b31461020557806318160ddd1461021857600080fd5b806301ffc9a71461017c578063033964be146101a4575b600080fd5b61018f61018a366004610ab1565b6103c0565b60405190151581526020015b60405180910390f35b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f86104b1565b60405161019b9190610b2a565b61018f610213366004610ba4565b610543565b6002545b60405190815260200161019b565b61018f610238366004610bce565b6105d3565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161019b565b61018f61027c366004610ba4565b61065e565b61029461028f366004610ba4565b6106e9565b005b6101f861074b565b61021c6102ac366004610c0a565b73ffffffffffffffffffffffffffffffffffffffff163190565b6101f86107ee565b6102946102dc366004610ba4565b6107fd565b61018f6102ef366004610ba4565b61085f565b61018f610302366004610ba4565b6108ea565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b61021c610361366004610c25565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007f1d1d8b63000000000000000000000000000000000000000000000000000000007fec4fc8e3000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000851683148061047957507fffffffff00000000000000000000000000000000000000000000000000000000858116908316145b806104a857507fffffffff00000000000000000000000000000000000000000000000000000000858116908216145b95945050505050565b6060600380546104c090610c58565b80601f01602080910402602001604051908101604052809291908181526020018280546104ec90610c58565b80156105395780601f1061050e57610100808354040283529160200191610539565b820191906000526020600020905b81548152906001019060200180831161051c57829003601f168201915b5050505050905090565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4c656761637945524332304554483a20617070726f766520697320646973616260448201527f6c6564000000000000000000000000000000000000000000000000000000000060648201526000906084015b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4c656761637945524332304554483a207472616e7366657246726f6d2069732060448201527f64697361626c656400000000000000000000000000000000000000000000000060648201526000906084016105ca565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4c656761637945524332304554483a20696e637265617365416c6c6f77616e6360448201527f652069732064697361626c65640000000000000000000000000000000000000060648201526000906084016105ca565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4c656761637945524332304554483a206d696e742069732064697361626c656460448201526064016105ca565b60606107767f0000000000000000000000000000000000000000000000000000000000000000610974565b61079f7f0000000000000000000000000000000000000000000000000000000000000000610974565b6107c87f0000000000000000000000000000000000000000000000000000000000000000610974565b6040516020016107da93929190610cab565b604051602081830303815290604052905090565b6060600480546104c090610c58565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4c656761637945524332304554483a206275726e2069732064697361626c656460448201526064016105ca565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4c656761637945524332304554483a206465637265617365416c6c6f77616e6360448201527f652069732064697361626c65640000000000000000000000000000000000000060648201526000906084016105ca565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4c656761637945524332304554483a207472616e73666572206973206469736160448201527f626c65640000000000000000000000000000000000000000000000000000000060648201526000906084016105ca565b6060816000036109b757505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156109e157806109cb81610d50565b91506109da9050600a83610db7565b91506109bb565b60008167ffffffffffffffff8111156109fc576109fc610dcb565b6040519080825280601f01601f191660200182016040528015610a26576020820181803683370190505b5090505b8415610aa957610a3b600183610dfa565b9150610a48600a86610e11565b610a53906030610e25565b60f81b818381518110610a6857610a68610e3d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610aa2600a86610db7565b9450610a2a565b949350505050565b600060208284031215610ac357600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610af357600080fd5b9392505050565b60005b83811015610b15578181015183820152602001610afd565b83811115610b24576000848401525b50505050565b6020815260008251806020840152610b49816040850160208701610afa565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b9f57600080fd5b919050565b60008060408385031215610bb757600080fd5b610bc083610b7b565b946020939093013593505050565b600080600060608486031215610be357600080fd5b610bec84610b7b565b9250610bfa60208501610b7b565b9150604084013590509250925092565b600060208284031215610c1c57600080fd5b610af382610b7b565b60008060408385031215610c3857600080fd5b610c4183610b7b565b9150610c4f60208401610b7b565b90509250929050565b600181811c90821680610c6c57607f821691505b602082108103610ca5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008451610cbd818460208901610afa565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610cf9816001850160208a01610afa565b60019201918201528351610d14816002840160208801610afa565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610d8157610d81610d21565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082610dc657610dc6610d88565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082821015610e0c57610e0c610d21565b500390565b600082610e2057610e20610d88565b500690565b60008219821115610e3857610e38610d21565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a", +} + +// LegacyERC20ETHABI is the input ABI used to generate the binding from. +// Deprecated: Use LegacyERC20ETHMetaData.ABI instead. +var LegacyERC20ETHABI = LegacyERC20ETHMetaData.ABI + +// LegacyERC20ETHBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use LegacyERC20ETHMetaData.Bin instead. +var LegacyERC20ETHBin = LegacyERC20ETHMetaData.Bin + +// DeployLegacyERC20ETH deploys a new Ethereum contract, binding an instance of LegacyERC20ETH to it. +func DeployLegacyERC20ETH(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *LegacyERC20ETH, error) { + parsed, err := LegacyERC20ETHMetaData.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(LegacyERC20ETHBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &LegacyERC20ETH{LegacyERC20ETHCaller: LegacyERC20ETHCaller{contract: contract}, LegacyERC20ETHTransactor: LegacyERC20ETHTransactor{contract: contract}, LegacyERC20ETHFilterer: LegacyERC20ETHFilterer{contract: contract}}, nil +} + +// LegacyERC20ETH is an auto generated Go binding around an Ethereum contract. +type LegacyERC20ETH struct { + LegacyERC20ETHCaller // Read-only binding to the contract + LegacyERC20ETHTransactor // Write-only binding to the contract + LegacyERC20ETHFilterer // Log filterer for contract events +} + +// LegacyERC20ETHCaller is an auto generated read-only Go binding around an Ethereum contract. +type LegacyERC20ETHCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// LegacyERC20ETHTransactor is an auto generated write-only Go binding around an Ethereum contract. +type LegacyERC20ETHTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// LegacyERC20ETHFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type LegacyERC20ETHFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// LegacyERC20ETHSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type LegacyERC20ETHSession struct { + Contract *LegacyERC20ETH // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// LegacyERC20ETHCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type LegacyERC20ETHCallerSession struct { + Contract *LegacyERC20ETHCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// LegacyERC20ETHTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type LegacyERC20ETHTransactorSession struct { + Contract *LegacyERC20ETHTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// LegacyERC20ETHRaw is an auto generated low-level Go binding around an Ethereum contract. +type LegacyERC20ETHRaw struct { + Contract *LegacyERC20ETH // Generic contract binding to access the raw methods on +} + +// LegacyERC20ETHCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type LegacyERC20ETHCallerRaw struct { + Contract *LegacyERC20ETHCaller // Generic read-only contract binding to access the raw methods on +} + +// LegacyERC20ETHTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type LegacyERC20ETHTransactorRaw struct { + Contract *LegacyERC20ETHTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewLegacyERC20ETH creates a new instance of LegacyERC20ETH, bound to a specific deployed contract. +func NewLegacyERC20ETH(address common.Address, backend bind.ContractBackend) (*LegacyERC20ETH, error) { + contract, err := bindLegacyERC20ETH(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &LegacyERC20ETH{LegacyERC20ETHCaller: LegacyERC20ETHCaller{contract: contract}, LegacyERC20ETHTransactor: LegacyERC20ETHTransactor{contract: contract}, LegacyERC20ETHFilterer: LegacyERC20ETHFilterer{contract: contract}}, nil +} + +// NewLegacyERC20ETHCaller creates a new read-only instance of LegacyERC20ETH, bound to a specific deployed contract. +func NewLegacyERC20ETHCaller(address common.Address, caller bind.ContractCaller) (*LegacyERC20ETHCaller, error) { + contract, err := bindLegacyERC20ETH(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &LegacyERC20ETHCaller{contract: contract}, nil +} + +// NewLegacyERC20ETHTransactor creates a new write-only instance of LegacyERC20ETH, bound to a specific deployed contract. +func NewLegacyERC20ETHTransactor(address common.Address, transactor bind.ContractTransactor) (*LegacyERC20ETHTransactor, error) { + contract, err := bindLegacyERC20ETH(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &LegacyERC20ETHTransactor{contract: contract}, nil +} + +// NewLegacyERC20ETHFilterer creates a new log filterer instance of LegacyERC20ETH, bound to a specific deployed contract. +func NewLegacyERC20ETHFilterer(address common.Address, filterer bind.ContractFilterer) (*LegacyERC20ETHFilterer, error) { + contract, err := bindLegacyERC20ETH(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &LegacyERC20ETHFilterer{contract: contract}, nil +} + +// bindLegacyERC20ETH binds a generic wrapper to an already deployed contract. +func bindLegacyERC20ETH(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(LegacyERC20ETHABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_LegacyERC20ETH *LegacyERC20ETHRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _LegacyERC20ETH.Contract.LegacyERC20ETHCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_LegacyERC20ETH *LegacyERC20ETHRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _LegacyERC20ETH.Contract.LegacyERC20ETHTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_LegacyERC20ETH *LegacyERC20ETHRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _LegacyERC20ETH.Contract.LegacyERC20ETHTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_LegacyERC20ETH *LegacyERC20ETHCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _LegacyERC20ETH.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_LegacyERC20ETH *LegacyERC20ETHTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _LegacyERC20ETH.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_LegacyERC20ETH *LegacyERC20ETHTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _LegacyERC20ETH.Contract.contract.Transact(opts, method, params...) +} + +// BRIDGE is a free data retrieval call binding the contract method 0xee9a31a2. +// +// Solidity: function BRIDGE() view returns(address) +func (_LegacyERC20ETH *LegacyERC20ETHCaller) BRIDGE(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _LegacyERC20ETH.contract.Call(opts, &out, "BRIDGE") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// BRIDGE is a free data retrieval call binding the contract method 0xee9a31a2. +// +// Solidity: function BRIDGE() view returns(address) +func (_LegacyERC20ETH *LegacyERC20ETHSession) BRIDGE() (common.Address, error) { + return _LegacyERC20ETH.Contract.BRIDGE(&_LegacyERC20ETH.CallOpts) +} + +// BRIDGE is a free data retrieval call binding the contract method 0xee9a31a2. +// +// Solidity: function BRIDGE() view returns(address) +func (_LegacyERC20ETH *LegacyERC20ETHCallerSession) BRIDGE() (common.Address, error) { + return _LegacyERC20ETH.Contract.BRIDGE(&_LegacyERC20ETH.CallOpts) +} + +// REMOTETOKEN is a free data retrieval call binding the contract method 0x033964be. +// +// Solidity: function REMOTE_TOKEN() view returns(address) +func (_LegacyERC20ETH *LegacyERC20ETHCaller) REMOTETOKEN(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _LegacyERC20ETH.contract.Call(opts, &out, "REMOTE_TOKEN") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// REMOTETOKEN is a free data retrieval call binding the contract method 0x033964be. +// +// Solidity: function REMOTE_TOKEN() view returns(address) +func (_LegacyERC20ETH *LegacyERC20ETHSession) REMOTETOKEN() (common.Address, error) { + return _LegacyERC20ETH.Contract.REMOTETOKEN(&_LegacyERC20ETH.CallOpts) +} + +// REMOTETOKEN is a free data retrieval call binding the contract method 0x033964be. +// +// Solidity: function REMOTE_TOKEN() view returns(address) +func (_LegacyERC20ETH *LegacyERC20ETHCallerSession) REMOTETOKEN() (common.Address, error) { + return _LegacyERC20ETH.Contract.REMOTETOKEN(&_LegacyERC20ETH.CallOpts) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_LegacyERC20ETH *LegacyERC20ETHCaller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) { + var out []interface{} + err := _LegacyERC20ETH.contract.Call(opts, &out, "allowance", owner, spender) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_LegacyERC20ETH *LegacyERC20ETHSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _LegacyERC20ETH.Contract.Allowance(&_LegacyERC20ETH.CallOpts, owner, spender) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_LegacyERC20ETH *LegacyERC20ETHCallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _LegacyERC20ETH.Contract.Allowance(&_LegacyERC20ETH.CallOpts, owner, spender) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address _who) view returns(uint256) +func (_LegacyERC20ETH *LegacyERC20ETHCaller) BalanceOf(opts *bind.CallOpts, _who common.Address) (*big.Int, error) { + var out []interface{} + err := _LegacyERC20ETH.contract.Call(opts, &out, "balanceOf", _who) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address _who) view returns(uint256) +func (_LegacyERC20ETH *LegacyERC20ETHSession) BalanceOf(_who common.Address) (*big.Int, error) { + return _LegacyERC20ETH.Contract.BalanceOf(&_LegacyERC20ETH.CallOpts, _who) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address _who) view returns(uint256) +func (_LegacyERC20ETH *LegacyERC20ETHCallerSession) BalanceOf(_who common.Address) (*big.Int, error) { + return _LegacyERC20ETH.Contract.BalanceOf(&_LegacyERC20ETH.CallOpts, _who) +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_LegacyERC20ETH *LegacyERC20ETHCaller) Bridge(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _LegacyERC20ETH.contract.Call(opts, &out, "bridge") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_LegacyERC20ETH *LegacyERC20ETHSession) Bridge() (common.Address, error) { + return _LegacyERC20ETH.Contract.Bridge(&_LegacyERC20ETH.CallOpts) +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_LegacyERC20ETH *LegacyERC20ETHCallerSession) Bridge() (common.Address, error) { + return _LegacyERC20ETH.Contract.Bridge(&_LegacyERC20ETH.CallOpts) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_LegacyERC20ETH *LegacyERC20ETHCaller) Decimals(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _LegacyERC20ETH.contract.Call(opts, &out, "decimals") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_LegacyERC20ETH *LegacyERC20ETHSession) Decimals() (uint8, error) { + return _LegacyERC20ETH.Contract.Decimals(&_LegacyERC20ETH.CallOpts) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_LegacyERC20ETH *LegacyERC20ETHCallerSession) Decimals() (uint8, error) { + return _LegacyERC20ETH.Contract.Decimals(&_LegacyERC20ETH.CallOpts) +} + +// L1Token is a free data retrieval call binding the contract method 0xc01e1bd6. +// +// Solidity: function l1Token() view returns(address) +func (_LegacyERC20ETH *LegacyERC20ETHCaller) L1Token(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _LegacyERC20ETH.contract.Call(opts, &out, "l1Token") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// L1Token is a free data retrieval call binding the contract method 0xc01e1bd6. +// +// Solidity: function l1Token() view returns(address) +func (_LegacyERC20ETH *LegacyERC20ETHSession) L1Token() (common.Address, error) { + return _LegacyERC20ETH.Contract.L1Token(&_LegacyERC20ETH.CallOpts) +} + +// L1Token is a free data retrieval call binding the contract method 0xc01e1bd6. +// +// Solidity: function l1Token() view returns(address) +func (_LegacyERC20ETH *LegacyERC20ETHCallerSession) L1Token() (common.Address, error) { + return _LegacyERC20ETH.Contract.L1Token(&_LegacyERC20ETH.CallOpts) +} + +// L2Bridge is a free data retrieval call binding the contract method 0xae1f6aaf. +// +// Solidity: function l2Bridge() view returns(address) +func (_LegacyERC20ETH *LegacyERC20ETHCaller) L2Bridge(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _LegacyERC20ETH.contract.Call(opts, &out, "l2Bridge") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// L2Bridge is a free data retrieval call binding the contract method 0xae1f6aaf. +// +// Solidity: function l2Bridge() view returns(address) +func (_LegacyERC20ETH *LegacyERC20ETHSession) L2Bridge() (common.Address, error) { + return _LegacyERC20ETH.Contract.L2Bridge(&_LegacyERC20ETH.CallOpts) +} + +// L2Bridge is a free data retrieval call binding the contract method 0xae1f6aaf. +// +// Solidity: function l2Bridge() view returns(address) +func (_LegacyERC20ETH *LegacyERC20ETHCallerSession) L2Bridge() (common.Address, error) { + return _LegacyERC20ETH.Contract.L2Bridge(&_LegacyERC20ETH.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_LegacyERC20ETH *LegacyERC20ETHCaller) Name(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _LegacyERC20ETH.contract.Call(opts, &out, "name") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_LegacyERC20ETH *LegacyERC20ETHSession) Name() (string, error) { + return _LegacyERC20ETH.Contract.Name(&_LegacyERC20ETH.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_LegacyERC20ETH *LegacyERC20ETHCallerSession) Name() (string, error) { + return _LegacyERC20ETH.Contract.Name(&_LegacyERC20ETH.CallOpts) +} + +// RemoteToken is a free data retrieval call binding the contract method 0xd6c0b2c4. +// +// Solidity: function remoteToken() view returns(address) +func (_LegacyERC20ETH *LegacyERC20ETHCaller) RemoteToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _LegacyERC20ETH.contract.Call(opts, &out, "remoteToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// RemoteToken is a free data retrieval call binding the contract method 0xd6c0b2c4. +// +// Solidity: function remoteToken() view returns(address) +func (_LegacyERC20ETH *LegacyERC20ETHSession) RemoteToken() (common.Address, error) { + return _LegacyERC20ETH.Contract.RemoteToken(&_LegacyERC20ETH.CallOpts) +} + +// RemoteToken is a free data retrieval call binding the contract method 0xd6c0b2c4. +// +// Solidity: function remoteToken() view returns(address) +func (_LegacyERC20ETH *LegacyERC20ETHCallerSession) RemoteToken() (common.Address, error) { + return _LegacyERC20ETH.Contract.RemoteToken(&_LegacyERC20ETH.CallOpts) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 _interfaceId) pure returns(bool) +func (_LegacyERC20ETH *LegacyERC20ETHCaller) SupportsInterface(opts *bind.CallOpts, _interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _LegacyERC20ETH.contract.Call(opts, &out, "supportsInterface", _interfaceId) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 _interfaceId) pure returns(bool) +func (_LegacyERC20ETH *LegacyERC20ETHSession) SupportsInterface(_interfaceId [4]byte) (bool, error) { + return _LegacyERC20ETH.Contract.SupportsInterface(&_LegacyERC20ETH.CallOpts, _interfaceId) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 _interfaceId) pure returns(bool) +func (_LegacyERC20ETH *LegacyERC20ETHCallerSession) SupportsInterface(_interfaceId [4]byte) (bool, error) { + return _LegacyERC20ETH.Contract.SupportsInterface(&_LegacyERC20ETH.CallOpts, _interfaceId) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_LegacyERC20ETH *LegacyERC20ETHCaller) Symbol(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _LegacyERC20ETH.contract.Call(opts, &out, "symbol") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_LegacyERC20ETH *LegacyERC20ETHSession) Symbol() (string, error) { + return _LegacyERC20ETH.Contract.Symbol(&_LegacyERC20ETH.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_LegacyERC20ETH *LegacyERC20ETHCallerSession) Symbol() (string, error) { + return _LegacyERC20ETH.Contract.Symbol(&_LegacyERC20ETH.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_LegacyERC20ETH *LegacyERC20ETHCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _LegacyERC20ETH.contract.Call(opts, &out, "totalSupply") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_LegacyERC20ETH *LegacyERC20ETHSession) TotalSupply() (*big.Int, error) { + return _LegacyERC20ETH.Contract.TotalSupply(&_LegacyERC20ETH.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_LegacyERC20ETH *LegacyERC20ETHCallerSession) TotalSupply() (*big.Int, error) { + return _LegacyERC20ETH.Contract.TotalSupply(&_LegacyERC20ETH.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_LegacyERC20ETH *LegacyERC20ETHCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _LegacyERC20ETH.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_LegacyERC20ETH *LegacyERC20ETHSession) Version() (string, error) { + return _LegacyERC20ETH.Contract.Version(&_LegacyERC20ETH.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_LegacyERC20ETH *LegacyERC20ETHCallerSession) Version() (string, error) { + return _LegacyERC20ETH.Contract.Version(&_LegacyERC20ETH.CallOpts) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address , uint256 ) returns(bool) +func (_LegacyERC20ETH *LegacyERC20ETHTransactor) Approve(opts *bind.TransactOpts, arg0 common.Address, arg1 *big.Int) (*types.Transaction, error) { + return _LegacyERC20ETH.contract.Transact(opts, "approve", arg0, arg1) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address , uint256 ) returns(bool) +func (_LegacyERC20ETH *LegacyERC20ETHSession) Approve(arg0 common.Address, arg1 *big.Int) (*types.Transaction, error) { + return _LegacyERC20ETH.Contract.Approve(&_LegacyERC20ETH.TransactOpts, arg0, arg1) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address , uint256 ) returns(bool) +func (_LegacyERC20ETH *LegacyERC20ETHTransactorSession) Approve(arg0 common.Address, arg1 *big.Int) (*types.Transaction, error) { + return _LegacyERC20ETH.Contract.Approve(&_LegacyERC20ETH.TransactOpts, arg0, arg1) +} + +// Burn is a paid mutator transaction binding the contract method 0x9dc29fac. +// +// Solidity: function burn(address , uint256 ) returns() +func (_LegacyERC20ETH *LegacyERC20ETHTransactor) Burn(opts *bind.TransactOpts, arg0 common.Address, arg1 *big.Int) (*types.Transaction, error) { + return _LegacyERC20ETH.contract.Transact(opts, "burn", arg0, arg1) +} + +// Burn is a paid mutator transaction binding the contract method 0x9dc29fac. +// +// Solidity: function burn(address , uint256 ) returns() +func (_LegacyERC20ETH *LegacyERC20ETHSession) Burn(arg0 common.Address, arg1 *big.Int) (*types.Transaction, error) { + return _LegacyERC20ETH.Contract.Burn(&_LegacyERC20ETH.TransactOpts, arg0, arg1) +} + +// Burn is a paid mutator transaction binding the contract method 0x9dc29fac. +// +// Solidity: function burn(address , uint256 ) returns() +func (_LegacyERC20ETH *LegacyERC20ETHTransactorSession) Burn(arg0 common.Address, arg1 *big.Int) (*types.Transaction, error) { + return _LegacyERC20ETH.Contract.Burn(&_LegacyERC20ETH.TransactOpts, arg0, arg1) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address , uint256 ) returns(bool) +func (_LegacyERC20ETH *LegacyERC20ETHTransactor) DecreaseAllowance(opts *bind.TransactOpts, arg0 common.Address, arg1 *big.Int) (*types.Transaction, error) { + return _LegacyERC20ETH.contract.Transact(opts, "decreaseAllowance", arg0, arg1) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address , uint256 ) returns(bool) +func (_LegacyERC20ETH *LegacyERC20ETHSession) DecreaseAllowance(arg0 common.Address, arg1 *big.Int) (*types.Transaction, error) { + return _LegacyERC20ETH.Contract.DecreaseAllowance(&_LegacyERC20ETH.TransactOpts, arg0, arg1) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address , uint256 ) returns(bool) +func (_LegacyERC20ETH *LegacyERC20ETHTransactorSession) DecreaseAllowance(arg0 common.Address, arg1 *big.Int) (*types.Transaction, error) { + return _LegacyERC20ETH.Contract.DecreaseAllowance(&_LegacyERC20ETH.TransactOpts, arg0, arg1) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address , uint256 ) returns(bool) +func (_LegacyERC20ETH *LegacyERC20ETHTransactor) IncreaseAllowance(opts *bind.TransactOpts, arg0 common.Address, arg1 *big.Int) (*types.Transaction, error) { + return _LegacyERC20ETH.contract.Transact(opts, "increaseAllowance", arg0, arg1) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address , uint256 ) returns(bool) +func (_LegacyERC20ETH *LegacyERC20ETHSession) IncreaseAllowance(arg0 common.Address, arg1 *big.Int) (*types.Transaction, error) { + return _LegacyERC20ETH.Contract.IncreaseAllowance(&_LegacyERC20ETH.TransactOpts, arg0, arg1) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address , uint256 ) returns(bool) +func (_LegacyERC20ETH *LegacyERC20ETHTransactorSession) IncreaseAllowance(arg0 common.Address, arg1 *big.Int) (*types.Transaction, error) { + return _LegacyERC20ETH.Contract.IncreaseAllowance(&_LegacyERC20ETH.TransactOpts, arg0, arg1) +} + +// Mint is a paid mutator transaction binding the contract method 0x40c10f19. +// +// Solidity: function mint(address , uint256 ) returns() +func (_LegacyERC20ETH *LegacyERC20ETHTransactor) Mint(opts *bind.TransactOpts, arg0 common.Address, arg1 *big.Int) (*types.Transaction, error) { + return _LegacyERC20ETH.contract.Transact(opts, "mint", arg0, arg1) +} + +// Mint is a paid mutator transaction binding the contract method 0x40c10f19. +// +// Solidity: function mint(address , uint256 ) returns() +func (_LegacyERC20ETH *LegacyERC20ETHSession) Mint(arg0 common.Address, arg1 *big.Int) (*types.Transaction, error) { + return _LegacyERC20ETH.Contract.Mint(&_LegacyERC20ETH.TransactOpts, arg0, arg1) +} + +// Mint is a paid mutator transaction binding the contract method 0x40c10f19. +// +// Solidity: function mint(address , uint256 ) returns() +func (_LegacyERC20ETH *LegacyERC20ETHTransactorSession) Mint(arg0 common.Address, arg1 *big.Int) (*types.Transaction, error) { + return _LegacyERC20ETH.Contract.Mint(&_LegacyERC20ETH.TransactOpts, arg0, arg1) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address , uint256 ) returns(bool) +func (_LegacyERC20ETH *LegacyERC20ETHTransactor) Transfer(opts *bind.TransactOpts, arg0 common.Address, arg1 *big.Int) (*types.Transaction, error) { + return _LegacyERC20ETH.contract.Transact(opts, "transfer", arg0, arg1) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address , uint256 ) returns(bool) +func (_LegacyERC20ETH *LegacyERC20ETHSession) Transfer(arg0 common.Address, arg1 *big.Int) (*types.Transaction, error) { + return _LegacyERC20ETH.Contract.Transfer(&_LegacyERC20ETH.TransactOpts, arg0, arg1) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address , uint256 ) returns(bool) +func (_LegacyERC20ETH *LegacyERC20ETHTransactorSession) Transfer(arg0 common.Address, arg1 *big.Int) (*types.Transaction, error) { + return _LegacyERC20ETH.Contract.Transfer(&_LegacyERC20ETH.TransactOpts, arg0, arg1) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address , address , uint256 ) returns(bool) +func (_LegacyERC20ETH *LegacyERC20ETHTransactor) TransferFrom(opts *bind.TransactOpts, arg0 common.Address, arg1 common.Address, arg2 *big.Int) (*types.Transaction, error) { + return _LegacyERC20ETH.contract.Transact(opts, "transferFrom", arg0, arg1, arg2) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address , address , uint256 ) returns(bool) +func (_LegacyERC20ETH *LegacyERC20ETHSession) TransferFrom(arg0 common.Address, arg1 common.Address, arg2 *big.Int) (*types.Transaction, error) { + return _LegacyERC20ETH.Contract.TransferFrom(&_LegacyERC20ETH.TransactOpts, arg0, arg1, arg2) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address , address , uint256 ) returns(bool) +func (_LegacyERC20ETH *LegacyERC20ETHTransactorSession) TransferFrom(arg0 common.Address, arg1 common.Address, arg2 *big.Int) (*types.Transaction, error) { + return _LegacyERC20ETH.Contract.TransferFrom(&_LegacyERC20ETH.TransactOpts, arg0, arg1, arg2) +} + +// LegacyERC20ETHApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the LegacyERC20ETH contract. +type LegacyERC20ETHApprovalIterator struct { + Event *LegacyERC20ETHApproval // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *LegacyERC20ETHApprovalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(LegacyERC20ETHApproval) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(LegacyERC20ETHApproval) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *LegacyERC20ETHApprovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *LegacyERC20ETHApprovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// LegacyERC20ETHApproval represents a Approval event raised by the LegacyERC20ETH contract. +type LegacyERC20ETHApproval struct { + Owner common.Address + Spender common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_LegacyERC20ETH *LegacyERC20ETHFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*LegacyERC20ETHApprovalIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _LegacyERC20ETH.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return &LegacyERC20ETHApprovalIterator{contract: _LegacyERC20ETH.contract, event: "Approval", logs: logs, sub: sub}, nil +} + +// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_LegacyERC20ETH *LegacyERC20ETHFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *LegacyERC20ETHApproval, owner []common.Address, spender []common.Address) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _LegacyERC20ETH.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(LegacyERC20ETHApproval) + if err := _LegacyERC20ETH.contract.UnpackLog(event, "Approval", 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 +} + +// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_LegacyERC20ETH *LegacyERC20ETHFilterer) ParseApproval(log types.Log) (*LegacyERC20ETHApproval, error) { + event := new(LegacyERC20ETHApproval) + if err := _LegacyERC20ETH.contract.UnpackLog(event, "Approval", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// LegacyERC20ETHBurnIterator is returned from FilterBurn and is used to iterate over the raw logs and unpacked data for Burn events raised by the LegacyERC20ETH contract. +type LegacyERC20ETHBurnIterator struct { + Event *LegacyERC20ETHBurn // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *LegacyERC20ETHBurnIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(LegacyERC20ETHBurn) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(LegacyERC20ETHBurn) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *LegacyERC20ETHBurnIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *LegacyERC20ETHBurnIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// LegacyERC20ETHBurn represents a Burn event raised by the LegacyERC20ETH contract. +type LegacyERC20ETHBurn struct { + Account common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterBurn is a free log retrieval operation binding the contract event 0xcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5. +// +// Solidity: event Burn(address indexed account, uint256 amount) +func (_LegacyERC20ETH *LegacyERC20ETHFilterer) FilterBurn(opts *bind.FilterOpts, account []common.Address) (*LegacyERC20ETHBurnIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _LegacyERC20ETH.contract.FilterLogs(opts, "Burn", accountRule) + if err != nil { + return nil, err + } + return &LegacyERC20ETHBurnIterator{contract: _LegacyERC20ETH.contract, event: "Burn", logs: logs, sub: sub}, nil +} + +// WatchBurn is a free log subscription operation binding the contract event 0xcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5. +// +// Solidity: event Burn(address indexed account, uint256 amount) +func (_LegacyERC20ETH *LegacyERC20ETHFilterer) WatchBurn(opts *bind.WatchOpts, sink chan<- *LegacyERC20ETHBurn, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _LegacyERC20ETH.contract.WatchLogs(opts, "Burn", accountRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(LegacyERC20ETHBurn) + if err := _LegacyERC20ETH.contract.UnpackLog(event, "Burn", 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 +} + +// ParseBurn is a log parse operation binding the contract event 0xcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5. +// +// Solidity: event Burn(address indexed account, uint256 amount) +func (_LegacyERC20ETH *LegacyERC20ETHFilterer) ParseBurn(log types.Log) (*LegacyERC20ETHBurn, error) { + event := new(LegacyERC20ETHBurn) + if err := _LegacyERC20ETH.contract.UnpackLog(event, "Burn", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// LegacyERC20ETHMintIterator is returned from FilterMint and is used to iterate over the raw logs and unpacked data for Mint events raised by the LegacyERC20ETH contract. +type LegacyERC20ETHMintIterator struct { + Event *LegacyERC20ETHMint // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *LegacyERC20ETHMintIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(LegacyERC20ETHMint) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(LegacyERC20ETHMint) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *LegacyERC20ETHMintIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *LegacyERC20ETHMintIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// LegacyERC20ETHMint represents a Mint event raised by the LegacyERC20ETH contract. +type LegacyERC20ETHMint struct { + Account common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMint is a free log retrieval operation binding the contract event 0x0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885. +// +// Solidity: event Mint(address indexed account, uint256 amount) +func (_LegacyERC20ETH *LegacyERC20ETHFilterer) FilterMint(opts *bind.FilterOpts, account []common.Address) (*LegacyERC20ETHMintIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _LegacyERC20ETH.contract.FilterLogs(opts, "Mint", accountRule) + if err != nil { + return nil, err + } + return &LegacyERC20ETHMintIterator{contract: _LegacyERC20ETH.contract, event: "Mint", logs: logs, sub: sub}, nil +} + +// WatchMint is a free log subscription operation binding the contract event 0x0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885. +// +// Solidity: event Mint(address indexed account, uint256 amount) +func (_LegacyERC20ETH *LegacyERC20ETHFilterer) WatchMint(opts *bind.WatchOpts, sink chan<- *LegacyERC20ETHMint, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _LegacyERC20ETH.contract.WatchLogs(opts, "Mint", accountRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(LegacyERC20ETHMint) + if err := _LegacyERC20ETH.contract.UnpackLog(event, "Mint", 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 +} + +// ParseMint is a log parse operation binding the contract event 0x0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885. +// +// Solidity: event Mint(address indexed account, uint256 amount) +func (_LegacyERC20ETH *LegacyERC20ETHFilterer) ParseMint(log types.Log) (*LegacyERC20ETHMint, error) { + event := new(LegacyERC20ETHMint) + if err := _LegacyERC20ETH.contract.UnpackLog(event, "Mint", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// LegacyERC20ETHTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the LegacyERC20ETH contract. +type LegacyERC20ETHTransferIterator struct { + Event *LegacyERC20ETHTransfer // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *LegacyERC20ETHTransferIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(LegacyERC20ETHTransfer) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(LegacyERC20ETHTransfer) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *LegacyERC20ETHTransferIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *LegacyERC20ETHTransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// LegacyERC20ETHTransfer represents a Transfer event raised by the LegacyERC20ETH contract. +type LegacyERC20ETHTransfer struct { + From common.Address + To common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_LegacyERC20ETH *LegacyERC20ETHFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*LegacyERC20ETHTransferIterator, 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 := _LegacyERC20ETH.contract.FilterLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return &LegacyERC20ETHTransferIterator{contract: _LegacyERC20ETH.contract, event: "Transfer", logs: logs, sub: sub}, nil +} + +// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_LegacyERC20ETH *LegacyERC20ETHFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *LegacyERC20ETHTransfer, 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 := _LegacyERC20ETH.contract.WatchLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(LegacyERC20ETHTransfer) + if err := _LegacyERC20ETH.contract.UnpackLog(event, "Transfer", 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 +} + +// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_LegacyERC20ETH *LegacyERC20ETHFilterer) ParseTransfer(log types.Log) (*LegacyERC20ETHTransfer, error) { + event := new(LegacyERC20ETHTransfer) + if err := _LegacyERC20ETH.contract.UnpackLog(event, "Transfer", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-bindings/bindings/legacyerc20eth_more.go b/op-bindings/bindings/legacyerc20eth_more.go new file mode 100644 index 000000000..cb79ddddc --- /dev/null +++ b/op-bindings/bindings/legacyerc20eth_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const LegacyERC20ETHStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/legacy/LegacyERC20ETH.sol:LegacyERC20ETH\",\"label\":\"_balances\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_mapping(t_address,t_uint256)\"},{\"astId\":1001,\"contract\":\"src/legacy/LegacyERC20ETH.sol:LegacyERC20ETH\",\"label\":\"_allowances\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_mapping(t_address,t_mapping(t_address,t_uint256))\"},{\"astId\":1002,\"contract\":\"src/legacy/LegacyERC20ETH.sol:LegacyERC20ETH\",\"label\":\"_totalSupply\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_uint256\"},{\"astId\":1003,\"contract\":\"src/legacy/LegacyERC20ETH.sol:LegacyERC20ETH\",\"label\":\"_name\",\"offset\":0,\"slot\":\"3\",\"type\":\"t_string_storage\"},{\"astId\":1004,\"contract\":\"src/legacy/LegacyERC20ETH.sol:LegacyERC20ETH\",\"label\":\"_symbol\",\"offset\":0,\"slot\":\"4\",\"type\":\"t_string_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_mapping(t_address,t_mapping(t_address,t_uint256))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(address =\u003e uint256))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_address,t_uint256)\"},\"t_mapping(t_address,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint256\"},\"t_string_storage\":{\"encoding\":\"bytes\",\"label\":\"string\",\"numberOfBytes\":\"32\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"}}}" + +var LegacyERC20ETHStorageLayout = new(solc.StorageLayout) + +var LegacyERC20ETHDeployedBin = "0x608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063ae1f6aaf1161008c578063dd62ed3e11610066578063dd62ed3e14610353578063e78cea9214610307578063ee9a31a21461039957600080fd5b8063ae1f6aaf14610307578063c01e1bd61461032d578063d6c0b2c41461032d57600080fd5b80639dc29fac116100bd5780639dc29fac146102ce578063a457c2d7146102e1578063a9059cbb146102f457600080fd5b806370a082311461029e57806395d89b41146102c657600080fd5b806323b872dd1161012f5780633950935111610114578063395093511461026e57806340c10f191461028157806354fd4d501461029657600080fd5b806323b872dd1461022a578063313ce5671461023d57600080fd5b806306fdde031161016057806306fdde03146101f0578063095ea7b31461020557806318160ddd1461021857600080fd5b806301ffc9a71461017c578063033964be146101a4575b600080fd5b61018f61018a366004610ab1565b6103c0565b60405190151581526020015b60405180910390f35b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f86104b1565b60405161019b9190610b2a565b61018f610213366004610ba4565b610543565b6002545b60405190815260200161019b565b61018f610238366004610bce565b6105d3565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161019b565b61018f61027c366004610ba4565b61065e565b61029461028f366004610ba4565b6106e9565b005b6101f861074b565b61021c6102ac366004610c0a565b73ffffffffffffffffffffffffffffffffffffffff163190565b6101f86107ee565b6102946102dc366004610ba4565b6107fd565b61018f6102ef366004610ba4565b61085f565b61018f610302366004610ba4565b6108ea565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b61021c610361366004610c25565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007f1d1d8b63000000000000000000000000000000000000000000000000000000007fec4fc8e3000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000851683148061047957507fffffffff00000000000000000000000000000000000000000000000000000000858116908316145b806104a857507fffffffff00000000000000000000000000000000000000000000000000000000858116908216145b95945050505050565b6060600380546104c090610c58565b80601f01602080910402602001604051908101604052809291908181526020018280546104ec90610c58565b80156105395780601f1061050e57610100808354040283529160200191610539565b820191906000526020600020905b81548152906001019060200180831161051c57829003601f168201915b5050505050905090565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4c656761637945524332304554483a20617070726f766520697320646973616260448201527f6c6564000000000000000000000000000000000000000000000000000000000060648201526000906084015b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4c656761637945524332304554483a207472616e7366657246726f6d2069732060448201527f64697361626c656400000000000000000000000000000000000000000000000060648201526000906084016105ca565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4c656761637945524332304554483a20696e637265617365416c6c6f77616e6360448201527f652069732064697361626c65640000000000000000000000000000000000000060648201526000906084016105ca565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4c656761637945524332304554483a206d696e742069732064697361626c656460448201526064016105ca565b60606107767f0000000000000000000000000000000000000000000000000000000000000000610974565b61079f7f0000000000000000000000000000000000000000000000000000000000000000610974565b6107c87f0000000000000000000000000000000000000000000000000000000000000000610974565b6040516020016107da93929190610cab565b604051602081830303815290604052905090565b6060600480546104c090610c58565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4c656761637945524332304554483a206275726e2069732064697361626c656460448201526064016105ca565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4c656761637945524332304554483a206465637265617365416c6c6f77616e6360448201527f652069732064697361626c65640000000000000000000000000000000000000060648201526000906084016105ca565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4c656761637945524332304554483a207472616e73666572206973206469736160448201527f626c65640000000000000000000000000000000000000000000000000000000060648201526000906084016105ca565b6060816000036109b757505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156109e157806109cb81610d50565b91506109da9050600a83610db7565b91506109bb565b60008167ffffffffffffffff8111156109fc576109fc610dcb565b6040519080825280601f01601f191660200182016040528015610a26576020820181803683370190505b5090505b8415610aa957610a3b600183610dfa565b9150610a48600a86610e11565b610a53906030610e25565b60f81b818381518110610a6857610a68610e3d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610aa2600a86610db7565b9450610a2a565b949350505050565b600060208284031215610ac357600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610af357600080fd5b9392505050565b60005b83811015610b15578181015183820152602001610afd565b83811115610b24576000848401525b50505050565b6020815260008251806020840152610b49816040850160208701610afa565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b9f57600080fd5b919050565b60008060408385031215610bb757600080fd5b610bc083610b7b565b946020939093013593505050565b600080600060608486031215610be357600080fd5b610bec84610b7b565b9250610bfa60208501610b7b565b9150604084013590509250925092565b600060208284031215610c1c57600080fd5b610af382610b7b565b60008060408385031215610c3857600080fd5b610c4183610b7b565b9150610c4f60208401610b7b565b90509250929050565b600181811c90821680610c6c57607f821691505b602082108103610ca5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008451610cbd818460208901610afa565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610cf9816001850160208a01610afa565b60019201918201528351610d14816002840160208801610afa565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610d8157610d81610d21565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082610dc657610dc6610d88565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082821015610e0c57610e0c610d21565b500390565b600082610e2057610e20610d88565b500690565b60008219821115610e3857610e38610d21565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(LegacyERC20ETHStorageLayoutJSON), LegacyERC20ETHStorageLayout); err != nil { + panic(err) + } + + layouts["LegacyERC20ETH"] = LegacyERC20ETHStorageLayout + deployedBytecodes["LegacyERC20ETH"] = LegacyERC20ETHDeployedBin +} diff --git a/op-bindings/bindings/legacymessagepasser.go b/op-bindings/bindings/legacymessagepasser.go new file mode 100644 index 000000000..2fd2c82c7 --- /dev/null +++ b/op-bindings/bindings/legacymessagepasser.go @@ -0,0 +1,285 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// LegacyMessagePasserMetaData contains all meta data concerning the LegacyMessagePasser contract. +var LegacyMessagePasserMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"passMessageToL1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"sentMessages\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b5061035a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806382e3702d14610098578063cafa81dc146100cb575b600080fd5b6100826040518060400160405280600581526020017f312e312e3000000000000000000000000000000000000000000000000000000081525081565b60405161008f919061019b565b60405180910390f35b6100bb6100a63660046101ec565b60006020819052908152604090205460ff1681565b604051901515815260200161008f565b6100de6100d9366004610234565b6100e0565b005b600160008083336040516020016100f8929190610303565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301208352908201929092520160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905550565b60005b8381101561018657818101518382015260200161016e565b83811115610195576000848401525b50505050565b60208152600082518060208401526101ba81604085016020870161016b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000602082840312156101fe57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561024657600080fd5b813567ffffffffffffffff8082111561025e57600080fd5b818401915084601f83011261027257600080fd5b81358181111561028457610284610205565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156102ca576102ca610205565b816040528281528760208487010111156102e357600080fd5b826020860160208301376000928101602001929092525095945050505050565b6000835161031581846020880161016b565b60609390931b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016919092019081526014019291505056fea164736f6c634300080f000a", +} + +// LegacyMessagePasserABI is the input ABI used to generate the binding from. +// Deprecated: Use LegacyMessagePasserMetaData.ABI instead. +var LegacyMessagePasserABI = LegacyMessagePasserMetaData.ABI + +// LegacyMessagePasserBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use LegacyMessagePasserMetaData.Bin instead. +var LegacyMessagePasserBin = LegacyMessagePasserMetaData.Bin + +// DeployLegacyMessagePasser deploys a new Ethereum contract, binding an instance of LegacyMessagePasser to it. +func DeployLegacyMessagePasser(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *LegacyMessagePasser, error) { + parsed, err := LegacyMessagePasserMetaData.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(LegacyMessagePasserBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &LegacyMessagePasser{LegacyMessagePasserCaller: LegacyMessagePasserCaller{contract: contract}, LegacyMessagePasserTransactor: LegacyMessagePasserTransactor{contract: contract}, LegacyMessagePasserFilterer: LegacyMessagePasserFilterer{contract: contract}}, nil +} + +// LegacyMessagePasser is an auto generated Go binding around an Ethereum contract. +type LegacyMessagePasser struct { + LegacyMessagePasserCaller // Read-only binding to the contract + LegacyMessagePasserTransactor // Write-only binding to the contract + LegacyMessagePasserFilterer // Log filterer for contract events +} + +// LegacyMessagePasserCaller is an auto generated read-only Go binding around an Ethereum contract. +type LegacyMessagePasserCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// LegacyMessagePasserTransactor is an auto generated write-only Go binding around an Ethereum contract. +type LegacyMessagePasserTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// LegacyMessagePasserFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type LegacyMessagePasserFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// LegacyMessagePasserSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type LegacyMessagePasserSession struct { + Contract *LegacyMessagePasser // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// LegacyMessagePasserCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type LegacyMessagePasserCallerSession struct { + Contract *LegacyMessagePasserCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// LegacyMessagePasserTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type LegacyMessagePasserTransactorSession struct { + Contract *LegacyMessagePasserTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// LegacyMessagePasserRaw is an auto generated low-level Go binding around an Ethereum contract. +type LegacyMessagePasserRaw struct { + Contract *LegacyMessagePasser // Generic contract binding to access the raw methods on +} + +// LegacyMessagePasserCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type LegacyMessagePasserCallerRaw struct { + Contract *LegacyMessagePasserCaller // Generic read-only contract binding to access the raw methods on +} + +// LegacyMessagePasserTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type LegacyMessagePasserTransactorRaw struct { + Contract *LegacyMessagePasserTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewLegacyMessagePasser creates a new instance of LegacyMessagePasser, bound to a specific deployed contract. +func NewLegacyMessagePasser(address common.Address, backend bind.ContractBackend) (*LegacyMessagePasser, error) { + contract, err := bindLegacyMessagePasser(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &LegacyMessagePasser{LegacyMessagePasserCaller: LegacyMessagePasserCaller{contract: contract}, LegacyMessagePasserTransactor: LegacyMessagePasserTransactor{contract: contract}, LegacyMessagePasserFilterer: LegacyMessagePasserFilterer{contract: contract}}, nil +} + +// NewLegacyMessagePasserCaller creates a new read-only instance of LegacyMessagePasser, bound to a specific deployed contract. +func NewLegacyMessagePasserCaller(address common.Address, caller bind.ContractCaller) (*LegacyMessagePasserCaller, error) { + contract, err := bindLegacyMessagePasser(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &LegacyMessagePasserCaller{contract: contract}, nil +} + +// NewLegacyMessagePasserTransactor creates a new write-only instance of LegacyMessagePasser, bound to a specific deployed contract. +func NewLegacyMessagePasserTransactor(address common.Address, transactor bind.ContractTransactor) (*LegacyMessagePasserTransactor, error) { + contract, err := bindLegacyMessagePasser(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &LegacyMessagePasserTransactor{contract: contract}, nil +} + +// NewLegacyMessagePasserFilterer creates a new log filterer instance of LegacyMessagePasser, bound to a specific deployed contract. +func NewLegacyMessagePasserFilterer(address common.Address, filterer bind.ContractFilterer) (*LegacyMessagePasserFilterer, error) { + contract, err := bindLegacyMessagePasser(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &LegacyMessagePasserFilterer{contract: contract}, nil +} + +// bindLegacyMessagePasser binds a generic wrapper to an already deployed contract. +func bindLegacyMessagePasser(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(LegacyMessagePasserABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_LegacyMessagePasser *LegacyMessagePasserRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _LegacyMessagePasser.Contract.LegacyMessagePasserCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_LegacyMessagePasser *LegacyMessagePasserRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _LegacyMessagePasser.Contract.LegacyMessagePasserTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_LegacyMessagePasser *LegacyMessagePasserRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _LegacyMessagePasser.Contract.LegacyMessagePasserTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_LegacyMessagePasser *LegacyMessagePasserCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _LegacyMessagePasser.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_LegacyMessagePasser *LegacyMessagePasserTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _LegacyMessagePasser.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_LegacyMessagePasser *LegacyMessagePasserTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _LegacyMessagePasser.Contract.contract.Transact(opts, method, params...) +} + +// SentMessages is a free data retrieval call binding the contract method 0x82e3702d. +// +// Solidity: function sentMessages(bytes32 ) view returns(bool) +func (_LegacyMessagePasser *LegacyMessagePasserCaller) SentMessages(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { + var out []interface{} + err := _LegacyMessagePasser.contract.Call(opts, &out, "sentMessages", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// SentMessages is a free data retrieval call binding the contract method 0x82e3702d. +// +// Solidity: function sentMessages(bytes32 ) view returns(bool) +func (_LegacyMessagePasser *LegacyMessagePasserSession) SentMessages(arg0 [32]byte) (bool, error) { + return _LegacyMessagePasser.Contract.SentMessages(&_LegacyMessagePasser.CallOpts, arg0) +} + +// SentMessages is a free data retrieval call binding the contract method 0x82e3702d. +// +// Solidity: function sentMessages(bytes32 ) view returns(bool) +func (_LegacyMessagePasser *LegacyMessagePasserCallerSession) SentMessages(arg0 [32]byte) (bool, error) { + return _LegacyMessagePasser.Contract.SentMessages(&_LegacyMessagePasser.CallOpts, arg0) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_LegacyMessagePasser *LegacyMessagePasserCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _LegacyMessagePasser.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_LegacyMessagePasser *LegacyMessagePasserSession) Version() (string, error) { + return _LegacyMessagePasser.Contract.Version(&_LegacyMessagePasser.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_LegacyMessagePasser *LegacyMessagePasserCallerSession) Version() (string, error) { + return _LegacyMessagePasser.Contract.Version(&_LegacyMessagePasser.CallOpts) +} + +// PassMessageToL1 is a paid mutator transaction binding the contract method 0xcafa81dc. +// +// Solidity: function passMessageToL1(bytes _message) returns() +func (_LegacyMessagePasser *LegacyMessagePasserTransactor) PassMessageToL1(opts *bind.TransactOpts, _message []byte) (*types.Transaction, error) { + return _LegacyMessagePasser.contract.Transact(opts, "passMessageToL1", _message) +} + +// PassMessageToL1 is a paid mutator transaction binding the contract method 0xcafa81dc. +// +// Solidity: function passMessageToL1(bytes _message) returns() +func (_LegacyMessagePasser *LegacyMessagePasserSession) PassMessageToL1(_message []byte) (*types.Transaction, error) { + return _LegacyMessagePasser.Contract.PassMessageToL1(&_LegacyMessagePasser.TransactOpts, _message) +} + +// PassMessageToL1 is a paid mutator transaction binding the contract method 0xcafa81dc. +// +// Solidity: function passMessageToL1(bytes _message) returns() +func (_LegacyMessagePasser *LegacyMessagePasserTransactorSession) PassMessageToL1(_message []byte) (*types.Transaction, error) { + return _LegacyMessagePasser.Contract.PassMessageToL1(&_LegacyMessagePasser.TransactOpts, _message) +} diff --git a/op-bindings/bindings/legacymessagepasser_more.go b/op-bindings/bindings/legacymessagepasser_more.go new file mode 100644 index 000000000..eea91eb9e --- /dev/null +++ b/op-bindings/bindings/legacymessagepasser_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const LegacyMessagePasserStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/legacy/LegacyMessagePasser.sol:LegacyMessagePasser\",\"label\":\"sentMessages\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_mapping(t_bytes32,t_bool)\"}],\"types\":{\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_bytes32,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_bool\"}}}" + +var LegacyMessagePasserStorageLayout = new(solc.StorageLayout) + +var LegacyMessagePasserDeployedBin = "0x608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806382e3702d14610098578063cafa81dc146100cb575b600080fd5b6100826040518060400160405280600581526020017f312e312e3000000000000000000000000000000000000000000000000000000081525081565b60405161008f919061019b565b60405180910390f35b6100bb6100a63660046101ec565b60006020819052908152604090205460ff1681565b604051901515815260200161008f565b6100de6100d9366004610234565b6100e0565b005b600160008083336040516020016100f8929190610303565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301208352908201929092520160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905550565b60005b8381101561018657818101518382015260200161016e565b83811115610195576000848401525b50505050565b60208152600082518060208401526101ba81604085016020870161016b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000602082840312156101fe57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561024657600080fd5b813567ffffffffffffffff8082111561025e57600080fd5b818401915084601f83011261027257600080fd5b81358181111561028457610284610205565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156102ca576102ca610205565b816040528281528760208487010111156102e357600080fd5b826020860160208301376000928101602001929092525095945050505050565b6000835161031581846020880161016b565b60609390931b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016919092019081526014019291505056fea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(LegacyMessagePasserStorageLayoutJSON), LegacyMessagePasserStorageLayout); err != nil { + panic(err) + } + + layouts["LegacyMessagePasser"] = LegacyMessagePasserStorageLayout + deployedBytecodes["LegacyMessagePasser"] = LegacyMessagePasserDeployedBin +} diff --git a/op-bindings/bindings/mips.go b/op-bindings/bindings/mips.go new file mode 100644 index 000000000..cba792eb6 --- /dev/null +++ b/op-bindings/bindings/mips.go @@ -0,0 +1,285 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// MIPSMetaData contains all meta data concerning the MIPS contract. +var MIPSMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"contractIPreimageOracle\",\"name\":\"_oracle\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BRK_START\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oracle\",\"outputs\":[{\"internalType\":\"contractIPreimageOracle\",\"name\":\"oracle_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"stateData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"step\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60a060405234801561001057600080fd5b50604051611eb2380380611eb283398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051611e2161009160003960008181608501526115e70152611e216000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063155633fe146100465780637dc0d1d01461006b578063f8e0cb96146100af575b600080fd5b610051634000000081565b60405163ffffffff90911681526020015b60405180910390f35b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610062565b6100c26100bd366004611d26565b6100d0565b604051908152602001610062565b60006100da611c53565b608081146100e757600080fd5b604051610600146100f757600080fd5b6064861461010457600080fd5b610184841461011257600080fd5b8535608052602086013560a052604086013560e090811c60c09081526044880135821c82526048880135821c61010052604c880135821c610120526050880135821c61014052605488013590911c61016052605887013560f890811c610180526059880135901c6101a052605a870135901c6101c0526102006101e0819052606287019060005b60208110156101bd57823560e01c8252600490920191602090910190600101610199565b505050806101200151156101db576101d3610619565b915050610611565b6101408101805160010167ffffffffffffffff16905260608101516000906102039082610735565b9050603f601a82901c16600281148061022257508063ffffffff166003145b156102775760006002836303ffffff1663ffffffff16901b846080015163f00000001617905061026c8263ffffffff1660021461026057601f610263565b60005b60ff16826107f1565b945050505050610611565b6101608301516000908190601f601086901c81169190601587901c16602081106102a3576102a3611d92565b602002015192508063ffffffff851615806102c457508463ffffffff16601c145b156102fb578661016001518263ffffffff16602081106102e6576102e6611d92565b6020020151925050601f600b86901c166103b7565b60208563ffffffff16101561035d578463ffffffff16600c148061032557508463ffffffff16600d145b8061033657508463ffffffff16600e145b15610347578561ffff1692506103b7565b6103568661ffff1660106108eb565b92506103b7565b60288563ffffffff1610158061037957508463ffffffff166022145b8061038a57508463ffffffff166026145b156103b7578661016001518263ffffffff16602081106103ac576103ac611d92565b602002015192508190505b60048563ffffffff16101580156103d4575060088563ffffffff16105b806103e557508463ffffffff166001145b15610404576103f68587848761095e565b975050505050505050610611565b63ffffffff6000602087831610610469576104248861ffff1660106108eb565b9095019463fffffffc861661043a816001610735565b915060288863ffffffff161015801561045a57508763ffffffff16603014155b1561046757809250600093505b505b600061047789888885610b6e565b63ffffffff9081169150603f8a1690891615801561049c575060088163ffffffff1610155b80156104ae5750601c8163ffffffff16105b1561058a578063ffffffff16600814806104ce57508063ffffffff166009145b15610505576104f38163ffffffff166008146104ea57856104ed565b60005b896107f1565b9b505050505050505050505050610611565b8063ffffffff16600a03610525576104f3858963ffffffff8a16156112f2565b8063ffffffff16600b03610546576104f3858963ffffffff8a1615156112f2565b8063ffffffff16600c0361055c576104f36113d8565b60108163ffffffff16101580156105795750601c8163ffffffff16105b1561058a576104f38189898861190c565b8863ffffffff1660381480156105a5575063ffffffff861615155b156105da5760018b61016001518763ffffffff16602081106105c9576105c9611d92565b63ffffffff90921660209290920201525b8363ffffffff1663ffffffff146105f7576105f784600184611b06565b610603858360016112f2565b9b5050505050505050505050505b949350505050565b60408051608051815260a051602082015260dc519181019190915260fc51604482015261011c51604882015261013c51604c82015261015c51605082015261017c5160548201526101805161019f5160588301526101a0516101bf5160598401526101d851605a840152600092610200929091606283019190855b60208110156106b857601c8601518452602090950194600490930192600101610694565b506000835283830384a06000945080600181146106d85760039550610700565b8280156106f057600181146106f957600296506106fe565b600096506106fe565b600196505b505b50505081900390207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660f89190911b17919050565b60008061074183611baa565b9050600384161561075157600080fd5b6020810190358460051c8160005b601b8110156107b75760208501943583821c6001168015610787576001811461079c576107ad565b600084815260208390526040902093506107ad565b600082815260208590526040902093505b505060010161075f565b5060805191508181146107d257630badf00d60005260206000fd5b5050601f94909416601c0360031b9390931c63ffffffff169392505050565b60006107fb611c53565b60809050806060015160040163ffffffff16816080015163ffffffff1614610884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6a756d7020696e2064656c617920736c6f74000000000000000000000000000060448201526064015b60405180910390fd5b60608101805160808301805163ffffffff9081169093528583169052908516156108da57806008018261016001518663ffffffff16602081106108c9576108c9611d92565b63ffffffff90921660209290920201525b6108e2610619565b95945050505050565b600063ffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80850183169190911c821615159160016020869003821681901b830191861691821b92911b018261094857600061094a565b815b90861663ffffffff16179250505092915050565b6000610968611c53565b608090506000816060015160040163ffffffff16826080015163ffffffff16146109ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6272616e636820696e2064656c617920736c6f74000000000000000000000000604482015260640161087b565b8663ffffffff1660041480610a0957508663ffffffff166005145b15610a855760008261016001518663ffffffff1660208110610a2d57610a2d611d92565b602002015190508063ffffffff168563ffffffff16148015610a5557508763ffffffff166004145b80610a7d57508063ffffffff168563ffffffff1614158015610a7d57508763ffffffff166005145b915050610b02565b8663ffffffff16600603610aa25760008460030b13159050610b02565b8663ffffffff16600703610abe5760008460030b139050610b02565b8663ffffffff16600103610b0257601f601087901c166000819003610ae75760008560030b1291505b8063ffffffff16600103610b005760008560030b121591505b505b606082018051608084015163ffffffff169091528115610b48576002610b2d8861ffff1660106108eb565b63ffffffff90811690911b8201600401166080840152610b5a565b60808301805160040163ffffffff1690525b610b62610619565b98975050505050505050565b6000603f601a86901c16801580610b9d575060088163ffffffff1610158015610b9d5750600f8163ffffffff16105b15610ff357603f86168160088114610be45760098114610bed57600a8114610bf657600b8114610bff57600c8114610c0857600d8114610c1157600e8114610c1a57610c1f565b60209150610c1f565b60219150610c1f565b602a9150610c1f565b602b9150610c1f565b60249150610c1f565b60259150610c1f565b602691505b508063ffffffff16600003610c465750505063ffffffff8216601f600686901c161b610611565b8063ffffffff16600203610c6c5750505063ffffffff8216601f600686901c161c610611565b8063ffffffff16600303610ca257601f600688901c16610c9863ffffffff8716821c60208390036108eb565b9350505050610611565b8063ffffffff16600403610cc45750505063ffffffff8216601f84161b610611565b8063ffffffff16600603610ce65750505063ffffffff8216601f84161c610611565b8063ffffffff16600703610d1957610d108663ffffffff168663ffffffff16901c876020036108eb565b92505050610611565b8063ffffffff16600803610d31578592505050610611565b8063ffffffff16600903610d49578592505050610611565b8063ffffffff16600a03610d61578592505050610611565b8063ffffffff16600b03610d79578592505050610611565b8063ffffffff16600c03610d91578592505050610611565b8063ffffffff16600f03610da9578592505050610611565b8063ffffffff16601003610dc1578592505050610611565b8063ffffffff16601103610dd9578592505050610611565b8063ffffffff16601203610df1578592505050610611565b8063ffffffff16601303610e09578592505050610611565b8063ffffffff16601803610e21578592505050610611565b8063ffffffff16601903610e39578592505050610611565b8063ffffffff16601a03610e51578592505050610611565b8063ffffffff16601b03610e69578592505050610611565b8063ffffffff16602003610e8257505050828201610611565b8063ffffffff16602103610e9b57505050828201610611565b8063ffffffff16602203610eb457505050818303610611565b8063ffffffff16602303610ecd57505050818303610611565b8063ffffffff16602403610ee657505050828216610611565b8063ffffffff16602503610eff57505050828217610611565b8063ffffffff16602603610f1857505050828218610611565b8063ffffffff16602703610f325750505082821719610611565b8063ffffffff16602a03610f63578460030b8660030b12610f54576000610f57565b60015b60ff1692505050610611565b8063ffffffff16602b03610f8b578463ffffffff168663ffffffff1610610f54576000610f57565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420696e737472756374696f6e00000000000000000000000000604482015260640161087b565b50610f8b565b8063ffffffff16601c0361107757603f8616600281900361101957505050828202610611565b8063ffffffff166020148061103457508063ffffffff166021145b15610fed578063ffffffff1660200361104b579419945b60005b638000000087161561106d576401fffffffe600197881b16960161104e565b9250610611915050565b8063ffffffff16600f0361109957505065ffffffff0000601083901b16610611565b8063ffffffff166020036110cd576101d38560031660080260180363ffffffff168463ffffffff16901c60ff1660086108eb565b8063ffffffff16602103611102576101d38560021660080260100363ffffffff168463ffffffff16901c61ffff1660106108eb565b8063ffffffff1660220361113157505063ffffffff60086003851602811681811b198416918316901b17610611565b8063ffffffff166023036111485782915050610611565b8063ffffffff1660240361117a578460031660080260180363ffffffff168363ffffffff16901c60ff16915050610611565b8063ffffffff166025036111ad578460021660080260100363ffffffff168363ffffffff16901c61ffff16915050610611565b8063ffffffff166026036111df57505063ffffffff60086003851602601803811681811c198416918316901c17610611565b8063ffffffff1660280361121557505060ff63ffffffff60086003861602601803811682811b9091188316918416901b17610611565b8063ffffffff1660290361124c57505061ffff63ffffffff60086002861602601003811682811b9091188316918416901b17610611565b8063ffffffff16602a0361127b57505063ffffffff60086003851602811681811c198316918416901c17610611565b8063ffffffff16602b036112925783915050610611565b8063ffffffff16602e036112c457505063ffffffff60086003851602601803811681811b198316918416901b17610611565b8063ffffffff166030036112db5782915050610611565b8063ffffffff16603803610f8b5783915050610611565b60006112fc611c53565b506080602063ffffffff86161061136f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f76616c6964207265676973746572000000000000000000000000000000000000604482015260640161087b565b63ffffffff8516158015906113815750825b156113b557838161016001518663ffffffff16602081106113a4576113a4611d92565b63ffffffff90921660209290920201525b60808101805163ffffffff808216606085015260049091011690526108e2610619565b60006113e2611c53565b506101e051604081015160808083015160a084015160c09094015191936000928392919063ffffffff8616610ffa0361145c5781610fff81161561142b57610fff811661100003015b8363ffffffff166000036114525760e08801805163ffffffff838201169091529550611456565b8395505b506118cb565b8563ffffffff16610fcd0361147757634000000094506118cb565b8563ffffffff166110180361148f57600194506118cb565b8563ffffffff16611096036114c457600161012088015260ff83166101008801526114b8610619565b97505050505050505090565b8563ffffffff16610fa30361172e5763ffffffff8316156118cb577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb63ffffffff8416016116e857600061151f8363fffffffc166001610735565b60208901519091508060001a60010361158c5761158981600090815233602052604090207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b90505b6040808a015190517fe03110e10000000000000000000000000000000000000000000000000000000081526004810183905263ffffffff9091166024820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e03110e1906044016040805180830381865afa15801561162d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116519190611dc1565b91509150600386168060040382811015611669578092505b5081861015611676578591505b8260088302610100031c9250826008828460040303021b9250600180600883600403021b036001806008858560040303021b039150811981169050838119871617955050506116cd8663fffffffc16600186611b06565b60408b018051820163ffffffff169052975061172992505050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd63ffffffff84160161171d578094506118cb565b63ffffffff9450600993505b6118cb565b8563ffffffff16610fa40361181f5763ffffffff831660011480611758575063ffffffff83166002145b80611769575063ffffffff83166004145b15611776578094506118cb565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63ffffffff84160161171d5760006117b68363fffffffc166001610735565b602089015190915060038416600403838110156117d1578093505b83900360089081029290921c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600193850293841b0116911b176020880152600060408801529350836118cb565b8563ffffffff16610fd7036118cb578163ffffffff166003036118bf5763ffffffff83161580611855575063ffffffff83166005145b80611866575063ffffffff83166003145b1561187457600094506118cb565b63ffffffff83166001148061188f575063ffffffff83166002145b806118a0575063ffffffff83166006145b806118b1575063ffffffff83166004145b1561171d57600194506118cb565b63ffffffff9450601693505b6101608701805163ffffffff808816604090920191909152905185821660e09091015260808801805180831660608b015260040190911690526114b8610619565b6000611916611c53565b506080600063ffffffff8716601003611934575060c0810151611a9d565b8663ffffffff166011036119535763ffffffff861660c0830152611a9d565b8663ffffffff1660120361196c575060a0810151611a9d565b8663ffffffff1660130361198b5763ffffffff861660a0830152611a9d565b8663ffffffff166018036119bf5763ffffffff600387810b9087900b02602081901c821660c08501521660a0830152611a9d565b8663ffffffff166019036119f05763ffffffff86811681871602602081901c821660c08501521660a0830152611a9d565b8663ffffffff16601a03611a46578460030b8660030b81611a1357611a13611de5565b0763ffffffff1660c0830152600385810b9087900b81611a3557611a35611de5565b0563ffffffff1660a0830152611a9d565b8663ffffffff16601b03611a9d578463ffffffff168663ffffffff1681611a6f57611a6f611de5565b0663ffffffff90811660c084015285811690871681611a9057611a90611de5565b0463ffffffff1660a08301525b63ffffffff841615611ad857808261016001518563ffffffff1660208110611ac757611ac7611d92565b63ffffffff90921660209290920201525b60808201805163ffffffff80821660608601526004909101169052611afb610619565b979650505050505050565b6000611b1183611baa565b90506003841615611b2157600080fd5b6020810190601f8516601c0360031b83811b913563ffffffff90911b1916178460051c60005b601b811015611b9f5760208401933582821c6001168015611b6f5760018114611b8457611b95565b60008581526020839052604090209450611b95565b600082815260208690526040902094505b5050600101611b47565b505060805250505050565b60ff811661038002610184810190369061050401811015611c4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f636865636b207468617420746865726520697320656e6f7567682063616c6c6460448201527f6174610000000000000000000000000000000000000000000000000000000000606482015260840161087b565b50919050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101919091526101608101611cb9611cbe565b905290565b6040518061040001604052806020906020820280368337509192915050565b60008083601f840112611cef57600080fd5b50813567ffffffffffffffff811115611d0757600080fd5b602083019150836020828501011115611d1f57600080fd5b9250929050565b60008060008060408587031215611d3c57600080fd5b843567ffffffffffffffff80821115611d5457600080fd5b611d6088838901611cdd565b90965094506020870135915080821115611d7957600080fd5b50611d8687828801611cdd565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008060408385031215611dd457600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea164736f6c634300080f000a", +} + +// MIPSABI is the input ABI used to generate the binding from. +// Deprecated: Use MIPSMetaData.ABI instead. +var MIPSABI = MIPSMetaData.ABI + +// MIPSBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use MIPSMetaData.Bin instead. +var MIPSBin = MIPSMetaData.Bin + +// DeployMIPS deploys a new Ethereum contract, binding an instance of MIPS to it. +func DeployMIPS(auth *bind.TransactOpts, backend bind.ContractBackend, _oracle common.Address) (common.Address, *types.Transaction, *MIPS, error) { + parsed, err := MIPSMetaData.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(MIPSBin), backend, _oracle) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &MIPS{MIPSCaller: MIPSCaller{contract: contract}, MIPSTransactor: MIPSTransactor{contract: contract}, MIPSFilterer: MIPSFilterer{contract: contract}}, nil +} + +// MIPS is an auto generated Go binding around an Ethereum contract. +type MIPS struct { + MIPSCaller // Read-only binding to the contract + MIPSTransactor // Write-only binding to the contract + MIPSFilterer // Log filterer for contract events +} + +// MIPSCaller is an auto generated read-only Go binding around an Ethereum contract. +type MIPSCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// MIPSTransactor is an auto generated write-only Go binding around an Ethereum contract. +type MIPSTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// MIPSFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type MIPSFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// MIPSSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type MIPSSession struct { + Contract *MIPS // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// MIPSCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type MIPSCallerSession struct { + Contract *MIPSCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// MIPSTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type MIPSTransactorSession struct { + Contract *MIPSTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// MIPSRaw is an auto generated low-level Go binding around an Ethereum contract. +type MIPSRaw struct { + Contract *MIPS // Generic contract binding to access the raw methods on +} + +// MIPSCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type MIPSCallerRaw struct { + Contract *MIPSCaller // Generic read-only contract binding to access the raw methods on +} + +// MIPSTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type MIPSTransactorRaw struct { + Contract *MIPSTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewMIPS creates a new instance of MIPS, bound to a specific deployed contract. +func NewMIPS(address common.Address, backend bind.ContractBackend) (*MIPS, error) { + contract, err := bindMIPS(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &MIPS{MIPSCaller: MIPSCaller{contract: contract}, MIPSTransactor: MIPSTransactor{contract: contract}, MIPSFilterer: MIPSFilterer{contract: contract}}, nil +} + +// NewMIPSCaller creates a new read-only instance of MIPS, bound to a specific deployed contract. +func NewMIPSCaller(address common.Address, caller bind.ContractCaller) (*MIPSCaller, error) { + contract, err := bindMIPS(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &MIPSCaller{contract: contract}, nil +} + +// NewMIPSTransactor creates a new write-only instance of MIPS, bound to a specific deployed contract. +func NewMIPSTransactor(address common.Address, transactor bind.ContractTransactor) (*MIPSTransactor, error) { + contract, err := bindMIPS(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &MIPSTransactor{contract: contract}, nil +} + +// NewMIPSFilterer creates a new log filterer instance of MIPS, bound to a specific deployed contract. +func NewMIPSFilterer(address common.Address, filterer bind.ContractFilterer) (*MIPSFilterer, error) { + contract, err := bindMIPS(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &MIPSFilterer{contract: contract}, nil +} + +// bindMIPS binds a generic wrapper to an already deployed contract. +func bindMIPS(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(MIPSABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_MIPS *MIPSRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MIPS.Contract.MIPSCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_MIPS *MIPSRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MIPS.Contract.MIPSTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_MIPS *MIPSRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MIPS.Contract.MIPSTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_MIPS *MIPSCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MIPS.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_MIPS *MIPSTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MIPS.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_MIPS *MIPSTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MIPS.Contract.contract.Transact(opts, method, params...) +} + +// BRKSTART is a free data retrieval call binding the contract method 0x155633fe. +// +// Solidity: function BRK_START() view returns(uint32) +func (_MIPS *MIPSCaller) BRKSTART(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _MIPS.contract.Call(opts, &out, "BRK_START") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// BRKSTART is a free data retrieval call binding the contract method 0x155633fe. +// +// Solidity: function BRK_START() view returns(uint32) +func (_MIPS *MIPSSession) BRKSTART() (uint32, error) { + return _MIPS.Contract.BRKSTART(&_MIPS.CallOpts) +} + +// BRKSTART is a free data retrieval call binding the contract method 0x155633fe. +// +// Solidity: function BRK_START() view returns(uint32) +func (_MIPS *MIPSCallerSession) BRKSTART() (uint32, error) { + return _MIPS.Contract.BRKSTART(&_MIPS.CallOpts) +} + +// Oracle is a free data retrieval call binding the contract method 0x7dc0d1d0. +// +// Solidity: function oracle() view returns(address oracle_) +func (_MIPS *MIPSCaller) Oracle(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _MIPS.contract.Call(opts, &out, "oracle") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Oracle is a free data retrieval call binding the contract method 0x7dc0d1d0. +// +// Solidity: function oracle() view returns(address oracle_) +func (_MIPS *MIPSSession) Oracle() (common.Address, error) { + return _MIPS.Contract.Oracle(&_MIPS.CallOpts) +} + +// Oracle is a free data retrieval call binding the contract method 0x7dc0d1d0. +// +// Solidity: function oracle() view returns(address oracle_) +func (_MIPS *MIPSCallerSession) Oracle() (common.Address, error) { + return _MIPS.Contract.Oracle(&_MIPS.CallOpts) +} + +// Step is a paid mutator transaction binding the contract method 0xf8e0cb96. +// +// Solidity: function step(bytes stateData, bytes proof) returns(bytes32) +func (_MIPS *MIPSTransactor) Step(opts *bind.TransactOpts, stateData []byte, proof []byte) (*types.Transaction, error) { + return _MIPS.contract.Transact(opts, "step", stateData, proof) +} + +// Step is a paid mutator transaction binding the contract method 0xf8e0cb96. +// +// Solidity: function step(bytes stateData, bytes proof) returns(bytes32) +func (_MIPS *MIPSSession) Step(stateData []byte, proof []byte) (*types.Transaction, error) { + return _MIPS.Contract.Step(&_MIPS.TransactOpts, stateData, proof) +} + +// Step is a paid mutator transaction binding the contract method 0xf8e0cb96. +// +// Solidity: function step(bytes stateData, bytes proof) returns(bytes32) +func (_MIPS *MIPSTransactorSession) Step(stateData []byte, proof []byte) (*types.Transaction, error) { + return _MIPS.Contract.Step(&_MIPS.TransactOpts, stateData, proof) +} diff --git a/op-bindings/bindings/mips_more.go b/op-bindings/bindings/mips_more.go new file mode 100644 index 000000000..d4854a63a --- /dev/null +++ b/op-bindings/bindings/mips_more.go @@ -0,0 +1,27 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const MIPSStorageLayoutJSON = "{\"storage\":null,\"types\":{}}" + +var MIPSStorageLayout = new(solc.StorageLayout) + +var MIPSDeployedBin = "0x608060405234801561001057600080fd5b50600436106100415760003560e01c8063155633fe146100465780637dc0d1d01461006b578063f8e0cb96146100af575b600080fd5b610051634000000081565b60405163ffffffff90911681526020015b60405180910390f35b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610062565b6100c26100bd366004611d26565b6100d0565b604051908152602001610062565b60006100da611c53565b608081146100e757600080fd5b604051610600146100f757600080fd5b6064861461010457600080fd5b610184841461011257600080fd5b8535608052602086013560a052604086013560e090811c60c09081526044880135821c82526048880135821c61010052604c880135821c610120526050880135821c61014052605488013590911c61016052605887013560f890811c610180526059880135901c6101a052605a870135901c6101c0526102006101e0819052606287019060005b60208110156101bd57823560e01c8252600490920191602090910190600101610199565b505050806101200151156101db576101d3610619565b915050610611565b6101408101805160010167ffffffffffffffff16905260608101516000906102039082610735565b9050603f601a82901c16600281148061022257508063ffffffff166003145b156102775760006002836303ffffff1663ffffffff16901b846080015163f00000001617905061026c8263ffffffff1660021461026057601f610263565b60005b60ff16826107f1565b945050505050610611565b6101608301516000908190601f601086901c81169190601587901c16602081106102a3576102a3611d92565b602002015192508063ffffffff851615806102c457508463ffffffff16601c145b156102fb578661016001518263ffffffff16602081106102e6576102e6611d92565b6020020151925050601f600b86901c166103b7565b60208563ffffffff16101561035d578463ffffffff16600c148061032557508463ffffffff16600d145b8061033657508463ffffffff16600e145b15610347578561ffff1692506103b7565b6103568661ffff1660106108eb565b92506103b7565b60288563ffffffff1610158061037957508463ffffffff166022145b8061038a57508463ffffffff166026145b156103b7578661016001518263ffffffff16602081106103ac576103ac611d92565b602002015192508190505b60048563ffffffff16101580156103d4575060088563ffffffff16105b806103e557508463ffffffff166001145b15610404576103f68587848761095e565b975050505050505050610611565b63ffffffff6000602087831610610469576104248861ffff1660106108eb565b9095019463fffffffc861661043a816001610735565b915060288863ffffffff161015801561045a57508763ffffffff16603014155b1561046757809250600093505b505b600061047789888885610b6e565b63ffffffff9081169150603f8a1690891615801561049c575060088163ffffffff1610155b80156104ae5750601c8163ffffffff16105b1561058a578063ffffffff16600814806104ce57508063ffffffff166009145b15610505576104f38163ffffffff166008146104ea57856104ed565b60005b896107f1565b9b505050505050505050505050610611565b8063ffffffff16600a03610525576104f3858963ffffffff8a16156112f2565b8063ffffffff16600b03610546576104f3858963ffffffff8a1615156112f2565b8063ffffffff16600c0361055c576104f36113d8565b60108163ffffffff16101580156105795750601c8163ffffffff16105b1561058a576104f38189898861190c565b8863ffffffff1660381480156105a5575063ffffffff861615155b156105da5760018b61016001518763ffffffff16602081106105c9576105c9611d92565b63ffffffff90921660209290920201525b8363ffffffff1663ffffffff146105f7576105f784600184611b06565b610603858360016112f2565b9b5050505050505050505050505b949350505050565b60408051608051815260a051602082015260dc519181019190915260fc51604482015261011c51604882015261013c51604c82015261015c51605082015261017c5160548201526101805161019f5160588301526101a0516101bf5160598401526101d851605a840152600092610200929091606283019190855b60208110156106b857601c8601518452602090950194600490930192600101610694565b506000835283830384a06000945080600181146106d85760039550610700565b8280156106f057600181146106f957600296506106fe565b600096506106fe565b600196505b505b50505081900390207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660f89190911b17919050565b60008061074183611baa565b9050600384161561075157600080fd5b6020810190358460051c8160005b601b8110156107b75760208501943583821c6001168015610787576001811461079c576107ad565b600084815260208390526040902093506107ad565b600082815260208590526040902093505b505060010161075f565b5060805191508181146107d257630badf00d60005260206000fd5b5050601f94909416601c0360031b9390931c63ffffffff169392505050565b60006107fb611c53565b60809050806060015160040163ffffffff16816080015163ffffffff1614610884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6a756d7020696e2064656c617920736c6f74000000000000000000000000000060448201526064015b60405180910390fd5b60608101805160808301805163ffffffff9081169093528583169052908516156108da57806008018261016001518663ffffffff16602081106108c9576108c9611d92565b63ffffffff90921660209290920201525b6108e2610619565b95945050505050565b600063ffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80850183169190911c821615159160016020869003821681901b830191861691821b92911b018261094857600061094a565b815b90861663ffffffff16179250505092915050565b6000610968611c53565b608090506000816060015160040163ffffffff16826080015163ffffffff16146109ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6272616e636820696e2064656c617920736c6f74000000000000000000000000604482015260640161087b565b8663ffffffff1660041480610a0957508663ffffffff166005145b15610a855760008261016001518663ffffffff1660208110610a2d57610a2d611d92565b602002015190508063ffffffff168563ffffffff16148015610a5557508763ffffffff166004145b80610a7d57508063ffffffff168563ffffffff1614158015610a7d57508763ffffffff166005145b915050610b02565b8663ffffffff16600603610aa25760008460030b13159050610b02565b8663ffffffff16600703610abe5760008460030b139050610b02565b8663ffffffff16600103610b0257601f601087901c166000819003610ae75760008560030b1291505b8063ffffffff16600103610b005760008560030b121591505b505b606082018051608084015163ffffffff169091528115610b48576002610b2d8861ffff1660106108eb565b63ffffffff90811690911b8201600401166080840152610b5a565b60808301805160040163ffffffff1690525b610b62610619565b98975050505050505050565b6000603f601a86901c16801580610b9d575060088163ffffffff1610158015610b9d5750600f8163ffffffff16105b15610ff357603f86168160088114610be45760098114610bed57600a8114610bf657600b8114610bff57600c8114610c0857600d8114610c1157600e8114610c1a57610c1f565b60209150610c1f565b60219150610c1f565b602a9150610c1f565b602b9150610c1f565b60249150610c1f565b60259150610c1f565b602691505b508063ffffffff16600003610c465750505063ffffffff8216601f600686901c161b610611565b8063ffffffff16600203610c6c5750505063ffffffff8216601f600686901c161c610611565b8063ffffffff16600303610ca257601f600688901c16610c9863ffffffff8716821c60208390036108eb565b9350505050610611565b8063ffffffff16600403610cc45750505063ffffffff8216601f84161b610611565b8063ffffffff16600603610ce65750505063ffffffff8216601f84161c610611565b8063ffffffff16600703610d1957610d108663ffffffff168663ffffffff16901c876020036108eb565b92505050610611565b8063ffffffff16600803610d31578592505050610611565b8063ffffffff16600903610d49578592505050610611565b8063ffffffff16600a03610d61578592505050610611565b8063ffffffff16600b03610d79578592505050610611565b8063ffffffff16600c03610d91578592505050610611565b8063ffffffff16600f03610da9578592505050610611565b8063ffffffff16601003610dc1578592505050610611565b8063ffffffff16601103610dd9578592505050610611565b8063ffffffff16601203610df1578592505050610611565b8063ffffffff16601303610e09578592505050610611565b8063ffffffff16601803610e21578592505050610611565b8063ffffffff16601903610e39578592505050610611565b8063ffffffff16601a03610e51578592505050610611565b8063ffffffff16601b03610e69578592505050610611565b8063ffffffff16602003610e8257505050828201610611565b8063ffffffff16602103610e9b57505050828201610611565b8063ffffffff16602203610eb457505050818303610611565b8063ffffffff16602303610ecd57505050818303610611565b8063ffffffff16602403610ee657505050828216610611565b8063ffffffff16602503610eff57505050828217610611565b8063ffffffff16602603610f1857505050828218610611565b8063ffffffff16602703610f325750505082821719610611565b8063ffffffff16602a03610f63578460030b8660030b12610f54576000610f57565b60015b60ff1692505050610611565b8063ffffffff16602b03610f8b578463ffffffff168663ffffffff1610610f54576000610f57565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420696e737472756374696f6e00000000000000000000000000604482015260640161087b565b50610f8b565b8063ffffffff16601c0361107757603f8616600281900361101957505050828202610611565b8063ffffffff166020148061103457508063ffffffff166021145b15610fed578063ffffffff1660200361104b579419945b60005b638000000087161561106d576401fffffffe600197881b16960161104e565b9250610611915050565b8063ffffffff16600f0361109957505065ffffffff0000601083901b16610611565b8063ffffffff166020036110cd576101d38560031660080260180363ffffffff168463ffffffff16901c60ff1660086108eb565b8063ffffffff16602103611102576101d38560021660080260100363ffffffff168463ffffffff16901c61ffff1660106108eb565b8063ffffffff1660220361113157505063ffffffff60086003851602811681811b198416918316901b17610611565b8063ffffffff166023036111485782915050610611565b8063ffffffff1660240361117a578460031660080260180363ffffffff168363ffffffff16901c60ff16915050610611565b8063ffffffff166025036111ad578460021660080260100363ffffffff168363ffffffff16901c61ffff16915050610611565b8063ffffffff166026036111df57505063ffffffff60086003851602601803811681811c198416918316901c17610611565b8063ffffffff1660280361121557505060ff63ffffffff60086003861602601803811682811b9091188316918416901b17610611565b8063ffffffff1660290361124c57505061ffff63ffffffff60086002861602601003811682811b9091188316918416901b17610611565b8063ffffffff16602a0361127b57505063ffffffff60086003851602811681811c198316918416901c17610611565b8063ffffffff16602b036112925783915050610611565b8063ffffffff16602e036112c457505063ffffffff60086003851602601803811681811b198316918416901b17610611565b8063ffffffff166030036112db5782915050610611565b8063ffffffff16603803610f8b5783915050610611565b60006112fc611c53565b506080602063ffffffff86161061136f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f76616c6964207265676973746572000000000000000000000000000000000000604482015260640161087b565b63ffffffff8516158015906113815750825b156113b557838161016001518663ffffffff16602081106113a4576113a4611d92565b63ffffffff90921660209290920201525b60808101805163ffffffff808216606085015260049091011690526108e2610619565b60006113e2611c53565b506101e051604081015160808083015160a084015160c09094015191936000928392919063ffffffff8616610ffa0361145c5781610fff81161561142b57610fff811661100003015b8363ffffffff166000036114525760e08801805163ffffffff838201169091529550611456565b8395505b506118cb565b8563ffffffff16610fcd0361147757634000000094506118cb565b8563ffffffff166110180361148f57600194506118cb565b8563ffffffff16611096036114c457600161012088015260ff83166101008801526114b8610619565b97505050505050505090565b8563ffffffff16610fa30361172e5763ffffffff8316156118cb577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb63ffffffff8416016116e857600061151f8363fffffffc166001610735565b60208901519091508060001a60010361158c5761158981600090815233602052604090207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b90505b6040808a015190517fe03110e10000000000000000000000000000000000000000000000000000000081526004810183905263ffffffff9091166024820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e03110e1906044016040805180830381865afa15801561162d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116519190611dc1565b91509150600386168060040382811015611669578092505b5081861015611676578591505b8260088302610100031c9250826008828460040303021b9250600180600883600403021b036001806008858560040303021b039150811981169050838119871617955050506116cd8663fffffffc16600186611b06565b60408b018051820163ffffffff169052975061172992505050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd63ffffffff84160161171d578094506118cb565b63ffffffff9450600993505b6118cb565b8563ffffffff16610fa40361181f5763ffffffff831660011480611758575063ffffffff83166002145b80611769575063ffffffff83166004145b15611776578094506118cb565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63ffffffff84160161171d5760006117b68363fffffffc166001610735565b602089015190915060038416600403838110156117d1578093505b83900360089081029290921c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600193850293841b0116911b176020880152600060408801529350836118cb565b8563ffffffff16610fd7036118cb578163ffffffff166003036118bf5763ffffffff83161580611855575063ffffffff83166005145b80611866575063ffffffff83166003145b1561187457600094506118cb565b63ffffffff83166001148061188f575063ffffffff83166002145b806118a0575063ffffffff83166006145b806118b1575063ffffffff83166004145b1561171d57600194506118cb565b63ffffffff9450601693505b6101608701805163ffffffff808816604090920191909152905185821660e09091015260808801805180831660608b015260040190911690526114b8610619565b6000611916611c53565b506080600063ffffffff8716601003611934575060c0810151611a9d565b8663ffffffff166011036119535763ffffffff861660c0830152611a9d565b8663ffffffff1660120361196c575060a0810151611a9d565b8663ffffffff1660130361198b5763ffffffff861660a0830152611a9d565b8663ffffffff166018036119bf5763ffffffff600387810b9087900b02602081901c821660c08501521660a0830152611a9d565b8663ffffffff166019036119f05763ffffffff86811681871602602081901c821660c08501521660a0830152611a9d565b8663ffffffff16601a03611a46578460030b8660030b81611a1357611a13611de5565b0763ffffffff1660c0830152600385810b9087900b81611a3557611a35611de5565b0563ffffffff1660a0830152611a9d565b8663ffffffff16601b03611a9d578463ffffffff168663ffffffff1681611a6f57611a6f611de5565b0663ffffffff90811660c084015285811690871681611a9057611a90611de5565b0463ffffffff1660a08301525b63ffffffff841615611ad857808261016001518563ffffffff1660208110611ac757611ac7611d92565b63ffffffff90921660209290920201525b60808201805163ffffffff80821660608601526004909101169052611afb610619565b979650505050505050565b6000611b1183611baa565b90506003841615611b2157600080fd5b6020810190601f8516601c0360031b83811b913563ffffffff90911b1916178460051c60005b601b811015611b9f5760208401933582821c6001168015611b6f5760018114611b8457611b95565b60008581526020839052604090209450611b95565b600082815260208690526040902094505b5050600101611b47565b505060805250505050565b60ff811661038002610184810190369061050401811015611c4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f636865636b207468617420746865726520697320656e6f7567682063616c6c6460448201527f6174610000000000000000000000000000000000000000000000000000000000606482015260840161087b565b50919050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101919091526101608101611cb9611cbe565b905290565b6040518061040001604052806020906020820280368337509192915050565b60008083601f840112611cef57600080fd5b50813567ffffffffffffffff811115611d0757600080fd5b602083019150836020828501011115611d1f57600080fd5b9250929050565b60008060008060408587031215611d3c57600080fd5b843567ffffffffffffffff80821115611d5457600080fd5b611d6088838901611cdd565b90965094506020870135915080821115611d7957600080fd5b50611d8687828801611cdd565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008060408385031215611dd457600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea164736f6c634300080f000a" + +var MIPSDeployedSourceMap = "1131:39568:128:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1710:45;;1745:10;1710:45;;;;;188:10:284;176:23;;;158:42;;146:2;131:18;1710:45:128;;;;;;;;2448:99;;;412:42:284;2534:6:128;400:55:284;382:74;;370:2;355:18;2448:99:128;211:251:284;25579:6339:128;;;;;;:::i;:::-;;:::i;:::-;;;1687:25:284;;;1675:2;1660:18;25579:6339:128;1541:177:284;25579:6339:128;25657:7;25700:18;;:::i;:::-;25847:4;25840:5;25837:15;25827:134;;25941:1;25938;25931:12;25827:134;25997:4;25991:11;26004;25988:28;25978:137;;26095:1;26092;26085:12;25978:137;26163:3;26145:16;26142:25;26132:150;;26262:1;26259;26252:12;26132:150;26326:3;26312:12;26309:21;26299:145;;26424:1;26421;26414:12;26299:145;26704:24;;27048:4;26750:20;27106:2;26808:21;;26704:24;26866:18;26750:20;26808:21;;;26704:24;26681:21;26677:52;;;26866:18;26750:20;;;26808:21;;;26704:24;26677:52;;26750:20;;26808:21;;;26704:24;26677:52;;26866:18;26750:20;26808:21;;;26704:24;26677:52;;26866:18;26750:20;26808:21;;;26704:24;26677:52;;26866:18;26750:20;26808:21;;;26704:24;26677:52;;;26866:18;26750:20;26808:21;;;26704:24;26681:21;26677:52;;;26866:18;26750:20;26808:21;;;26704:24;26677:52;;26866:18;26750:20;26808:21;;;26704:24;26677:52;;26866:18;26750:20;27724:10;26866:18;27714:21;;;26808;;;;27822:1;27807:77;27832:2;27829:1;27826:9;27807:77;;;26704:24;;26681:21;26677:52;26750:20;;27880:1;26808:21;;;;26692:2;26866:18;;;;27850:1;27843:9;27807:77;;;27811:14;;;27962:5;:12;;;27958:71;;;28001:13;:11;:13::i;:::-;27994:20;;;;;27958:71;28043:10;;;:15;;28057:1;28043:15;;;;;28128:8;;;;-1:-1:-1;;28120:20:128;;-1:-1:-1;28120:7:128;:20::i;:::-;28106:34;-1:-1:-1;28170:10:128;28178:2;28170:10;;;;28247:1;28237:11;;;:26;;;28252:6;:11;;28262:1;28252:11;28237:26;28233:310;;;28393:13;28462:1;28440:4;28447:10;28440:17;28439:24;;;;28410:5;:12;;;28425:10;28410:25;28409:54;28393:70;;28488:40;28499:6;:11;;28509:1;28499:11;:20;;28517:2;28499:20;;;28513:1;28499:20;28488:40;;28521:6;28488:10;:40::i;:::-;28481:47;;;;;;;;28233:310;28792:15;;;;28587:9;;;;28724:4;28718:2;28710:10;;;28709:19;;;28792:15;28817:2;28809:10;;;28808:19;28792:36;;;;;;;:::i;:::-;;;;;;-1:-1:-1;28857:5:128;28881:11;;;;;:29;;;28896:6;:14;;28906:4;28896:14;28881:29;28877:832;;;28973:5;:15;;;28989:5;28973:22;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;29036:4:128;29030:2;29022:10;;;29021:19;28877:832;;;29074:4;29065:6;:13;;;29061:648;;;29195:6;:13;;29205:3;29195:13;:30;;;;29212:6;:13;;29222:3;29212:13;29195:30;:47;;;;29229:6;:13;;29239:3;29229:13;29195:47;29191:253;;;29305:4;29312:6;29305:13;29300:18;;29061:648;;29191:253;29404:21;29407:4;29414:6;29407:13;29422:2;29404;:21::i;:::-;29399:26;;29061:648;;;29478:4;29468:6;:14;;;;:32;;;;29486:6;:14;;29496:4;29486:14;29468:32;:50;;;;29504:6;:14;;29514:4;29504:14;29468:50;29464:245;;;29588:5;:15;;;29604:5;29588:22;;;;;;;;;:::i;:::-;;;;;29583:27;;29689:5;29681:13;;29464:245;29738:1;29728:6;:11;;;;:25;;;;;29752:1;29743:6;:10;;;29728:25;29727:42;;;;29758:6;:11;;29768:1;29758:11;29727:42;29723:125;;;29796:37;29809:6;29817:4;29823:5;29830:2;29796:12;:37::i;:::-;29789:44;;;;;;;;;;;29723:125;29881:13;29862:16;30033:4;30023:14;;;;30019:446;;30102:21;30105:4;30112:6;30105:13;30120:2;30102;:21::i;:::-;30096:27;;;;30160:10;30155:15;;30194:16;30155:15;30208:1;30194:7;:16::i;:::-;30188:22;;30242:4;30232:6;:14;;;;:32;;;;;30250:6;:14;;30260:4;30250:14;;30232:32;30228:223;;;30329:4;30317:16;;30431:1;30423:9;;30228:223;30039:426;30019:446;30498:10;30511:26;30519:4;30525:2;30529;30533:3;30511:7;:26::i;:::-;30540:10;30511:39;;;;-1:-1:-1;30636:4:128;30629:11;;;30668;;;:24;;;;;30691:1;30683:4;:9;;;;30668:24;:39;;;;;30703:4;30696;:11;;;30668:39;30664:847;;;30731:4;:9;;30739:1;30731:9;:22;;;;30744:4;:9;;30752:1;30744:9;30731:22;30727:144;;;30815:37;30826:4;:9;;30834:1;30826:9;:21;;30842:5;30826:21;;;30838:1;30826:21;30849:2;30815:10;:37::i;:::-;30808:44;;;;;;;;;;;;;;;30727:144;30893:4;:11;;30901:3;30893:11;30889:121;;30963:28;30972:5;30979:2;30983:7;;;;30963:8;:28::i;30889:121::-;31031:4;:11;;31039:3;31031:11;31027:121;;31101:28;31110:5;31117:2;31121:7;;;;;31101:8;:28::i;31027:121::-;31218:4;:11;;31226:3;31218:11;31214:80;;31260:15;:13;:15::i;31214:80::-;31397:4;31389;:12;;;;:27;;;;;31412:4;31405;:11;;;31389:27;31385:112;;;31447:31;31458:4;31464:2;31468;31472:5;31447:10;:31::i;31385:112::-;31571:6;:14;;31581:4;31571:14;:28;;;;-1:-1:-1;31589:10:128;;;;;31571:28;31567:93;;;31644:1;31619:5;:15;;;31635:5;31619:22;;;;;;;;;:::i;:::-;:26;;;;:22;;;;;;:26;31567:93;31706:9;:26;;31719:13;31706:26;31702:92;;31752:27;31761:9;31772:1;31775:3;31752:8;:27::i;:::-;31875:26;31884:5;31891:3;31896:4;31875:8;:26::i;:::-;31868:33;;;;;;;;;;;;;25579:6339;;;;;;;:::o;3087:2334::-;3634:4;3628:11;;3550:4;3353:31;3342:43;;3413:13;3353:31;3752:2;3452:13;;3342:43;3359:24;3353:31;3452:13;;;3342:43;;;;3359:24;3353:31;3452:13;;;3342:43;3359:24;3353:31;3452:13;;;3342:43;3359:24;3353:31;3452:13;;;3342:43;3359:24;3353:31;3452:13;;;3342:43;3359:24;3353:31;3452:13;;;3342:43;3413:13;4180:11;3359:24;3353:31;3452:13;;;3342:43;3413:13;4275:11;3359:24;3353:31;3452:13;;;3342:43;3359:24;3353:31;3452:13;;;3342:43;3128:12;;4415:13;;3628:11;;3452:13;;;;4180:11;3128:12;4495:84;4520:2;4517:1;4514:9;4495:84;;;3369:13;3359:24;;3353:31;3342:43;;3373:2;3413:13;;;;4575:1;3452:13;;;;4538:1;4531:9;4495:84;;;4499:14;4642:1;4638:2;4631:13;4737:5;4733:2;4729:14;4722:5;4717:27;4811:1;4797:15;;4832:6;4856:1;4851:273;;;;5191:1;5181:11;;4825:369;;4851:273;4883:8;4941:22;;;;5020:1;5015:22;;;;5107:1;5097:11;;4876:234;;4941:22;4960:1;4950:11;;4941:22;;5015;5034:1;5024:11;;4876:234;;4825:369;-1:-1:-1;;;5317:14:128;;;5300:32;;5360:19;5356:30;5392:3;5388:16;;;;5353:52;;3087:2334;-1:-1:-1;3087:2334:128:o;21634:1831::-;21707:11;21818:14;21835:24;21847:11;21835;:24::i;:::-;21818:41;;21967:1;21960:5;21956:13;21953:33;;;21982:1;21979;21972:12;21953:33;22115:2;22103:15;;;22056:20;22545:5;22542:1;22538:13;22580:4;22616:1;22601:343;22626:2;22623:1;22620:9;22601:343;;;22749:2;22737:15;;;22686:20;22784:12;;;22798:1;22780:20;22821:42;;;;22889:1;22884:42;;;;22773:153;;22821:42;22279:1;22272:12;;;22312:2;22305:13;;;22357:2;22344:16;;22830:31;;22821:42;;22884;22279:1;22272:12;;;22312:2;22305:13;;;22357:2;22344:16;;22893:31;;22773:153;-1:-1:-1;;22644:1:128;22637:9;22601:343;;;22605:14;23054:4;23048:11;23033:26;;23140:7;23134:4;23131:17;23121:124;;23182:10;23179:1;23172:21;23224:2;23221:1;23214:13;23121:124;-1:-1:-1;;23372:2:128;23361:14;;;;23349:10;23345:31;23342:1;23338:39;23406:16;;;;23424:10;23402:33;;21634:1831;-1:-1:-1;;;21634:1831:128:o;18744:823::-;18813:12;18900:18;;:::i;:::-;18968:4;18959:13;;19020:5;:8;;;19031:1;19020:12;19004:28;;:5;:12;;;:28;;;19000:95;;19052:28;;;;;2114:2:284;19052:28:128;;;2096:21:284;2153:2;2133:18;;;2126:30;2192:20;2172:18;;;2165:48;2230:18;;19052:28:128;;;;;;;;19000:95;19184:8;;;;;19217:12;;;;;19206:23;;;;;;;19243:20;;;;;19184:8;19375:13;;;19371:90;;19436:6;19445:1;19436:10;19408:5;:15;;;19424:8;19408:25;;;;;;;;;:::i;:::-;:38;;;;:25;;;;;;:38;19371:90;19537:13;:11;:13::i;:::-;19530:20;18744:823;-1:-1:-1;;;;;18744:823:128:o;2645:339::-;2706:11;2770:18;;;;2779:8;;;;2770:18;;;;;;2769:25;;;;;2786:1;2833:2;:9;;;2827:16;;;;;2826:22;;2825:32;;;;;;;2887:9;;2886:15;2769:25;2944:21;;2964:1;2944:21;;;2955:6;2944:21;2929:11;;;;;:37;;-1:-1:-1;;;2645:339:128;;;;:::o;13620:2026::-;13717:12;13803:18;;:::i;:::-;13871:4;13862:13;;13903:17;13963:5;:8;;;13974:1;13963:12;13947:28;;:5;:12;;;:28;;;13943:97;;13995:30;;;;;2461:2:284;13995:30:128;;;2443:21:284;2500:2;2480:18;;;2473:30;2539:22;2519:18;;;2512:50;2579:18;;13995:30:128;2259:344:284;13943:97:128;14110:7;:12;;14121:1;14110:12;:28;;;;14126:7;:12;;14137:1;14126:12;14110:28;14106:947;;;14158:9;14170:5;:15;;;14186:6;14170:23;;;;;;;;;:::i;:::-;;;;;14158:35;;14234:2;14227:9;;:3;:9;;;:25;;;;;14240:7;:12;;14251:1;14240:12;14227:25;14226:58;;;;14265:2;14258:9;;:3;:9;;;;:25;;;;;14271:7;:12;;14282:1;14271:12;14258:25;14211:73;;14140:159;14106:947;;;14396:7;:12;;14407:1;14396:12;14392:661;;14457:1;14449:3;14443:15;;;;14428:30;;14392:661;;;14561:7;:12;;14572:1;14561:12;14557:496;;14621:1;14614:3;14608:14;;;14593:29;;14557:496;;;14742:7;:12;;14753:1;14742:12;14738:315;;14830:4;14824:2;14815:11;;;14814:20;14800:10;14857:8;;;14853:84;;14917:1;14910:3;14904:14;;;14889:29;;14853:84;14958:3;:8;;14965:1;14958:8;14954:85;;15019:1;15011:3;15005:15;;;;14990:30;;14954:85;14756:297;14738:315;15129:8;;;;;15207:12;;;;15196:23;;;;;15363:178;;;;15454:1;15428:22;15431:5;15439:6;15431:14;15447:2;15428;:22::i;:::-;:27;;;;;;;15414:42;;15423:1;15414:42;15399:57;:12;;;:57;15363:178;;;15510:12;;;;;15525:1;15510:16;15495:31;;;;15363:178;15616:13;:11;:13::i;:::-;15609:20;13620:2026;-1:-1:-1;;;;;;;;13620:2026:128:o;31964:8733::-;32051:10;32113;32121:2;32113:10;;;;32152:11;;;:44;;;32178:1;32168:6;:11;;;;:27;;;;;32192:3;32183:6;:12;;;32168:27;32148:8490;;;32237:4;32230:11;;32361:6;32421:3;32416:25;;;;32496:3;32491:25;;;;32570:3;32565:25;;;;32645:3;32640:25;;;;32719:3;32714:25;;;;32792:3;32787:25;;;;32866:3;32861:25;;;;32354:532;;32416:25;32435:4;32427:12;;32416:25;;32491;32510:4;32502:12;;32491:25;;32565;32584:4;32576:12;;32565:25;;32640;32659:4;32651:12;;32640:25;;32714;32733:4;32725:12;;32714:25;;32787;32806:4;32798:12;;32787:25;;32861;32880:4;32872:12;;32354:532;;32949:4;:12;;32957:4;32949:12;32945:4023;;-1:-1:-1;;;33000:9:128;32992:26;;33013:4;33008:1;33000:9;;;32999:18;32992:26;32985:33;;32945:4023;33086:4;:12;;33094:4;33086:12;33082:3886;;-1:-1:-1;;;33137:9:128;33129:26;;33150:4;33145:1;33137:9;;;33136:18;33129:26;33122:33;;33082:3886;33223:4;:12;;33231:4;33223:12;33219:3749;;33288:4;33283:1;33275:9;;;33274:18;33321:27;33275:9;33324:11;;;;33337:2;:10;;;33321:2;:27::i;:::-;33314:34;;;;;;;33219:3749;33417:4;:12;;33425:4;33417:12;33413:3555;;-1:-1:-1;;;33460:17:128;;;33472:4;33467:9;;33460:17;33453:24;;33413:3555;33546:4;:11;;33554:3;33546:11;33542:3426;;-1:-1:-1;;;33588:17:128;;;33600:4;33595:9;;33588:17;33581:24;;33542:3426;33674:4;:12;;33682:4;33674:12;33670:3298;;33717:21;33726:2;33720:8;;:2;:8;;;;33735:2;33730;:7;33717:2;:21::i;:::-;33710:28;;;;;;33670:3298;33987:4;:12;;33995:4;33987:12;33983:2985;;34030:2;34023:9;;;;;;33983:2985;34101:4;:12;;34109:4;34101:12;34097:2871;;34144:2;34137:9;;;;;;34097:2871;34215:4;:12;;34223:4;34215:12;34211:2757;;34258:2;34251:9;;;;;;34211:2757;34329:4;:12;;34337:4;34329:12;34325:2643;;34372:2;34365:9;;;;;;34325:2643;34446:4;:12;;34454:4;34446:12;34442:2526;;34489:2;34482:9;;;;;;34442:2526;34606:4;:12;;34614:4;34606:12;34602:2366;;34649:2;34642:9;;;;;;34602:2366;34720:4;:12;;34728:4;34720:12;34716:2252;;34763:2;34756:9;;;;;;34716:2252;34834:4;:12;;34842:4;34834:12;34830:2138;;34877:2;34870:9;;;;;;34830:2138;34948:4;:12;;34956:4;34948:12;34944:2024;;34991:2;34984:9;;;;;;34944:2024;35062:4;:12;;35070:4;35062:12;35058:1910;;35105:2;35098:9;;;;;;35058:1910;35176:4;:12;;35184:4;35176:12;35172:1796;;35219:2;35212:9;;;;;;35172:1796;35291:4;:12;;35299:4;35291:12;35287:1681;;35334:2;35327:9;;;;;;35287:1681;35404:4;:12;;35412:4;35404:12;35400:1568;;35447:2;35440:9;;;;;;35400:1568;35518:4;:12;;35526:4;35518:12;35514:1454;;35561:2;35554:9;;;;;;35514:1454;35710:4;:12;;35718:4;35710:12;35706:1262;;-1:-1:-1;;;35754:7:128;;;35746:16;;35706:1262;35831:4;:12;;35839:4;35831:12;35827:1141;;-1:-1:-1;;;35875:7:128;;;35867:16;;35827:1141;35951:4;:12;;35959:4;35951:12;35947:1021;;-1:-1:-1;;;35995:7:128;;;35987:16;;35947:1021;36072:4;:12;;36080:4;36072:12;36068:900;;-1:-1:-1;;;36116:7:128;;;36108:16;;36068:900;36192:4;:12;;36200:4;36192:12;36188:780;;-1:-1:-1;;;36236:7:128;;;36228:16;;36188:780;36311:4;:12;;36319:4;36311:12;36307:661;;-1:-1:-1;;;36355:7:128;;;36347:16;;36307:661;36431:4;:12;;36439:4;36431:12;36427:541;;-1:-1:-1;;;36475:7:128;;;36467:16;;36427:541;36551:4;:12;;36559:4;36551:12;36547:421;;-1:-1:-1;;;36596:7:128;;;36594:10;36587:17;;36547:421;36673:4;:12;;36681:4;36673:12;36669:299;;36734:2;36716:21;;36722:2;36716:21;;;:29;;36744:1;36716:29;;;36740:1;36716:29;36709:36;;;;;;;;36669:299;36815:4;:12;;36823:4;36815:12;36811:157;;36863:2;36858:7;;:2;:7;;;:15;;36872:1;36858:15;;36811:157;36920:29;;;;;2810:2:284;36920:29:128;;;2792:21:284;2849:2;2829:18;;;2822:30;2888:21;2868:18;;;2861:49;2927:18;;36920:29:128;2608:343:284;36811:157:128;32198:4784;32148:8490;;;37038:6;:14;;37048:4;37038:14;37034:3590;;37097:4;37090:11;;37172:3;37164:11;;;37160:549;;-1:-1:-1;;;37217:21:128;;;37203:36;;37160:549;37324:4;:12;;37332:4;37324:12;:28;;;;37340:4;:12;;37348:4;37340:12;37324:28;37320:389;;;37384:4;:12;;37392:4;37384:12;37380:83;;37433:3;;;37380:83;37488:8;37526:127;37538:10;37533:15;;:20;37526:127;;37618:8;37585:3;37618:8;;;;;37585:3;37526:127;;;37685:1;-1:-1:-1;37678:8:128;;-1:-1:-1;;37678:8:128;37034:3590;37776:6;:14;;37786:4;37776:14;37772:2852;;-1:-1:-1;;37821:8:128;37827:2;37821:8;;;;37814:15;;37772:2852;37896:6;:14;;37906:4;37896:14;37892:2732;;37941:42;37959:2;37964:1;37959:6;37969:1;37958:12;37953:2;:17;37945:26;;:3;:26;;;;37975:4;37944:35;37981:1;37941:2;:42::i;37892:2732::-;38050:6;:14;;38060:4;38050:14;38046:2578;;38095:45;38113:2;38118:1;38113:6;38123:1;38112:12;38107:2;:17;38099:26;;:3;:26;;;;38129:6;38098:37;38137:2;38095;:45::i;38046:2578::-;38208:6;:14;;38218:4;38208:14;38204:2420;;-1:-1:-1;;38259:21:128;38278:1;38273;38268:6;;38267:12;38259:21;;38316:36;;;38387:5;38382:10;;38259:21;;;;;38381:18;38374:25;;38204:2420;38466:6;:14;;38476:4;38466:14;38462:2162;;38511:3;38504:10;;;;;38462:2162;38582:6;:14;;38592:4;38582:14;38578:2046;;38642:2;38647:1;38642:6;38652:1;38641:12;38636:2;:17;38628:26;;:3;:26;;;;38658:4;38627:35;38620:42;;;;;38578:2046;38731:6;:14;;38741:4;38731:14;38727:1897;;38791:2;38796:1;38791:6;38801:1;38790:12;38785:2;:17;38777:26;;:3;:26;;;;38807:6;38776:37;38769:44;;;;;38727:1897;38882:6;:14;;38892:4;38882:14;38878:1746;;-1:-1:-1;;38933:26:128;38957:1;38952;38947:6;;38946:12;38941:2;:17;38933:26;;38995:41;;;39071:5;39066:10;;38933:26;;;;;39065:18;39058:25;;38878:1746;39151:6;:14;;39161:4;39151:14;39147:1477;;-1:-1:-1;;39208:4:128;39202:34;39234:1;39229;39224:6;;39223:12;39218:2;:17;39202:34;;39292:27;;;39272:48;;;39350:10;;39203:9;;;39202:34;;39349:18;39342:25;;39147:1477;39435:6;:14;;39445:4;39435:14;39431:1193;;-1:-1:-1;;39492:6:128;39486:36;39520:1;39515;39510:6;;39509:12;39504:2;:17;39486:36;;39578:29;;;39558:50;;;39638:10;;39487:11;;;39486:36;;39637:18;39630:25;;39431:1193;39724:6;:14;;39734:4;39724:14;39720:904;;-1:-1:-1;;39775:20:128;39793:1;39788;39783:6;;39782:12;39775:20;;39831:36;;;39903:5;39897:11;;39775:20;;;;;39896:19;39889:26;;39720:904;39983:6;:14;;39993:4;39983:14;39979:645;;40028:2;40021:9;;;;;39979:645;40099:6;:14;;40109:4;40099:14;40095:529;;-1:-1:-1;;40150:25:128;40173:1;40168;40163:6;;40162:12;40157:2;:17;40150:25;;40211:41;;;40288:5;40282:11;;40150:25;;;;;40281:19;40274:26;;40095:529;40367:6;:14;;40377:4;40367:14;40363:261;;40412:3;40405:10;;;;;40363:261;40482:6;:14;;40492:4;40482:14;40478:146;;40527:2;40520:9;;;;;19848:782;19934:12;20021:18;;:::i;:::-;-1:-1:-1;20089:4:128;20196:2;20184:14;;;;20176:41;;;;;;;3158:2:284;20176:41:128;;;3140:21:284;3197:2;3177:18;;;3170:30;3236:16;3216:18;;;3209:44;3270:18;;20176:41:128;2956:338:284;20176:41:128;20313:14;;;;;;;:30;;;20331:12;20313:30;20309:102;;;20392:4;20363:5;:15;;;20379:9;20363:26;;;;;;;;;:::i;:::-;:33;;;;:26;;;;;;:33;20309:102;20466:12;;;;;20455:23;;;;:8;;;:23;20522:1;20507:16;;;20492:31;;;20600:13;:11;:13::i;5506:7728::-;5549:12;5635:18;;:::i;:::-;-1:-1:-1;5813:15:128;;:18;;;;5703:4;5973:18;;;;6017;;;;6061;;;;;5703:4;;5793:17;;;;5973:18;6017;6151;;;6165:4;6151:18;6147:6777;;6201:2;6230:4;6225:9;;:14;6221:144;;6341:4;6336:9;;6328:4;:18;6322:24;6221:144;6386:2;:7;;6392:1;6386:7;6382:161;;6422:10;;;;;6454:16;;;;;;;;6422:10;-1:-1:-1;6382:161:128;;;6522:2;6517:7;;6382:161;6171:386;6147:6777;;;6659:10;:18;;6673:4;6659:18;6655:6269;;1745:10;6697:14;;6655:6269;;;6795:10;:18;;6809:4;6795:18;6791:6133;;6838:1;6833:6;;6791:6133;;;6963:10;:18;;6977:4;6963:18;6959:5965;;7016:4;7001:12;;;:19;7038:26;;;:14;;;:26;7089:13;:11;:13::i;:::-;7082:20;;;;;;;;;5506:7728;:::o;6959:5965::-;7228:10;:18;;7242:4;7228:18;7224:5700;;7379:14;;;7375:2708;7224:5700;7375:2708;7549:22;;;;;7545:2538;;7674:10;7687:27;7695:2;7700:10;7695:15;7712:1;7687:7;:27::i;:::-;7798:17;;;;7674:40;;-1:-1:-1;7798:17:128;7776:19;7948:14;7967:1;7942:26;7938:131;;8010:36;8034:11;1277:21:129;1426:15;;;1467:8;1461:4;1454:22;1595:4;1582:18;;1602:19;1578:44;1624:11;1575:61;;1222:430;8010:36:128;7996:50;;7938:131;8155:20;;;;;8122:54;;;;;;;;3472:25:284;;;8122:54:128;3533:23:284;;;3513:18;;;3506:51;8091:11:128;;;;8122:19;:6;:19;;;;3445:18:284;;8122:54:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8090:86;;;;8403:1;8399:2;8395:10;8500:9;8497:1;8493:17;8582:6;8575:5;8572:17;8569:40;;;8602:5;8592:15;;8569:40;;8685:6;8681:2;8678:14;8675:34;;;8705:2;8695:12;;8675:34;8811:3;8806:1;8798:6;8794:14;8789:3;8785:24;8781:34;8774:41;;8911:3;8907:1;8895:9;8886:6;8883:1;8879:14;8875:30;8871:38;8867:48;8860:55;;9066:1;9062;9058;9046:9;9043:1;9039:17;9035:25;9031:33;9027:41;9193:1;9189;9185;9176:6;9164:9;9161:1;9157:17;9153:30;9149:38;9145:46;9141:54;9123:72;;9324:10;9320:15;9314:4;9310:26;9302:34;;9440:3;9432:4;9428:9;9423:3;9419:19;9416:28;9409:35;;;;9586:33;9595:2;9600:10;9595:15;9612:1;9615:3;9586:8;:33::i;:::-;9641:20;;;:38;;;;;;;;;-1:-1:-1;7545:2538:128;;-1:-1:-1;;;7545:2538:128;;9798:18;;;;;9794:289;;9968:2;9963:7;;7224:5700;;9794:289;10022:10;10017:15;;2053:3;10054:10;;9794:289;7224:5700;;;10212:10;:18;;10226:4;10212:18;10208:2716;;10366:15;;;1824:1;10366:15;;:34;;-1:-1:-1;10385:15:128;;;1859:1;10385:15;10366:34;:57;;;-1:-1:-1;10404:19:128;;;1936:1;10404:19;10366:57;10362:1593;;;10452:2;10447:7;;10208:2716;;10362:1593;10578:23;;;;;10574:1381;;10625:10;10638:27;10646:2;10651:10;10646:15;10663:1;10638:7;:27::i;:::-;10741:17;;;;10625:40;;-1:-1:-1;10984:1:128;10976:10;;11078:1;11074:17;11153:13;;;11150:32;;;11175:5;11169:11;;11150:32;11461:14;;;11267:1;11457:22;;;11453:32;;;;11350:26;11374:1;11259:10;;;11354:18;;;11350:26;11449:43;11255:20;;11557:12;11685:17;;;:23;11753:1;11730:20;;;:24;11263:2;-1:-1:-1;11263:2:128;7224:5700;;10208:2716;12157:10;:18;;12171:4;12157:18;12153:771;;12267:2;:7;;12273:1;12267:7;12263:647;;12360:14;;;;;:40;;-1:-1:-1;12378:22:128;;;1978:1;12378:22;12360:40;:62;;;-1:-1:-1;12404:18:128;;;1897:1;12404:18;12360:62;12356:404;;;12455:1;12450:6;;12263:647;;12356:404;12501:15;;;1824:1;12501:15;;:34;;-1:-1:-1;12520:15:128;;;1859:1;12520:15;12501:34;:61;;;-1:-1:-1;12539:23:128;;;2021:1;12539:23;12501:61;:84;;;-1:-1:-1;12566:19:128;;;1936:1;12566:19;12501:84;12497:263;;;12618:1;12613:6;;7224:5700;;12263:647;12811:10;12806:15;;2087:4;12843:11;;12263:647;12999:15;;;;;:23;;;;:18;;;;:23;;;;13036:15;;:23;;;:18;;;;:23;-1:-1:-1;13125:12:128;;;;13114:23;;;:8;;;:23;13181:1;13166:16;13151:31;;;;;13204:13;:11;:13::i;15972:2480::-;16066:12;16152:18;;:::i;:::-;-1:-1:-1;16220:4:128;16252:10;16360:13;;;16369:4;16360:13;16356:1705;;-1:-1:-1;16399:8:128;;;;16356:1705;;;16518:5;:13;;16527:4;16518:13;16514:1547;;16551:14;;;:8;;;:14;16514:1547;;;16681:5;:13;;16690:4;16681:13;16677:1384;;-1:-1:-1;16720:8:128;;;;16677:1384;;;16839:5;:13;;16848:4;16839:13;16835:1226;;16872:14;;;:8;;;:14;16835:1226;;;17013:5;:13;;17022:4;17013:13;17009:1052;;17140:9;17086:17;17066;;;17086;;;;17066:37;17147:2;17140:9;;;;;17122:8;;;:28;17168:22;:8;;;:22;17009:1052;;;17327:5;:13;;17336:4;17327:13;17323:738;;17394:11;17380;;;17394;;;17380:25;17449:2;17442:9;;;;;17424:8;;;:28;17470:22;:8;;;:22;17323:738;;;17651:5;:13;;17660:4;17651:13;17647:414;;17721:3;17702:23;;17708:3;17702:23;;;;;;;:::i;:::-;;17684:42;;:8;;;:42;17762:23;;;;;;;;;;;;;:::i;:::-;;17744:42;;:8;;;:42;17647:414;;;17955:5;:13;;17964:4;17955:13;17951:110;;18005:3;17999:9;;:3;:9;;;;;;;:::i;:::-;;17988:20;;;;:8;;;:20;18037:9;;;;;;;;;;;:::i;:::-;;18026:20;;:8;;;:20;17951:110;18154:14;;;;18150:85;;18217:3;18188:5;:15;;;18204:9;18188:26;;;;;;;;;:::i;:::-;:32;;;;:26;;;;;;:32;18150:85;18289:12;;;;;18278:23;;;;:8;;;:23;18345:1;18330:16;;;18315:31;;;18422:13;:11;:13::i;:::-;18415:20;15972:2480;-1:-1:-1;;;;;;;15972:2480:128:o;23801:1654::-;23977:14;23994:24;24006:11;23994;:24::i;:::-;23977:41;;24126:1;24119:5;24115:13;24112:33;;;24141:1;24138;24131:12;24112:33;24280:2;24474:15;;;24299:2;24288:14;;24276:10;24272:31;24269:1;24265:39;24430:16;;;24215:20;;24415:10;24404:22;;;24400:27;24390:38;24387:60;24916:5;24913:1;24909:13;24987:1;24972:343;24997:2;24994:1;24991:9;24972:343;;;25120:2;25108:15;;;25057:20;25155:12;;;25169:1;25151:20;25192:42;;;;25260:1;25255:42;;;;25144:153;;25192:42;22279:1;22272:12;;;22312:2;22305:13;;;22357:2;22344:16;;25201:31;;25192:42;;25255;22279:1;22272:12;;;22312:2;22305:13;;;22357:2;22344:16;;25264:31;;25144:153;-1:-1:-1;;25015:1:128;25008:9;24972:343;;;-1:-1:-1;;25414:4:128;25407:18;-1:-1:-1;;;;23801:1654:128:o;20834:586::-;21156:20;;;21180:7;21156:32;21149:3;:40;;;21262:14;;21317:17;;21311:24;;;21303:72;;;;;;;4209:2:284;21303:72:128;;;4191:21:284;4248:2;4228:18;;;4221:30;4287:34;4267:18;;;4260:62;4358:5;4338:18;;;4331:33;4381:19;;21303:72:128;4007:399:284;21303:72:128;21389:14;20834:586;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;467:347:284:-;518:8;528:6;582:3;575:4;567:6;563:17;559:27;549:55;;600:1;597;590:12;549:55;-1:-1:-1;623:20:284;;666:18;655:30;;652:50;;;698:1;695;688:12;652:50;735:4;727:6;723:17;711:29;;787:3;780:4;771:6;763;759:19;755:30;752:39;749:59;;;804:1;801;794:12;749:59;467:347;;;;;:::o;819:717::-;909:6;917;925;933;986:2;974:9;965:7;961:23;957:32;954:52;;;1002:1;999;992:12;954:52;1042:9;1029:23;1071:18;1112:2;1104:6;1101:14;1098:34;;;1128:1;1125;1118:12;1098:34;1167:58;1217:7;1208:6;1197:9;1193:22;1167:58;:::i;:::-;1244:8;;-1:-1:-1;1141:84:284;-1:-1:-1;1332:2:284;1317:18;;1304:32;;-1:-1:-1;1348:16:284;;;1345:36;;;1377:1;1374;1367:12;1345:36;;1416:60;1468:7;1457:8;1446:9;1442:24;1416:60;:::i;:::-;819:717;;;;-1:-1:-1;1495:8:284;-1:-1:-1;;;;819:717:284:o;1723:184::-;1775:77;1772:1;1765:88;1872:4;1869:1;1862:15;1896:4;1893:1;1886:15;3568:245;3647:6;3655;3708:2;3696:9;3687:7;3683:23;3679:32;3676:52;;;3724:1;3721;3714:12;3676:52;-1:-1:-1;;3747:16:284;;3803:2;3788:18;;;3782:25;3747:16;;3782:25;;-1:-1:-1;3568:245:284:o;3818:184::-;3870:77;3867:1;3860:88;3967:4;3964:1;3957:15;3991:4;3988:1;3981:15" + +func init() { + if err := json.Unmarshal([]byte(MIPSStorageLayoutJSON), MIPSStorageLayout); err != nil { + panic(err) + } + + layouts["MIPS"] = MIPSStorageLayout + deployedBytecodes["MIPS"] = MIPSDeployedBin +} diff --git a/op-bindings/bindings/optimismmintableerc20.go b/op-bindings/bindings/optimismmintableerc20.go new file mode 100644 index 000000000..835592aac --- /dev/null +++ b/op-bindings/bindings/optimismmintableerc20.go @@ -0,0 +1,1381 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// OptimismMintableERC20MetaData contains all meta data concerning the OptimismMintableERC20 contract. +var OptimismMintableERC20MetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"_decimals\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BRIDGE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REMOTE_TOKEN\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1Token\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2Bridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"remoteToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x6101406040523480156200001257600080fd5b5060405162001ad838038062001ad8833981016040819052620000359162000178565b600160026000858560036200004b8382620002b3565b5060046200005a8282620002b3565b50505060809290925260a05260c0526001600160a01b0393841660e0529390921661010052505060ff16610120526200037f565b80516001600160a01b0381168114620000a657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000d357600080fd5b81516001600160401b0380821115620000f057620000f0620000ab565b604051601f8301601f19908116603f011681019082821181831017156200011b576200011b620000ab565b816040528381526020925086838588010111156200013857600080fd5b600091505b838210156200015c57858201830151818301840152908201906200013d565b838211156200016e5760008385830101525b9695505050505050565b600080600080600060a086880312156200019157600080fd5b6200019c866200008e565b9450620001ac602087016200008e565b60408701519094506001600160401b0380821115620001ca57600080fd5b620001d889838a01620000c1565b94506060880151915080821115620001ef57600080fd5b50620001fe88828901620000c1565b925050608086015160ff811681146200021657600080fd5b809150509295509295909350565b600181811c908216806200023957607f821691505b6020821081036200025a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002ae57600081815260208120601f850160051c81016020861015620002895750805b601f850160051c820191505b81811015620002aa5782815560010162000295565b5050505b505050565b81516001600160401b03811115620002cf57620002cf620000ab565b620002e781620002e0845462000224565b8462000260565b602080601f8311600181146200031f5760008415620003065750858301515b600019600386901b1c1916600185901b178555620002aa565b600085815260208120601f198616915b8281101562000350578886015182559484019460019091019084016200032f565b50858210156200036f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610120516116ed620003eb6000396000610244015260008181610317015281816103ac015281816105f101526107cb0152600081816101a9015261033d0152600061075a015260006107310152600061070801526116ed6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063ae1f6aaf1161008c578063dd62ed3e11610066578063dd62ed3e14610361578063e78cea9214610315578063ee9a31a2146103a757600080fd5b8063ae1f6aaf14610315578063c01e1bd61461033b578063d6c0b2c41461033b57600080fd5b80639dc29fac116100bd5780639dc29fac146102dc578063a457c2d7146102ef578063a9059cbb1461030257600080fd5b806370a082311461029e57806395d89b41146102d457600080fd5b806323b872dd1161012f5780633950935111610114578063395093511461026e57806340c10f191461028157806354fd4d501461029657600080fd5b806323b872dd1461022a578063313ce5671461023d57600080fd5b806306fdde031161016057806306fdde03146101f0578063095ea7b31461020557806318160ddd1461021857600080fd5b806301ffc9a71461017c578063033964be146101a4575b600080fd5b61018f61018a366004611329565b6103ce565b60405190151581526020015b60405180910390f35b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f86104bf565b60405161019b919061139e565b61018f610213366004611418565b610551565b6002545b60405190815260200161019b565b61018f610238366004611442565b610569565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161019b565b61018f61027c366004611418565b61058d565b61029461028f366004611418565b6105d9565b005b6101f8610701565b61021c6102ac36600461147e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101f86107a4565b6102946102ea366004611418565b6107b3565b61018f6102fd366004611418565b6108ca565b61018f610310366004611418565b61099b565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b61021c61036f366004611499565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007f1d1d8b63000000000000000000000000000000000000000000000000000000007fec4fc8e3000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000851683148061048757507fffffffff00000000000000000000000000000000000000000000000000000000858116908316145b806104b657507fffffffff00000000000000000000000000000000000000000000000000000000858116908216145b95945050505050565b6060600380546104ce906114cc565b80601f01602080910402602001604051908101604052809291908181526020018280546104fa906114cc565b80156105475780601f1061051c57610100808354040283529160200191610547565b820191906000526020600020905b81548152906001019060200180831161052a57829003601f168201915b5050505050905090565b60003361055f8185856109a9565b5060019392505050565b600033610577858285610b5d565b610582858585610c34565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061055f90829086906105d490879061154e565b6109a9565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146106a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4f7074696d69736d4d696e7461626c6545524332303a206f6e6c79206272696460448201527f67652063616e206d696e7420616e64206275726e00000000000000000000000060648201526084015b60405180910390fd5b6106ad8282610ee7565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885826040516106f591815260200190565b60405180910390a25050565b606061072c7f0000000000000000000000000000000000000000000000000000000000000000611007565b6107557f0000000000000000000000000000000000000000000000000000000000000000611007565b61077e7f0000000000000000000000000000000000000000000000000000000000000000611007565b60405160200161079093929190611566565b604051602081830303815290604052905090565b6060600480546104ce906114cc565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4f7074696d69736d4d696e7461626c6545524332303a206f6e6c79206272696460448201527f67652063616e206d696e7420616e64206275726e000000000000000000000000606482015260840161069a565b6108828282611144565b8173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040516106f591815260200190565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091908381101561098e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161069a565b61058282868684036109a9565b60003361055f818585610c34565b73ffffffffffffffffffffffffffffffffffffffff8316610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161069a565b73ffffffffffffffffffffffffffffffffffffffff8216610aee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161069a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c2e5781811015610c21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161069a565b610c2e84848484036109a9565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610cd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161069a565b73ffffffffffffffffffffffffffffffffffffffff8216610d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161069a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161069a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610e7490849061154e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610eda91815260200190565b60405180910390a3610c2e565b73ffffffffffffffffffffffffffffffffffffffff8216610f64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161069a565b8060026000828254610f76919061154e565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610fb090849061154e565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60608160000361104a57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611074578061105e816115dc565b915061106d9050600a83611643565b915061104e565b60008167ffffffffffffffff81111561108f5761108f611657565b6040519080825280601f01601f1916602001820160405280156110b9576020820181803683370190505b5090505b841561113c576110ce600183611686565b91506110db600a8661169d565b6110e690603061154e565b60f81b8183815181106110fb576110fb6116b1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611135600a86611643565b94506110bd565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff82166111e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161069a565b73ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260409020548181101561129d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161069a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906112d9908490611686565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b50565b60006020828403121561133b57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461136b57600080fd5b9392505050565b60005b8381101561138d578181015183820152602001611375565b83811115610c2e5750506000910152565b60208152600082518060208401526113bd816040850160208701611372565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461141357600080fd5b919050565b6000806040838503121561142b57600080fd5b611434836113ef565b946020939093013593505050565b60008060006060848603121561145757600080fd5b611460846113ef565b925061146e602085016113ef565b9150604084013590509250925092565b60006020828403121561149057600080fd5b61136b826113ef565b600080604083850312156114ac57600080fd5b6114b5836113ef565b91506114c3602084016113ef565b90509250929050565b600181811c908216806114e057607f821691505b602082108103611519577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156115615761156161151f565b500190565b60008451611578818460208901611372565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516115b4816001850160208a01611372565b600192019182015283516115cf816002840160208801611372565b0160020195945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361160d5761160d61151f565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261165257611652611614565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000828210156116985761169861151f565b500390565b6000826116ac576116ac611614565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a", +} + +// OptimismMintableERC20ABI is the input ABI used to generate the binding from. +// Deprecated: Use OptimismMintableERC20MetaData.ABI instead. +var OptimismMintableERC20ABI = OptimismMintableERC20MetaData.ABI + +// OptimismMintableERC20Bin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use OptimismMintableERC20MetaData.Bin instead. +var OptimismMintableERC20Bin = OptimismMintableERC20MetaData.Bin + +// DeployOptimismMintableERC20 deploys a new Ethereum contract, binding an instance of OptimismMintableERC20 to it. +func DeployOptimismMintableERC20(auth *bind.TransactOpts, backend bind.ContractBackend, _bridge common.Address, _remoteToken common.Address, _name string, _symbol string, _decimals uint8) (common.Address, *types.Transaction, *OptimismMintableERC20, error) { + parsed, err := OptimismMintableERC20MetaData.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(OptimismMintableERC20Bin), backend, _bridge, _remoteToken, _name, _symbol, _decimals) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &OptimismMintableERC20{OptimismMintableERC20Caller: OptimismMintableERC20Caller{contract: contract}, OptimismMintableERC20Transactor: OptimismMintableERC20Transactor{contract: contract}, OptimismMintableERC20Filterer: OptimismMintableERC20Filterer{contract: contract}}, nil +} + +// OptimismMintableERC20 is an auto generated Go binding around an Ethereum contract. +type OptimismMintableERC20 struct { + OptimismMintableERC20Caller // Read-only binding to the contract + OptimismMintableERC20Transactor // Write-only binding to the contract + OptimismMintableERC20Filterer // Log filterer for contract events +} + +// OptimismMintableERC20Caller is an auto generated read-only Go binding around an Ethereum contract. +type OptimismMintableERC20Caller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// OptimismMintableERC20Transactor is an auto generated write-only Go binding around an Ethereum contract. +type OptimismMintableERC20Transactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// OptimismMintableERC20Filterer is an auto generated log filtering Go binding around an Ethereum contract events. +type OptimismMintableERC20Filterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// OptimismMintableERC20Session is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type OptimismMintableERC20Session struct { + Contract *OptimismMintableERC20 // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// OptimismMintableERC20CallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type OptimismMintableERC20CallerSession struct { + Contract *OptimismMintableERC20Caller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// OptimismMintableERC20TransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type OptimismMintableERC20TransactorSession struct { + Contract *OptimismMintableERC20Transactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// OptimismMintableERC20Raw is an auto generated low-level Go binding around an Ethereum contract. +type OptimismMintableERC20Raw struct { + Contract *OptimismMintableERC20 // Generic contract binding to access the raw methods on +} + +// OptimismMintableERC20CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type OptimismMintableERC20CallerRaw struct { + Contract *OptimismMintableERC20Caller // Generic read-only contract binding to access the raw methods on +} + +// OptimismMintableERC20TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type OptimismMintableERC20TransactorRaw struct { + Contract *OptimismMintableERC20Transactor // Generic write-only contract binding to access the raw methods on +} + +// NewOptimismMintableERC20 creates a new instance of OptimismMintableERC20, bound to a specific deployed contract. +func NewOptimismMintableERC20(address common.Address, backend bind.ContractBackend) (*OptimismMintableERC20, error) { + contract, err := bindOptimismMintableERC20(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &OptimismMintableERC20{OptimismMintableERC20Caller: OptimismMintableERC20Caller{contract: contract}, OptimismMintableERC20Transactor: OptimismMintableERC20Transactor{contract: contract}, OptimismMintableERC20Filterer: OptimismMintableERC20Filterer{contract: contract}}, nil +} + +// NewOptimismMintableERC20Caller creates a new read-only instance of OptimismMintableERC20, bound to a specific deployed contract. +func NewOptimismMintableERC20Caller(address common.Address, caller bind.ContractCaller) (*OptimismMintableERC20Caller, error) { + contract, err := bindOptimismMintableERC20(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &OptimismMintableERC20Caller{contract: contract}, nil +} + +// NewOptimismMintableERC20Transactor creates a new write-only instance of OptimismMintableERC20, bound to a specific deployed contract. +func NewOptimismMintableERC20Transactor(address common.Address, transactor bind.ContractTransactor) (*OptimismMintableERC20Transactor, error) { + contract, err := bindOptimismMintableERC20(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &OptimismMintableERC20Transactor{contract: contract}, nil +} + +// NewOptimismMintableERC20Filterer creates a new log filterer instance of OptimismMintableERC20, bound to a specific deployed contract. +func NewOptimismMintableERC20Filterer(address common.Address, filterer bind.ContractFilterer) (*OptimismMintableERC20Filterer, error) { + contract, err := bindOptimismMintableERC20(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &OptimismMintableERC20Filterer{contract: contract}, nil +} + +// bindOptimismMintableERC20 binds a generic wrapper to an already deployed contract. +func bindOptimismMintableERC20(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(OptimismMintableERC20ABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_OptimismMintableERC20 *OptimismMintableERC20Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OptimismMintableERC20.Contract.OptimismMintableERC20Caller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_OptimismMintableERC20 *OptimismMintableERC20Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismMintableERC20.Contract.OptimismMintableERC20Transactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_OptimismMintableERC20 *OptimismMintableERC20Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OptimismMintableERC20.Contract.OptimismMintableERC20Transactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_OptimismMintableERC20 *OptimismMintableERC20CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OptimismMintableERC20.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_OptimismMintableERC20 *OptimismMintableERC20TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismMintableERC20.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_OptimismMintableERC20 *OptimismMintableERC20TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OptimismMintableERC20.Contract.contract.Transact(opts, method, params...) +} + +// BRIDGE is a free data retrieval call binding the contract method 0xee9a31a2. +// +// Solidity: function BRIDGE() view returns(address) +func (_OptimismMintableERC20 *OptimismMintableERC20Caller) BRIDGE(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismMintableERC20.contract.Call(opts, &out, "BRIDGE") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// BRIDGE is a free data retrieval call binding the contract method 0xee9a31a2. +// +// Solidity: function BRIDGE() view returns(address) +func (_OptimismMintableERC20 *OptimismMintableERC20Session) BRIDGE() (common.Address, error) { + return _OptimismMintableERC20.Contract.BRIDGE(&_OptimismMintableERC20.CallOpts) +} + +// BRIDGE is a free data retrieval call binding the contract method 0xee9a31a2. +// +// Solidity: function BRIDGE() view returns(address) +func (_OptimismMintableERC20 *OptimismMintableERC20CallerSession) BRIDGE() (common.Address, error) { + return _OptimismMintableERC20.Contract.BRIDGE(&_OptimismMintableERC20.CallOpts) +} + +// REMOTETOKEN is a free data retrieval call binding the contract method 0x033964be. +// +// Solidity: function REMOTE_TOKEN() view returns(address) +func (_OptimismMintableERC20 *OptimismMintableERC20Caller) REMOTETOKEN(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismMintableERC20.contract.Call(opts, &out, "REMOTE_TOKEN") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// REMOTETOKEN is a free data retrieval call binding the contract method 0x033964be. +// +// Solidity: function REMOTE_TOKEN() view returns(address) +func (_OptimismMintableERC20 *OptimismMintableERC20Session) REMOTETOKEN() (common.Address, error) { + return _OptimismMintableERC20.Contract.REMOTETOKEN(&_OptimismMintableERC20.CallOpts) +} + +// REMOTETOKEN is a free data retrieval call binding the contract method 0x033964be. +// +// Solidity: function REMOTE_TOKEN() view returns(address) +func (_OptimismMintableERC20 *OptimismMintableERC20CallerSession) REMOTETOKEN() (common.Address, error) { + return _OptimismMintableERC20.Contract.REMOTETOKEN(&_OptimismMintableERC20.CallOpts) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_OptimismMintableERC20 *OptimismMintableERC20Caller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) { + var out []interface{} + err := _OptimismMintableERC20.contract.Call(opts, &out, "allowance", owner, spender) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_OptimismMintableERC20 *OptimismMintableERC20Session) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _OptimismMintableERC20.Contract.Allowance(&_OptimismMintableERC20.CallOpts, owner, spender) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_OptimismMintableERC20 *OptimismMintableERC20CallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _OptimismMintableERC20.Contract.Allowance(&_OptimismMintableERC20.CallOpts, owner, spender) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_OptimismMintableERC20 *OptimismMintableERC20Caller) BalanceOf(opts *bind.CallOpts, account common.Address) (*big.Int, error) { + var out []interface{} + err := _OptimismMintableERC20.contract.Call(opts, &out, "balanceOf", account) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_OptimismMintableERC20 *OptimismMintableERC20Session) BalanceOf(account common.Address) (*big.Int, error) { + return _OptimismMintableERC20.Contract.BalanceOf(&_OptimismMintableERC20.CallOpts, account) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_OptimismMintableERC20 *OptimismMintableERC20CallerSession) BalanceOf(account common.Address) (*big.Int, error) { + return _OptimismMintableERC20.Contract.BalanceOf(&_OptimismMintableERC20.CallOpts, account) +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_OptimismMintableERC20 *OptimismMintableERC20Caller) Bridge(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismMintableERC20.contract.Call(opts, &out, "bridge") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_OptimismMintableERC20 *OptimismMintableERC20Session) Bridge() (common.Address, error) { + return _OptimismMintableERC20.Contract.Bridge(&_OptimismMintableERC20.CallOpts) +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_OptimismMintableERC20 *OptimismMintableERC20CallerSession) Bridge() (common.Address, error) { + return _OptimismMintableERC20.Contract.Bridge(&_OptimismMintableERC20.CallOpts) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_OptimismMintableERC20 *OptimismMintableERC20Caller) Decimals(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _OptimismMintableERC20.contract.Call(opts, &out, "decimals") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_OptimismMintableERC20 *OptimismMintableERC20Session) Decimals() (uint8, error) { + return _OptimismMintableERC20.Contract.Decimals(&_OptimismMintableERC20.CallOpts) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_OptimismMintableERC20 *OptimismMintableERC20CallerSession) Decimals() (uint8, error) { + return _OptimismMintableERC20.Contract.Decimals(&_OptimismMintableERC20.CallOpts) +} + +// L1Token is a free data retrieval call binding the contract method 0xc01e1bd6. +// +// Solidity: function l1Token() view returns(address) +func (_OptimismMintableERC20 *OptimismMintableERC20Caller) L1Token(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismMintableERC20.contract.Call(opts, &out, "l1Token") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// L1Token is a free data retrieval call binding the contract method 0xc01e1bd6. +// +// Solidity: function l1Token() view returns(address) +func (_OptimismMintableERC20 *OptimismMintableERC20Session) L1Token() (common.Address, error) { + return _OptimismMintableERC20.Contract.L1Token(&_OptimismMintableERC20.CallOpts) +} + +// L1Token is a free data retrieval call binding the contract method 0xc01e1bd6. +// +// Solidity: function l1Token() view returns(address) +func (_OptimismMintableERC20 *OptimismMintableERC20CallerSession) L1Token() (common.Address, error) { + return _OptimismMintableERC20.Contract.L1Token(&_OptimismMintableERC20.CallOpts) +} + +// L2Bridge is a free data retrieval call binding the contract method 0xae1f6aaf. +// +// Solidity: function l2Bridge() view returns(address) +func (_OptimismMintableERC20 *OptimismMintableERC20Caller) L2Bridge(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismMintableERC20.contract.Call(opts, &out, "l2Bridge") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// L2Bridge is a free data retrieval call binding the contract method 0xae1f6aaf. +// +// Solidity: function l2Bridge() view returns(address) +func (_OptimismMintableERC20 *OptimismMintableERC20Session) L2Bridge() (common.Address, error) { + return _OptimismMintableERC20.Contract.L2Bridge(&_OptimismMintableERC20.CallOpts) +} + +// L2Bridge is a free data retrieval call binding the contract method 0xae1f6aaf. +// +// Solidity: function l2Bridge() view returns(address) +func (_OptimismMintableERC20 *OptimismMintableERC20CallerSession) L2Bridge() (common.Address, error) { + return _OptimismMintableERC20.Contract.L2Bridge(&_OptimismMintableERC20.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_OptimismMintableERC20 *OptimismMintableERC20Caller) Name(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _OptimismMintableERC20.contract.Call(opts, &out, "name") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_OptimismMintableERC20 *OptimismMintableERC20Session) Name() (string, error) { + return _OptimismMintableERC20.Contract.Name(&_OptimismMintableERC20.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_OptimismMintableERC20 *OptimismMintableERC20CallerSession) Name() (string, error) { + return _OptimismMintableERC20.Contract.Name(&_OptimismMintableERC20.CallOpts) +} + +// RemoteToken is a free data retrieval call binding the contract method 0xd6c0b2c4. +// +// Solidity: function remoteToken() view returns(address) +func (_OptimismMintableERC20 *OptimismMintableERC20Caller) RemoteToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismMintableERC20.contract.Call(opts, &out, "remoteToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// RemoteToken is a free data retrieval call binding the contract method 0xd6c0b2c4. +// +// Solidity: function remoteToken() view returns(address) +func (_OptimismMintableERC20 *OptimismMintableERC20Session) RemoteToken() (common.Address, error) { + return _OptimismMintableERC20.Contract.RemoteToken(&_OptimismMintableERC20.CallOpts) +} + +// RemoteToken is a free data retrieval call binding the contract method 0xd6c0b2c4. +// +// Solidity: function remoteToken() view returns(address) +func (_OptimismMintableERC20 *OptimismMintableERC20CallerSession) RemoteToken() (common.Address, error) { + return _OptimismMintableERC20.Contract.RemoteToken(&_OptimismMintableERC20.CallOpts) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 _interfaceId) pure returns(bool) +func (_OptimismMintableERC20 *OptimismMintableERC20Caller) SupportsInterface(opts *bind.CallOpts, _interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _OptimismMintableERC20.contract.Call(opts, &out, "supportsInterface", _interfaceId) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 _interfaceId) pure returns(bool) +func (_OptimismMintableERC20 *OptimismMintableERC20Session) SupportsInterface(_interfaceId [4]byte) (bool, error) { + return _OptimismMintableERC20.Contract.SupportsInterface(&_OptimismMintableERC20.CallOpts, _interfaceId) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 _interfaceId) pure returns(bool) +func (_OptimismMintableERC20 *OptimismMintableERC20CallerSession) SupportsInterface(_interfaceId [4]byte) (bool, error) { + return _OptimismMintableERC20.Contract.SupportsInterface(&_OptimismMintableERC20.CallOpts, _interfaceId) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_OptimismMintableERC20 *OptimismMintableERC20Caller) Symbol(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _OptimismMintableERC20.contract.Call(opts, &out, "symbol") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_OptimismMintableERC20 *OptimismMintableERC20Session) Symbol() (string, error) { + return _OptimismMintableERC20.Contract.Symbol(&_OptimismMintableERC20.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_OptimismMintableERC20 *OptimismMintableERC20CallerSession) Symbol() (string, error) { + return _OptimismMintableERC20.Contract.Symbol(&_OptimismMintableERC20.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_OptimismMintableERC20 *OptimismMintableERC20Caller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _OptimismMintableERC20.contract.Call(opts, &out, "totalSupply") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_OptimismMintableERC20 *OptimismMintableERC20Session) TotalSupply() (*big.Int, error) { + return _OptimismMintableERC20.Contract.TotalSupply(&_OptimismMintableERC20.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_OptimismMintableERC20 *OptimismMintableERC20CallerSession) TotalSupply() (*big.Int, error) { + return _OptimismMintableERC20.Contract.TotalSupply(&_OptimismMintableERC20.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_OptimismMintableERC20 *OptimismMintableERC20Caller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _OptimismMintableERC20.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_OptimismMintableERC20 *OptimismMintableERC20Session) Version() (string, error) { + return _OptimismMintableERC20.Contract.Version(&_OptimismMintableERC20.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_OptimismMintableERC20 *OptimismMintableERC20CallerSession) Version() (string, error) { + return _OptimismMintableERC20.Contract.Version(&_OptimismMintableERC20.CallOpts) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_OptimismMintableERC20 *OptimismMintableERC20Transactor) Approve(opts *bind.TransactOpts, spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _OptimismMintableERC20.contract.Transact(opts, "approve", spender, amount) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_OptimismMintableERC20 *OptimismMintableERC20Session) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _OptimismMintableERC20.Contract.Approve(&_OptimismMintableERC20.TransactOpts, spender, amount) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_OptimismMintableERC20 *OptimismMintableERC20TransactorSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _OptimismMintableERC20.Contract.Approve(&_OptimismMintableERC20.TransactOpts, spender, amount) +} + +// Burn is a paid mutator transaction binding the contract method 0x9dc29fac. +// +// Solidity: function burn(address _from, uint256 _amount) returns() +func (_OptimismMintableERC20 *OptimismMintableERC20Transactor) Burn(opts *bind.TransactOpts, _from common.Address, _amount *big.Int) (*types.Transaction, error) { + return _OptimismMintableERC20.contract.Transact(opts, "burn", _from, _amount) +} + +// Burn is a paid mutator transaction binding the contract method 0x9dc29fac. +// +// Solidity: function burn(address _from, uint256 _amount) returns() +func (_OptimismMintableERC20 *OptimismMintableERC20Session) Burn(_from common.Address, _amount *big.Int) (*types.Transaction, error) { + return _OptimismMintableERC20.Contract.Burn(&_OptimismMintableERC20.TransactOpts, _from, _amount) +} + +// Burn is a paid mutator transaction binding the contract method 0x9dc29fac. +// +// Solidity: function burn(address _from, uint256 _amount) returns() +func (_OptimismMintableERC20 *OptimismMintableERC20TransactorSession) Burn(_from common.Address, _amount *big.Int) (*types.Transaction, error) { + return _OptimismMintableERC20.Contract.Burn(&_OptimismMintableERC20.TransactOpts, _from, _amount) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) +func (_OptimismMintableERC20 *OptimismMintableERC20Transactor) DecreaseAllowance(opts *bind.TransactOpts, spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _OptimismMintableERC20.contract.Transact(opts, "decreaseAllowance", spender, subtractedValue) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) +func (_OptimismMintableERC20 *OptimismMintableERC20Session) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _OptimismMintableERC20.Contract.DecreaseAllowance(&_OptimismMintableERC20.TransactOpts, spender, subtractedValue) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) +func (_OptimismMintableERC20 *OptimismMintableERC20TransactorSession) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _OptimismMintableERC20.Contract.DecreaseAllowance(&_OptimismMintableERC20.TransactOpts, spender, subtractedValue) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_OptimismMintableERC20 *OptimismMintableERC20Transactor) IncreaseAllowance(opts *bind.TransactOpts, spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _OptimismMintableERC20.contract.Transact(opts, "increaseAllowance", spender, addedValue) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_OptimismMintableERC20 *OptimismMintableERC20Session) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _OptimismMintableERC20.Contract.IncreaseAllowance(&_OptimismMintableERC20.TransactOpts, spender, addedValue) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_OptimismMintableERC20 *OptimismMintableERC20TransactorSession) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _OptimismMintableERC20.Contract.IncreaseAllowance(&_OptimismMintableERC20.TransactOpts, spender, addedValue) +} + +// Mint is a paid mutator transaction binding the contract method 0x40c10f19. +// +// Solidity: function mint(address _to, uint256 _amount) returns() +func (_OptimismMintableERC20 *OptimismMintableERC20Transactor) Mint(opts *bind.TransactOpts, _to common.Address, _amount *big.Int) (*types.Transaction, error) { + return _OptimismMintableERC20.contract.Transact(opts, "mint", _to, _amount) +} + +// Mint is a paid mutator transaction binding the contract method 0x40c10f19. +// +// Solidity: function mint(address _to, uint256 _amount) returns() +func (_OptimismMintableERC20 *OptimismMintableERC20Session) Mint(_to common.Address, _amount *big.Int) (*types.Transaction, error) { + return _OptimismMintableERC20.Contract.Mint(&_OptimismMintableERC20.TransactOpts, _to, _amount) +} + +// Mint is a paid mutator transaction binding the contract method 0x40c10f19. +// +// Solidity: function mint(address _to, uint256 _amount) returns() +func (_OptimismMintableERC20 *OptimismMintableERC20TransactorSession) Mint(_to common.Address, _amount *big.Int) (*types.Transaction, error) { + return _OptimismMintableERC20.Contract.Mint(&_OptimismMintableERC20.TransactOpts, _to, _amount) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_OptimismMintableERC20 *OptimismMintableERC20Transactor) Transfer(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _OptimismMintableERC20.contract.Transact(opts, "transfer", to, amount) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_OptimismMintableERC20 *OptimismMintableERC20Session) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _OptimismMintableERC20.Contract.Transfer(&_OptimismMintableERC20.TransactOpts, to, amount) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_OptimismMintableERC20 *OptimismMintableERC20TransactorSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _OptimismMintableERC20.Contract.Transfer(&_OptimismMintableERC20.TransactOpts, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_OptimismMintableERC20 *OptimismMintableERC20Transactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _OptimismMintableERC20.contract.Transact(opts, "transferFrom", from, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_OptimismMintableERC20 *OptimismMintableERC20Session) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _OptimismMintableERC20.Contract.TransferFrom(&_OptimismMintableERC20.TransactOpts, from, to, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool) +func (_OptimismMintableERC20 *OptimismMintableERC20TransactorSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _OptimismMintableERC20.Contract.TransferFrom(&_OptimismMintableERC20.TransactOpts, from, to, amount) +} + +// OptimismMintableERC20ApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the OptimismMintableERC20 contract. +type OptimismMintableERC20ApprovalIterator struct { + Event *OptimismMintableERC20Approval // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OptimismMintableERC20ApprovalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismMintableERC20Approval) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OptimismMintableERC20Approval) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OptimismMintableERC20ApprovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OptimismMintableERC20ApprovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OptimismMintableERC20Approval represents a Approval event raised by the OptimismMintableERC20 contract. +type OptimismMintableERC20Approval struct { + Owner common.Address + Spender common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_OptimismMintableERC20 *OptimismMintableERC20Filterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*OptimismMintableERC20ApprovalIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _OptimismMintableERC20.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return &OptimismMintableERC20ApprovalIterator{contract: _OptimismMintableERC20.contract, event: "Approval", logs: logs, sub: sub}, nil +} + +// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_OptimismMintableERC20 *OptimismMintableERC20Filterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *OptimismMintableERC20Approval, owner []common.Address, spender []common.Address) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _OptimismMintableERC20.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OptimismMintableERC20Approval) + if err := _OptimismMintableERC20.contract.UnpackLog(event, "Approval", 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 +} + +// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value) +func (_OptimismMintableERC20 *OptimismMintableERC20Filterer) ParseApproval(log types.Log) (*OptimismMintableERC20Approval, error) { + event := new(OptimismMintableERC20Approval) + if err := _OptimismMintableERC20.contract.UnpackLog(event, "Approval", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// OptimismMintableERC20BurnIterator is returned from FilterBurn and is used to iterate over the raw logs and unpacked data for Burn events raised by the OptimismMintableERC20 contract. +type OptimismMintableERC20BurnIterator struct { + Event *OptimismMintableERC20Burn // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OptimismMintableERC20BurnIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismMintableERC20Burn) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OptimismMintableERC20Burn) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OptimismMintableERC20BurnIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OptimismMintableERC20BurnIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OptimismMintableERC20Burn represents a Burn event raised by the OptimismMintableERC20 contract. +type OptimismMintableERC20Burn struct { + Account common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterBurn is a free log retrieval operation binding the contract event 0xcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5. +// +// Solidity: event Burn(address indexed account, uint256 amount) +func (_OptimismMintableERC20 *OptimismMintableERC20Filterer) FilterBurn(opts *bind.FilterOpts, account []common.Address) (*OptimismMintableERC20BurnIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _OptimismMintableERC20.contract.FilterLogs(opts, "Burn", accountRule) + if err != nil { + return nil, err + } + return &OptimismMintableERC20BurnIterator{contract: _OptimismMintableERC20.contract, event: "Burn", logs: logs, sub: sub}, nil +} + +// WatchBurn is a free log subscription operation binding the contract event 0xcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5. +// +// Solidity: event Burn(address indexed account, uint256 amount) +func (_OptimismMintableERC20 *OptimismMintableERC20Filterer) WatchBurn(opts *bind.WatchOpts, sink chan<- *OptimismMintableERC20Burn, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _OptimismMintableERC20.contract.WatchLogs(opts, "Burn", accountRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OptimismMintableERC20Burn) + if err := _OptimismMintableERC20.contract.UnpackLog(event, "Burn", 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 +} + +// ParseBurn is a log parse operation binding the contract event 0xcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5. +// +// Solidity: event Burn(address indexed account, uint256 amount) +func (_OptimismMintableERC20 *OptimismMintableERC20Filterer) ParseBurn(log types.Log) (*OptimismMintableERC20Burn, error) { + event := new(OptimismMintableERC20Burn) + if err := _OptimismMintableERC20.contract.UnpackLog(event, "Burn", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// OptimismMintableERC20MintIterator is returned from FilterMint and is used to iterate over the raw logs and unpacked data for Mint events raised by the OptimismMintableERC20 contract. +type OptimismMintableERC20MintIterator struct { + Event *OptimismMintableERC20Mint // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OptimismMintableERC20MintIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismMintableERC20Mint) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OptimismMintableERC20Mint) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OptimismMintableERC20MintIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OptimismMintableERC20MintIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OptimismMintableERC20Mint represents a Mint event raised by the OptimismMintableERC20 contract. +type OptimismMintableERC20Mint struct { + Account common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMint is a free log retrieval operation binding the contract event 0x0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885. +// +// Solidity: event Mint(address indexed account, uint256 amount) +func (_OptimismMintableERC20 *OptimismMintableERC20Filterer) FilterMint(opts *bind.FilterOpts, account []common.Address) (*OptimismMintableERC20MintIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _OptimismMintableERC20.contract.FilterLogs(opts, "Mint", accountRule) + if err != nil { + return nil, err + } + return &OptimismMintableERC20MintIterator{contract: _OptimismMintableERC20.contract, event: "Mint", logs: logs, sub: sub}, nil +} + +// WatchMint is a free log subscription operation binding the contract event 0x0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885. +// +// Solidity: event Mint(address indexed account, uint256 amount) +func (_OptimismMintableERC20 *OptimismMintableERC20Filterer) WatchMint(opts *bind.WatchOpts, sink chan<- *OptimismMintableERC20Mint, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _OptimismMintableERC20.contract.WatchLogs(opts, "Mint", accountRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OptimismMintableERC20Mint) + if err := _OptimismMintableERC20.contract.UnpackLog(event, "Mint", 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 +} + +// ParseMint is a log parse operation binding the contract event 0x0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885. +// +// Solidity: event Mint(address indexed account, uint256 amount) +func (_OptimismMintableERC20 *OptimismMintableERC20Filterer) ParseMint(log types.Log) (*OptimismMintableERC20Mint, error) { + event := new(OptimismMintableERC20Mint) + if err := _OptimismMintableERC20.contract.UnpackLog(event, "Mint", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// OptimismMintableERC20TransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the OptimismMintableERC20 contract. +type OptimismMintableERC20TransferIterator struct { + Event *OptimismMintableERC20Transfer // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OptimismMintableERC20TransferIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismMintableERC20Transfer) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OptimismMintableERC20Transfer) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OptimismMintableERC20TransferIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OptimismMintableERC20TransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OptimismMintableERC20Transfer represents a Transfer event raised by the OptimismMintableERC20 contract. +type OptimismMintableERC20Transfer struct { + From common.Address + To common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_OptimismMintableERC20 *OptimismMintableERC20Filterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismMintableERC20TransferIterator, 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 := _OptimismMintableERC20.contract.FilterLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return &OptimismMintableERC20TransferIterator{contract: _OptimismMintableERC20.contract, event: "Transfer", logs: logs, sub: sub}, nil +} + +// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_OptimismMintableERC20 *OptimismMintableERC20Filterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *OptimismMintableERC20Transfer, 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 := _OptimismMintableERC20.contract.WatchLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OptimismMintableERC20Transfer) + if err := _OptimismMintableERC20.contract.UnpackLog(event, "Transfer", 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 +} + +// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 value) +func (_OptimismMintableERC20 *OptimismMintableERC20Filterer) ParseTransfer(log types.Log) (*OptimismMintableERC20Transfer, error) { + event := new(OptimismMintableERC20Transfer) + if err := _OptimismMintableERC20.contract.UnpackLog(event, "Transfer", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-bindings/bindings/optimismmintableerc20_more.go b/op-bindings/bindings/optimismmintableerc20_more.go new file mode 100644 index 000000000..9370be018 --- /dev/null +++ b/op-bindings/bindings/optimismmintableerc20_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const OptimismMintableERC20StorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/universal/OptimismMintableERC20.sol:OptimismMintableERC20\",\"label\":\"_balances\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_mapping(t_address,t_uint256)\"},{\"astId\":1001,\"contract\":\"src/universal/OptimismMintableERC20.sol:OptimismMintableERC20\",\"label\":\"_allowances\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_mapping(t_address,t_mapping(t_address,t_uint256))\"},{\"astId\":1002,\"contract\":\"src/universal/OptimismMintableERC20.sol:OptimismMintableERC20\",\"label\":\"_totalSupply\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_uint256\"},{\"astId\":1003,\"contract\":\"src/universal/OptimismMintableERC20.sol:OptimismMintableERC20\",\"label\":\"_name\",\"offset\":0,\"slot\":\"3\",\"type\":\"t_string_storage\"},{\"astId\":1004,\"contract\":\"src/universal/OptimismMintableERC20.sol:OptimismMintableERC20\",\"label\":\"_symbol\",\"offset\":0,\"slot\":\"4\",\"type\":\"t_string_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_mapping(t_address,t_mapping(t_address,t_uint256))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(address =\u003e uint256))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_address,t_uint256)\"},\"t_mapping(t_address,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint256\"},\"t_string_storage\":{\"encoding\":\"bytes\",\"label\":\"string\",\"numberOfBytes\":\"32\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"}}}" + +var OptimismMintableERC20StorageLayout = new(solc.StorageLayout) + +var OptimismMintableERC20DeployedBin = "0x608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063ae1f6aaf1161008c578063dd62ed3e11610066578063dd62ed3e14610361578063e78cea9214610315578063ee9a31a2146103a757600080fd5b8063ae1f6aaf14610315578063c01e1bd61461033b578063d6c0b2c41461033b57600080fd5b80639dc29fac116100bd5780639dc29fac146102dc578063a457c2d7146102ef578063a9059cbb1461030257600080fd5b806370a082311461029e57806395d89b41146102d457600080fd5b806323b872dd1161012f5780633950935111610114578063395093511461026e57806340c10f191461028157806354fd4d501461029657600080fd5b806323b872dd1461022a578063313ce5671461023d57600080fd5b806306fdde031161016057806306fdde03146101f0578063095ea7b31461020557806318160ddd1461021857600080fd5b806301ffc9a71461017c578063033964be146101a4575b600080fd5b61018f61018a366004611329565b6103ce565b60405190151581526020015b60405180910390f35b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f86104bf565b60405161019b919061139e565b61018f610213366004611418565b610551565b6002545b60405190815260200161019b565b61018f610238366004611442565b610569565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161019b565b61018f61027c366004611418565b61058d565b61029461028f366004611418565b6105d9565b005b6101f8610701565b61021c6102ac36600461147e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101f86107a4565b6102946102ea366004611418565b6107b3565b61018f6102fd366004611418565b6108ca565b61018f610310366004611418565b61099b565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b61021c61036f366004611499565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007f1d1d8b63000000000000000000000000000000000000000000000000000000007fec4fc8e3000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000851683148061048757507fffffffff00000000000000000000000000000000000000000000000000000000858116908316145b806104b657507fffffffff00000000000000000000000000000000000000000000000000000000858116908216145b95945050505050565b6060600380546104ce906114cc565b80601f01602080910402602001604051908101604052809291908181526020018280546104fa906114cc565b80156105475780601f1061051c57610100808354040283529160200191610547565b820191906000526020600020905b81548152906001019060200180831161052a57829003601f168201915b5050505050905090565b60003361055f8185856109a9565b5060019392505050565b600033610577858285610b5d565b610582858585610c34565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061055f90829086906105d490879061154e565b6109a9565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146106a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4f7074696d69736d4d696e7461626c6545524332303a206f6e6c79206272696460448201527f67652063616e206d696e7420616e64206275726e00000000000000000000000060648201526084015b60405180910390fd5b6106ad8282610ee7565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885826040516106f591815260200190565b60405180910390a25050565b606061072c7f0000000000000000000000000000000000000000000000000000000000000000611007565b6107557f0000000000000000000000000000000000000000000000000000000000000000611007565b61077e7f0000000000000000000000000000000000000000000000000000000000000000611007565b60405160200161079093929190611566565b604051602081830303815290604052905090565b6060600480546104ce906114cc565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4f7074696d69736d4d696e7461626c6545524332303a206f6e6c79206272696460448201527f67652063616e206d696e7420616e64206275726e000000000000000000000000606482015260840161069a565b6108828282611144565b8173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040516106f591815260200190565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091908381101561098e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161069a565b61058282868684036109a9565b60003361055f818585610c34565b73ffffffffffffffffffffffffffffffffffffffff8316610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161069a565b73ffffffffffffffffffffffffffffffffffffffff8216610aee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161069a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c2e5781811015610c21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161069a565b610c2e84848484036109a9565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610cd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161069a565b73ffffffffffffffffffffffffffffffffffffffff8216610d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161069a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161069a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610e7490849061154e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610eda91815260200190565b60405180910390a3610c2e565b73ffffffffffffffffffffffffffffffffffffffff8216610f64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161069a565b8060026000828254610f76919061154e565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610fb090849061154e565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60608160000361104a57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611074578061105e816115dc565b915061106d9050600a83611643565b915061104e565b60008167ffffffffffffffff81111561108f5761108f611657565b6040519080825280601f01601f1916602001820160405280156110b9576020820181803683370190505b5090505b841561113c576110ce600183611686565b91506110db600a8661169d565b6110e690603061154e565b60f81b8183815181106110fb576110fb6116b1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611135600a86611643565b94506110bd565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff82166111e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161069a565b73ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260409020548181101561129d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161069a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906112d9908490611686565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b50565b60006020828403121561133b57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461136b57600080fd5b9392505050565b60005b8381101561138d578181015183820152602001611375565b83811115610c2e5750506000910152565b60208152600082518060208401526113bd816040850160208701611372565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461141357600080fd5b919050565b6000806040838503121561142b57600080fd5b611434836113ef565b946020939093013593505050565b60008060006060848603121561145757600080fd5b611460846113ef565b925061146e602085016113ef565b9150604084013590509250925092565b60006020828403121561149057600080fd5b61136b826113ef565b600080604083850312156114ac57600080fd5b6114b5836113ef565b91506114c3602084016113ef565b90509250929050565b600181811c908216806114e057607f821691505b602082108103611519577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156115615761156161151f565b500190565b60008451611578818460208901611372565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516115b4816001850160208a01611372565b600192019182015283516115cf816002840160208801611372565b0160020195945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361160d5761160d61151f565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261165257611652611614565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000828210156116985761169861151f565b500390565b6000826116ac576116ac611614565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(OptimismMintableERC20StorageLayoutJSON), OptimismMintableERC20StorageLayout); err != nil { + panic(err) + } + + layouts["OptimismMintableERC20"] = OptimismMintableERC20StorageLayout + deployedBytecodes["OptimismMintableERC20"] = OptimismMintableERC20DeployedBin +} diff --git a/op-bindings/bindings/optimismmintableerc20factory.go b/op-bindings/bindings/optimismmintableerc20factory.go new file mode 100644 index 000000000..8fc54d850 --- /dev/null +++ b/op-bindings/bindings/optimismmintableerc20factory.go @@ -0,0 +1,820 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// OptimismMintableERC20FactoryMetaData contains all meta data concerning the OptimismMintableERC20Factory contract. +var OptimismMintableERC20FactoryMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"deployer\",\"type\":\"address\"}],\"name\":\"OptimismMintableERC20Created\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"name\":\"StandardL2TokenCreated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BRIDGE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"createOptimismMintableERC20\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"_decimals\",\"type\":\"uint8\"}],\"name\":\"createOptimismMintableERC20WithDecimals\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"createStandardL2Token\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bridge\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b5061001b6000610020565b610118565b600054600390610100900460ff16158015610042575060005460ff8083169116105b6100a95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805461010060ff841661ffff19909216821717610100600160b01b03191661ff0019620100006001600160a01b0387160216179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6123cf806101276000396000f3fe60806040523480156200001157600080fd5b5060043610620000875760003560e01c8063c4d66de81162000062578063c4d66de81462000135578063ce5ac90f146200014e578063e78cea921462000165578063ee9a31a2146200018c57600080fd5b806354fd4d50146200008c578063896f93d114620000e15780638cf0629c146200011e575b600080fd5b620000c96040518060400160405280600581526020017f312e362e3000000000000000000000000000000000000000000000000000000081525081565b604051620000d89190620005d1565b60405180910390f35b620000f8620000f2366004620006f9565b620001b1565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620000d8565b620000f86200012f36600462000776565b620001c8565b6200014c620001463660046200080d565b620003c6565b005b620000f86200015f366004620006f9565b62000544565b600054620000f89062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16620000f8565b6000620001c084848462000544565b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff851662000273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d4d696e7461626c654552433230466163746f72793a206d7560448201527f73742070726f766964652072656d6f746520746f6b656e20616464726573730060648201526084015b60405180910390fd5b6000858585856040516020016200028e94939291906200082b565b604051602081830303815290604052805190602001209050600081600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1688888888604051620002de9062000555565b620002ee95949392919062000885565b8190604051809103906000f59050801580156200030f573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fceeb8e7d520d7f3b65fc11a262b91066940193b05d4f93df07cfdced0eb551cf60405160405180910390a360405133815273ffffffffffffffffffffffffffffffffffffffff80891691908316907f52fe89dd5930f343d25650b62fd367bae47088bcddffd2a88350a6ecdd620cdb9060200160405180910390a39695505050505050565b600054600390610100900460ff16158015620003e9575060005460ff8083169116105b62000477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200026a565b6000805461010060ff84167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009092168217177fffffffffffffffffffff000000000000000000000000000000000000000000ff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff6201000073ffffffffffffffffffffffffffffffffffffffff87160216179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6000620001c08484846012620001c8565b611ad880620008eb83390190565b6000815180845260005b818110156200058b576020818501810151868301820152016200056d565b818111156200059e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000620005e6602083018462000563565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146200061257600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126200065857600080fd5b813567ffffffffffffffff8082111562000676576200067662000617565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715620006bf57620006bf62000617565b81604052838152866020858801011115620006d957600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156200070f57600080fd5b6200071a84620005ed565b9250602084013567ffffffffffffffff808211156200073857600080fd5b620007468783880162000646565b935060408601359150808211156200075d57600080fd5b506200076c8682870162000646565b9150509250925092565b600080600080608085870312156200078d57600080fd5b6200079885620005ed565b9350602085013567ffffffffffffffff80821115620007b657600080fd5b620007c48883890162000646565b94506040870135915080821115620007db57600080fd5b50620007ea8782880162000646565b925050606085013560ff811681146200080257600080fd5b939692955090935050565b6000602082840312156200082057600080fd5b620005e682620005ed565b73ffffffffffffffffffffffffffffffffffffffff851681526080602082015260006200085c608083018662000563565b828103604084015262000870818662000563565b91505060ff8316606083015295945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a06040830152620008c060a083018662000563565b8281036060840152620008d4818662000563565b91505060ff83166080830152969550505050505056fe6101406040523480156200001257600080fd5b5060405162001ad838038062001ad8833981016040819052620000359162000178565b600160026000858560036200004b8382620002b3565b5060046200005a8282620002b3565b50505060809290925260a05260c0526001600160a01b0393841660e0529390921661010052505060ff16610120526200037f565b80516001600160a01b0381168114620000a657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000d357600080fd5b81516001600160401b0380821115620000f057620000f0620000ab565b604051601f8301601f19908116603f011681019082821181831017156200011b576200011b620000ab565b816040528381526020925086838588010111156200013857600080fd5b600091505b838210156200015c57858201830151818301840152908201906200013d565b838211156200016e5760008385830101525b9695505050505050565b600080600080600060a086880312156200019157600080fd5b6200019c866200008e565b9450620001ac602087016200008e565b60408701519094506001600160401b0380821115620001ca57600080fd5b620001d889838a01620000c1565b94506060880151915080821115620001ef57600080fd5b50620001fe88828901620000c1565b925050608086015160ff811681146200021657600080fd5b809150509295509295909350565b600181811c908216806200023957607f821691505b6020821081036200025a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002ae57600081815260208120601f850160051c81016020861015620002895750805b601f850160051c820191505b81811015620002aa5782815560010162000295565b5050505b505050565b81516001600160401b03811115620002cf57620002cf620000ab565b620002e781620002e0845462000224565b8462000260565b602080601f8311600181146200031f5760008415620003065750858301515b600019600386901b1c1916600185901b178555620002aa565b600085815260208120601f198616915b8281101562000350578886015182559484019460019091019084016200032f565b50858210156200036f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610120516116ed620003eb6000396000610244015260008181610317015281816103ac015281816105f101526107cb0152600081816101a9015261033d0152600061075a015260006107310152600061070801526116ed6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063ae1f6aaf1161008c578063dd62ed3e11610066578063dd62ed3e14610361578063e78cea9214610315578063ee9a31a2146103a757600080fd5b8063ae1f6aaf14610315578063c01e1bd61461033b578063d6c0b2c41461033b57600080fd5b80639dc29fac116100bd5780639dc29fac146102dc578063a457c2d7146102ef578063a9059cbb1461030257600080fd5b806370a082311461029e57806395d89b41146102d457600080fd5b806323b872dd1161012f5780633950935111610114578063395093511461026e57806340c10f191461028157806354fd4d501461029657600080fd5b806323b872dd1461022a578063313ce5671461023d57600080fd5b806306fdde031161016057806306fdde03146101f0578063095ea7b31461020557806318160ddd1461021857600080fd5b806301ffc9a71461017c578063033964be146101a4575b600080fd5b61018f61018a366004611329565b6103ce565b60405190151581526020015b60405180910390f35b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f86104bf565b60405161019b919061139e565b61018f610213366004611418565b610551565b6002545b60405190815260200161019b565b61018f610238366004611442565b610569565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161019b565b61018f61027c366004611418565b61058d565b61029461028f366004611418565b6105d9565b005b6101f8610701565b61021c6102ac36600461147e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101f86107a4565b6102946102ea366004611418565b6107b3565b61018f6102fd366004611418565b6108ca565b61018f610310366004611418565b61099b565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b61021c61036f366004611499565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007f1d1d8b63000000000000000000000000000000000000000000000000000000007fec4fc8e3000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000851683148061048757507fffffffff00000000000000000000000000000000000000000000000000000000858116908316145b806104b657507fffffffff00000000000000000000000000000000000000000000000000000000858116908216145b95945050505050565b6060600380546104ce906114cc565b80601f01602080910402602001604051908101604052809291908181526020018280546104fa906114cc565b80156105475780601f1061051c57610100808354040283529160200191610547565b820191906000526020600020905b81548152906001019060200180831161052a57829003601f168201915b5050505050905090565b60003361055f8185856109a9565b5060019392505050565b600033610577858285610b5d565b610582858585610c34565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061055f90829086906105d490879061154e565b6109a9565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146106a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4f7074696d69736d4d696e7461626c6545524332303a206f6e6c79206272696460448201527f67652063616e206d696e7420616e64206275726e00000000000000000000000060648201526084015b60405180910390fd5b6106ad8282610ee7565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885826040516106f591815260200190565b60405180910390a25050565b606061072c7f0000000000000000000000000000000000000000000000000000000000000000611007565b6107557f0000000000000000000000000000000000000000000000000000000000000000611007565b61077e7f0000000000000000000000000000000000000000000000000000000000000000611007565b60405160200161079093929190611566565b604051602081830303815290604052905090565b6060600480546104ce906114cc565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4f7074696d69736d4d696e7461626c6545524332303a206f6e6c79206272696460448201527f67652063616e206d696e7420616e64206275726e000000000000000000000000606482015260840161069a565b6108828282611144565b8173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040516106f591815260200190565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091908381101561098e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161069a565b61058282868684036109a9565b60003361055f818585610c34565b73ffffffffffffffffffffffffffffffffffffffff8316610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161069a565b73ffffffffffffffffffffffffffffffffffffffff8216610aee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161069a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c2e5781811015610c21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161069a565b610c2e84848484036109a9565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610cd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161069a565b73ffffffffffffffffffffffffffffffffffffffff8216610d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161069a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161069a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610e7490849061154e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610eda91815260200190565b60405180910390a3610c2e565b73ffffffffffffffffffffffffffffffffffffffff8216610f64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161069a565b8060026000828254610f76919061154e565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610fb090849061154e565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60608160000361104a57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611074578061105e816115dc565b915061106d9050600a83611643565b915061104e565b60008167ffffffffffffffff81111561108f5761108f611657565b6040519080825280601f01601f1916602001820160405280156110b9576020820181803683370190505b5090505b841561113c576110ce600183611686565b91506110db600a8661169d565b6110e690603061154e565b60f81b8183815181106110fb576110fb6116b1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611135600a86611643565b94506110bd565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff82166111e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161069a565b73ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260409020548181101561129d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161069a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906112d9908490611686565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b50565b60006020828403121561133b57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461136b57600080fd5b9392505050565b60005b8381101561138d578181015183820152602001611375565b83811115610c2e5750506000910152565b60208152600082518060208401526113bd816040850160208701611372565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461141357600080fd5b919050565b6000806040838503121561142b57600080fd5b611434836113ef565b946020939093013593505050565b60008060006060848603121561145757600080fd5b611460846113ef565b925061146e602085016113ef565b9150604084013590509250925092565b60006020828403121561149057600080fd5b61136b826113ef565b600080604083850312156114ac57600080fd5b6114b5836113ef565b91506114c3602084016113ef565b90509250929050565b600181811c908216806114e057607f821691505b602082108103611519577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156115615761156161151f565b500190565b60008451611578818460208901611372565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516115b4816001850160208a01611372565b600192019182015283516115cf816002840160208801611372565b0160020195945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361160d5761160d61151f565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261165257611652611614565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000828210156116985761169861151f565b500390565b6000826116ac576116ac611614565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000aa164736f6c634300080f000a", +} + +// OptimismMintableERC20FactoryABI is the input ABI used to generate the binding from. +// Deprecated: Use OptimismMintableERC20FactoryMetaData.ABI instead. +var OptimismMintableERC20FactoryABI = OptimismMintableERC20FactoryMetaData.ABI + +// OptimismMintableERC20FactoryBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use OptimismMintableERC20FactoryMetaData.Bin instead. +var OptimismMintableERC20FactoryBin = OptimismMintableERC20FactoryMetaData.Bin + +// DeployOptimismMintableERC20Factory deploys a new Ethereum contract, binding an instance of OptimismMintableERC20Factory to it. +func DeployOptimismMintableERC20Factory(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *OptimismMintableERC20Factory, error) { + parsed, err := OptimismMintableERC20FactoryMetaData.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(OptimismMintableERC20FactoryBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &OptimismMintableERC20Factory{OptimismMintableERC20FactoryCaller: OptimismMintableERC20FactoryCaller{contract: contract}, OptimismMintableERC20FactoryTransactor: OptimismMintableERC20FactoryTransactor{contract: contract}, OptimismMintableERC20FactoryFilterer: OptimismMintableERC20FactoryFilterer{contract: contract}}, nil +} + +// OptimismMintableERC20Factory is an auto generated Go binding around an Ethereum contract. +type OptimismMintableERC20Factory struct { + OptimismMintableERC20FactoryCaller // Read-only binding to the contract + OptimismMintableERC20FactoryTransactor // Write-only binding to the contract + OptimismMintableERC20FactoryFilterer // Log filterer for contract events +} + +// OptimismMintableERC20FactoryCaller is an auto generated read-only Go binding around an Ethereum contract. +type OptimismMintableERC20FactoryCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// OptimismMintableERC20FactoryTransactor is an auto generated write-only Go binding around an Ethereum contract. +type OptimismMintableERC20FactoryTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// OptimismMintableERC20FactoryFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type OptimismMintableERC20FactoryFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// OptimismMintableERC20FactorySession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type OptimismMintableERC20FactorySession struct { + Contract *OptimismMintableERC20Factory // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// OptimismMintableERC20FactoryCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type OptimismMintableERC20FactoryCallerSession struct { + Contract *OptimismMintableERC20FactoryCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// OptimismMintableERC20FactoryTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type OptimismMintableERC20FactoryTransactorSession struct { + Contract *OptimismMintableERC20FactoryTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// OptimismMintableERC20FactoryRaw is an auto generated low-level Go binding around an Ethereum contract. +type OptimismMintableERC20FactoryRaw struct { + Contract *OptimismMintableERC20Factory // Generic contract binding to access the raw methods on +} + +// OptimismMintableERC20FactoryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type OptimismMintableERC20FactoryCallerRaw struct { + Contract *OptimismMintableERC20FactoryCaller // Generic read-only contract binding to access the raw methods on +} + +// OptimismMintableERC20FactoryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type OptimismMintableERC20FactoryTransactorRaw struct { + Contract *OptimismMintableERC20FactoryTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewOptimismMintableERC20Factory creates a new instance of OptimismMintableERC20Factory, bound to a specific deployed contract. +func NewOptimismMintableERC20Factory(address common.Address, backend bind.ContractBackend) (*OptimismMintableERC20Factory, error) { + contract, err := bindOptimismMintableERC20Factory(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &OptimismMintableERC20Factory{OptimismMintableERC20FactoryCaller: OptimismMintableERC20FactoryCaller{contract: contract}, OptimismMintableERC20FactoryTransactor: OptimismMintableERC20FactoryTransactor{contract: contract}, OptimismMintableERC20FactoryFilterer: OptimismMintableERC20FactoryFilterer{contract: contract}}, nil +} + +// NewOptimismMintableERC20FactoryCaller creates a new read-only instance of OptimismMintableERC20Factory, bound to a specific deployed contract. +func NewOptimismMintableERC20FactoryCaller(address common.Address, caller bind.ContractCaller) (*OptimismMintableERC20FactoryCaller, error) { + contract, err := bindOptimismMintableERC20Factory(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &OptimismMintableERC20FactoryCaller{contract: contract}, nil +} + +// NewOptimismMintableERC20FactoryTransactor creates a new write-only instance of OptimismMintableERC20Factory, bound to a specific deployed contract. +func NewOptimismMintableERC20FactoryTransactor(address common.Address, transactor bind.ContractTransactor) (*OptimismMintableERC20FactoryTransactor, error) { + contract, err := bindOptimismMintableERC20Factory(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &OptimismMintableERC20FactoryTransactor{contract: contract}, nil +} + +// NewOptimismMintableERC20FactoryFilterer creates a new log filterer instance of OptimismMintableERC20Factory, bound to a specific deployed contract. +func NewOptimismMintableERC20FactoryFilterer(address common.Address, filterer bind.ContractFilterer) (*OptimismMintableERC20FactoryFilterer, error) { + contract, err := bindOptimismMintableERC20Factory(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &OptimismMintableERC20FactoryFilterer{contract: contract}, nil +} + +// bindOptimismMintableERC20Factory binds a generic wrapper to an already deployed contract. +func bindOptimismMintableERC20Factory(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(OptimismMintableERC20FactoryABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OptimismMintableERC20Factory.Contract.OptimismMintableERC20FactoryCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismMintableERC20Factory.Contract.OptimismMintableERC20FactoryTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OptimismMintableERC20Factory.Contract.OptimismMintableERC20FactoryTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OptimismMintableERC20Factory.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismMintableERC20Factory.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OptimismMintableERC20Factory.Contract.contract.Transact(opts, method, params...) +} + +// BRIDGE is a free data retrieval call binding the contract method 0xee9a31a2. +// +// Solidity: function BRIDGE() view returns(address) +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryCaller) BRIDGE(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismMintableERC20Factory.contract.Call(opts, &out, "BRIDGE") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// BRIDGE is a free data retrieval call binding the contract method 0xee9a31a2. +// +// Solidity: function BRIDGE() view returns(address) +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactorySession) BRIDGE() (common.Address, error) { + return _OptimismMintableERC20Factory.Contract.BRIDGE(&_OptimismMintableERC20Factory.CallOpts) +} + +// BRIDGE is a free data retrieval call binding the contract method 0xee9a31a2. +// +// Solidity: function BRIDGE() view returns(address) +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryCallerSession) BRIDGE() (common.Address, error) { + return _OptimismMintableERC20Factory.Contract.BRIDGE(&_OptimismMintableERC20Factory.CallOpts) +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryCaller) Bridge(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismMintableERC20Factory.contract.Call(opts, &out, "bridge") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactorySession) Bridge() (common.Address, error) { + return _OptimismMintableERC20Factory.Contract.Bridge(&_OptimismMintableERC20Factory.CallOpts) +} + +// Bridge is a free data retrieval call binding the contract method 0xe78cea92. +// +// Solidity: function bridge() view returns(address) +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryCallerSession) Bridge() (common.Address, error) { + return _OptimismMintableERC20Factory.Contract.Bridge(&_OptimismMintableERC20Factory.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _OptimismMintableERC20Factory.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactorySession) Version() (string, error) { + return _OptimismMintableERC20Factory.Contract.Version(&_OptimismMintableERC20Factory.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryCallerSession) Version() (string, error) { + return _OptimismMintableERC20Factory.Contract.Version(&_OptimismMintableERC20Factory.CallOpts) +} + +// CreateOptimismMintableERC20 is a paid mutator transaction binding the contract method 0xce5ac90f. +// +// Solidity: function createOptimismMintableERC20(address _remoteToken, string _name, string _symbol) returns(address) +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryTransactor) CreateOptimismMintableERC20(opts *bind.TransactOpts, _remoteToken common.Address, _name string, _symbol string) (*types.Transaction, error) { + return _OptimismMintableERC20Factory.contract.Transact(opts, "createOptimismMintableERC20", _remoteToken, _name, _symbol) +} + +// CreateOptimismMintableERC20 is a paid mutator transaction binding the contract method 0xce5ac90f. +// +// Solidity: function createOptimismMintableERC20(address _remoteToken, string _name, string _symbol) returns(address) +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactorySession) CreateOptimismMintableERC20(_remoteToken common.Address, _name string, _symbol string) (*types.Transaction, error) { + return _OptimismMintableERC20Factory.Contract.CreateOptimismMintableERC20(&_OptimismMintableERC20Factory.TransactOpts, _remoteToken, _name, _symbol) +} + +// CreateOptimismMintableERC20 is a paid mutator transaction binding the contract method 0xce5ac90f. +// +// Solidity: function createOptimismMintableERC20(address _remoteToken, string _name, string _symbol) returns(address) +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryTransactorSession) CreateOptimismMintableERC20(_remoteToken common.Address, _name string, _symbol string) (*types.Transaction, error) { + return _OptimismMintableERC20Factory.Contract.CreateOptimismMintableERC20(&_OptimismMintableERC20Factory.TransactOpts, _remoteToken, _name, _symbol) +} + +// CreateOptimismMintableERC20WithDecimals is a paid mutator transaction binding the contract method 0x8cf0629c. +// +// Solidity: function createOptimismMintableERC20WithDecimals(address _remoteToken, string _name, string _symbol, uint8 _decimals) returns(address) +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryTransactor) CreateOptimismMintableERC20WithDecimals(opts *bind.TransactOpts, _remoteToken common.Address, _name string, _symbol string, _decimals uint8) (*types.Transaction, error) { + return _OptimismMintableERC20Factory.contract.Transact(opts, "createOptimismMintableERC20WithDecimals", _remoteToken, _name, _symbol, _decimals) +} + +// CreateOptimismMintableERC20WithDecimals is a paid mutator transaction binding the contract method 0x8cf0629c. +// +// Solidity: function createOptimismMintableERC20WithDecimals(address _remoteToken, string _name, string _symbol, uint8 _decimals) returns(address) +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactorySession) CreateOptimismMintableERC20WithDecimals(_remoteToken common.Address, _name string, _symbol string, _decimals uint8) (*types.Transaction, error) { + return _OptimismMintableERC20Factory.Contract.CreateOptimismMintableERC20WithDecimals(&_OptimismMintableERC20Factory.TransactOpts, _remoteToken, _name, _symbol, _decimals) +} + +// CreateOptimismMintableERC20WithDecimals is a paid mutator transaction binding the contract method 0x8cf0629c. +// +// Solidity: function createOptimismMintableERC20WithDecimals(address _remoteToken, string _name, string _symbol, uint8 _decimals) returns(address) +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryTransactorSession) CreateOptimismMintableERC20WithDecimals(_remoteToken common.Address, _name string, _symbol string, _decimals uint8) (*types.Transaction, error) { + return _OptimismMintableERC20Factory.Contract.CreateOptimismMintableERC20WithDecimals(&_OptimismMintableERC20Factory.TransactOpts, _remoteToken, _name, _symbol, _decimals) +} + +// CreateStandardL2Token is a paid mutator transaction binding the contract method 0x896f93d1. +// +// Solidity: function createStandardL2Token(address _remoteToken, string _name, string _symbol) returns(address) +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryTransactor) CreateStandardL2Token(opts *bind.TransactOpts, _remoteToken common.Address, _name string, _symbol string) (*types.Transaction, error) { + return _OptimismMintableERC20Factory.contract.Transact(opts, "createStandardL2Token", _remoteToken, _name, _symbol) +} + +// CreateStandardL2Token is a paid mutator transaction binding the contract method 0x896f93d1. +// +// Solidity: function createStandardL2Token(address _remoteToken, string _name, string _symbol) returns(address) +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactorySession) CreateStandardL2Token(_remoteToken common.Address, _name string, _symbol string) (*types.Transaction, error) { + return _OptimismMintableERC20Factory.Contract.CreateStandardL2Token(&_OptimismMintableERC20Factory.TransactOpts, _remoteToken, _name, _symbol) +} + +// CreateStandardL2Token is a paid mutator transaction binding the contract method 0x896f93d1. +// +// Solidity: function createStandardL2Token(address _remoteToken, string _name, string _symbol) returns(address) +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryTransactorSession) CreateStandardL2Token(_remoteToken common.Address, _name string, _symbol string) (*types.Transaction, error) { + return _OptimismMintableERC20Factory.Contract.CreateStandardL2Token(&_OptimismMintableERC20Factory.TransactOpts, _remoteToken, _name, _symbol) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _bridge) returns() +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryTransactor) Initialize(opts *bind.TransactOpts, _bridge common.Address) (*types.Transaction, error) { + return _OptimismMintableERC20Factory.contract.Transact(opts, "initialize", _bridge) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _bridge) returns() +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactorySession) Initialize(_bridge common.Address) (*types.Transaction, error) { + return _OptimismMintableERC20Factory.Contract.Initialize(&_OptimismMintableERC20Factory.TransactOpts, _bridge) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _bridge) returns() +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryTransactorSession) Initialize(_bridge common.Address) (*types.Transaction, error) { + return _OptimismMintableERC20Factory.Contract.Initialize(&_OptimismMintableERC20Factory.TransactOpts, _bridge) +} + +// OptimismMintableERC20FactoryInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the OptimismMintableERC20Factory contract. +type OptimismMintableERC20FactoryInitializedIterator struct { + Event *OptimismMintableERC20FactoryInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OptimismMintableERC20FactoryInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismMintableERC20FactoryInitialized) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OptimismMintableERC20FactoryInitialized) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OptimismMintableERC20FactoryInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OptimismMintableERC20FactoryInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OptimismMintableERC20FactoryInitialized represents a Initialized event raised by the OptimismMintableERC20Factory contract. +type OptimismMintableERC20FactoryInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryFilterer) FilterInitialized(opts *bind.FilterOpts) (*OptimismMintableERC20FactoryInitializedIterator, error) { + + logs, sub, err := _OptimismMintableERC20Factory.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &OptimismMintableERC20FactoryInitializedIterator{contract: _OptimismMintableERC20Factory.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *OptimismMintableERC20FactoryInitialized) (event.Subscription, error) { + + logs, sub, err := _OptimismMintableERC20Factory.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: + // New log arrived, parse the event and forward to the user + event := new(OptimismMintableERC20FactoryInitialized) + if err := _OptimismMintableERC20Factory.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 +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryFilterer) ParseInitialized(log types.Log) (*OptimismMintableERC20FactoryInitialized, error) { + event := new(OptimismMintableERC20FactoryInitialized) + if err := _OptimismMintableERC20Factory.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// OptimismMintableERC20FactoryOptimismMintableERC20CreatedIterator is returned from FilterOptimismMintableERC20Created and is used to iterate over the raw logs and unpacked data for OptimismMintableERC20Created events raised by the OptimismMintableERC20Factory contract. +type OptimismMintableERC20FactoryOptimismMintableERC20CreatedIterator struct { + Event *OptimismMintableERC20FactoryOptimismMintableERC20Created // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OptimismMintableERC20FactoryOptimismMintableERC20CreatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismMintableERC20FactoryOptimismMintableERC20Created) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OptimismMintableERC20FactoryOptimismMintableERC20Created) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OptimismMintableERC20FactoryOptimismMintableERC20CreatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OptimismMintableERC20FactoryOptimismMintableERC20CreatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OptimismMintableERC20FactoryOptimismMintableERC20Created represents a OptimismMintableERC20Created event raised by the OptimismMintableERC20Factory contract. +type OptimismMintableERC20FactoryOptimismMintableERC20Created struct { + LocalToken common.Address + RemoteToken common.Address + Deployer common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOptimismMintableERC20Created is a free log retrieval operation binding the contract event 0x52fe89dd5930f343d25650b62fd367bae47088bcddffd2a88350a6ecdd620cdb. +// +// Solidity: event OptimismMintableERC20Created(address indexed localToken, address indexed remoteToken, address deployer) +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryFilterer) FilterOptimismMintableERC20Created(opts *bind.FilterOpts, localToken []common.Address, remoteToken []common.Address) (*OptimismMintableERC20FactoryOptimismMintableERC20CreatedIterator, error) { + + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + + logs, sub, err := _OptimismMintableERC20Factory.contract.FilterLogs(opts, "OptimismMintableERC20Created", localTokenRule, remoteTokenRule) + if err != nil { + return nil, err + } + return &OptimismMintableERC20FactoryOptimismMintableERC20CreatedIterator{contract: _OptimismMintableERC20Factory.contract, event: "OptimismMintableERC20Created", logs: logs, sub: sub}, nil +} + +// WatchOptimismMintableERC20Created is a free log subscription operation binding the contract event 0x52fe89dd5930f343d25650b62fd367bae47088bcddffd2a88350a6ecdd620cdb. +// +// Solidity: event OptimismMintableERC20Created(address indexed localToken, address indexed remoteToken, address deployer) +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryFilterer) WatchOptimismMintableERC20Created(opts *bind.WatchOpts, sink chan<- *OptimismMintableERC20FactoryOptimismMintableERC20Created, localToken []common.Address, remoteToken []common.Address) (event.Subscription, error) { + + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + + logs, sub, err := _OptimismMintableERC20Factory.contract.WatchLogs(opts, "OptimismMintableERC20Created", localTokenRule, remoteTokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OptimismMintableERC20FactoryOptimismMintableERC20Created) + if err := _OptimismMintableERC20Factory.contract.UnpackLog(event, "OptimismMintableERC20Created", 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 +} + +// ParseOptimismMintableERC20Created is a log parse operation binding the contract event 0x52fe89dd5930f343d25650b62fd367bae47088bcddffd2a88350a6ecdd620cdb. +// +// Solidity: event OptimismMintableERC20Created(address indexed localToken, address indexed remoteToken, address deployer) +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryFilterer) ParseOptimismMintableERC20Created(log types.Log) (*OptimismMintableERC20FactoryOptimismMintableERC20Created, error) { + event := new(OptimismMintableERC20FactoryOptimismMintableERC20Created) + if err := _OptimismMintableERC20Factory.contract.UnpackLog(event, "OptimismMintableERC20Created", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// OptimismMintableERC20FactoryStandardL2TokenCreatedIterator is returned from FilterStandardL2TokenCreated and is used to iterate over the raw logs and unpacked data for StandardL2TokenCreated events raised by the OptimismMintableERC20Factory contract. +type OptimismMintableERC20FactoryStandardL2TokenCreatedIterator struct { + Event *OptimismMintableERC20FactoryStandardL2TokenCreated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OptimismMintableERC20FactoryStandardL2TokenCreatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismMintableERC20FactoryStandardL2TokenCreated) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OptimismMintableERC20FactoryStandardL2TokenCreated) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OptimismMintableERC20FactoryStandardL2TokenCreatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OptimismMintableERC20FactoryStandardL2TokenCreatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OptimismMintableERC20FactoryStandardL2TokenCreated represents a StandardL2TokenCreated event raised by the OptimismMintableERC20Factory contract. +type OptimismMintableERC20FactoryStandardL2TokenCreated struct { + RemoteToken common.Address + LocalToken common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStandardL2TokenCreated is a free log retrieval operation binding the contract event 0xceeb8e7d520d7f3b65fc11a262b91066940193b05d4f93df07cfdced0eb551cf. +// +// Solidity: event StandardL2TokenCreated(address indexed remoteToken, address indexed localToken) +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryFilterer) FilterStandardL2TokenCreated(opts *bind.FilterOpts, remoteToken []common.Address, localToken []common.Address) (*OptimismMintableERC20FactoryStandardL2TokenCreatedIterator, error) { + + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + + logs, sub, err := _OptimismMintableERC20Factory.contract.FilterLogs(opts, "StandardL2TokenCreated", remoteTokenRule, localTokenRule) + if err != nil { + return nil, err + } + return &OptimismMintableERC20FactoryStandardL2TokenCreatedIterator{contract: _OptimismMintableERC20Factory.contract, event: "StandardL2TokenCreated", logs: logs, sub: sub}, nil +} + +// WatchStandardL2TokenCreated is a free log subscription operation binding the contract event 0xceeb8e7d520d7f3b65fc11a262b91066940193b05d4f93df07cfdced0eb551cf. +// +// Solidity: event StandardL2TokenCreated(address indexed remoteToken, address indexed localToken) +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryFilterer) WatchStandardL2TokenCreated(opts *bind.WatchOpts, sink chan<- *OptimismMintableERC20FactoryStandardL2TokenCreated, remoteToken []common.Address, localToken []common.Address) (event.Subscription, error) { + + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + + logs, sub, err := _OptimismMintableERC20Factory.contract.WatchLogs(opts, "StandardL2TokenCreated", remoteTokenRule, localTokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OptimismMintableERC20FactoryStandardL2TokenCreated) + if err := _OptimismMintableERC20Factory.contract.UnpackLog(event, "StandardL2TokenCreated", 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 +} + +// ParseStandardL2TokenCreated is a log parse operation binding the contract event 0xceeb8e7d520d7f3b65fc11a262b91066940193b05d4f93df07cfdced0eb551cf. +// +// Solidity: event StandardL2TokenCreated(address indexed remoteToken, address indexed localToken) +func (_OptimismMintableERC20Factory *OptimismMintableERC20FactoryFilterer) ParseStandardL2TokenCreated(log types.Log) (*OptimismMintableERC20FactoryStandardL2TokenCreated, error) { + event := new(OptimismMintableERC20FactoryStandardL2TokenCreated) + if err := _OptimismMintableERC20Factory.contract.UnpackLog(event, "StandardL2TokenCreated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-bindings/bindings/optimismmintableerc20factory_more.go b/op-bindings/bindings/optimismmintableerc20factory_more.go new file mode 100644 index 000000000..9f4b0da36 --- /dev/null +++ b/op-bindings/bindings/optimismmintableerc20factory_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const OptimismMintableERC20FactoryStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/universal/OptimismMintableERC20Factory.sol:OptimismMintableERC20Factory\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"src/universal/OptimismMintableERC20Factory.sol:OptimismMintableERC20Factory\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"src/universal/OptimismMintableERC20Factory.sol:OptimismMintableERC20Factory\",\"label\":\"bridge\",\"offset\":2,\"slot\":\"0\",\"type\":\"t_address\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" + +var OptimismMintableERC20FactoryStorageLayout = new(solc.StorageLayout) + +var OptimismMintableERC20FactoryDeployedBin = "0x60806040523480156200001157600080fd5b5060043610620000875760003560e01c8063c4d66de81162000062578063c4d66de81462000135578063ce5ac90f146200014e578063e78cea921462000165578063ee9a31a2146200018c57600080fd5b806354fd4d50146200008c578063896f93d114620000e15780638cf0629c146200011e575b600080fd5b620000c96040518060400160405280600581526020017f312e362e3000000000000000000000000000000000000000000000000000000081525081565b604051620000d89190620005d1565b60405180910390f35b620000f8620000f2366004620006f9565b620001b1565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620000d8565b620000f86200012f36600462000776565b620001c8565b6200014c620001463660046200080d565b620003c6565b005b620000f86200015f366004620006f9565b62000544565b600054620000f89062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16620000f8565b6000620001c084848462000544565b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff851662000273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d4d696e7461626c654552433230466163746f72793a206d7560448201527f73742070726f766964652072656d6f746520746f6b656e20616464726573730060648201526084015b60405180910390fd5b6000858585856040516020016200028e94939291906200082b565b604051602081830303815290604052805190602001209050600081600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1688888888604051620002de9062000555565b620002ee95949392919062000885565b8190604051809103906000f59050801580156200030f573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fceeb8e7d520d7f3b65fc11a262b91066940193b05d4f93df07cfdced0eb551cf60405160405180910390a360405133815273ffffffffffffffffffffffffffffffffffffffff80891691908316907f52fe89dd5930f343d25650b62fd367bae47088bcddffd2a88350a6ecdd620cdb9060200160405180910390a39695505050505050565b600054600390610100900460ff16158015620003e9575060005460ff8083169116105b62000477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200026a565b6000805461010060ff84167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009092168217177fffffffffffffffffffff000000000000000000000000000000000000000000ff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff6201000073ffffffffffffffffffffffffffffffffffffffff87160216179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6000620001c08484846012620001c8565b611ad880620008eb83390190565b6000815180845260005b818110156200058b576020818501810151868301820152016200056d565b818111156200059e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000620005e6602083018462000563565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146200061257600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126200065857600080fd5b813567ffffffffffffffff8082111562000676576200067662000617565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715620006bf57620006bf62000617565b81604052838152866020858801011115620006d957600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156200070f57600080fd5b6200071a84620005ed565b9250602084013567ffffffffffffffff808211156200073857600080fd5b620007468783880162000646565b935060408601359150808211156200075d57600080fd5b506200076c8682870162000646565b9150509250925092565b600080600080608085870312156200078d57600080fd5b6200079885620005ed565b9350602085013567ffffffffffffffff80821115620007b657600080fd5b620007c48883890162000646565b94506040870135915080821115620007db57600080fd5b50620007ea8782880162000646565b925050606085013560ff811681146200080257600080fd5b939692955090935050565b6000602082840312156200082057600080fd5b620005e682620005ed565b73ffffffffffffffffffffffffffffffffffffffff851681526080602082015260006200085c608083018662000563565b828103604084015262000870818662000563565b91505060ff8316606083015295945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a06040830152620008c060a083018662000563565b8281036060840152620008d4818662000563565b91505060ff83166080830152969550505050505056fe6101406040523480156200001257600080fd5b5060405162001ad838038062001ad8833981016040819052620000359162000178565b600160026000858560036200004b8382620002b3565b5060046200005a8282620002b3565b50505060809290925260a05260c0526001600160a01b0393841660e0529390921661010052505060ff16610120526200037f565b80516001600160a01b0381168114620000a657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000d357600080fd5b81516001600160401b0380821115620000f057620000f0620000ab565b604051601f8301601f19908116603f011681019082821181831017156200011b576200011b620000ab565b816040528381526020925086838588010111156200013857600080fd5b600091505b838210156200015c57858201830151818301840152908201906200013d565b838211156200016e5760008385830101525b9695505050505050565b600080600080600060a086880312156200019157600080fd5b6200019c866200008e565b9450620001ac602087016200008e565b60408701519094506001600160401b0380821115620001ca57600080fd5b620001d889838a01620000c1565b94506060880151915080821115620001ef57600080fd5b50620001fe88828901620000c1565b925050608086015160ff811681146200021657600080fd5b809150509295509295909350565b600181811c908216806200023957607f821691505b6020821081036200025a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002ae57600081815260208120601f850160051c81016020861015620002895750805b601f850160051c820191505b81811015620002aa5782815560010162000295565b5050505b505050565b81516001600160401b03811115620002cf57620002cf620000ab565b620002e781620002e0845462000224565b8462000260565b602080601f8311600181146200031f5760008415620003065750858301515b600019600386901b1c1916600185901b178555620002aa565b600085815260208120601f198616915b8281101562000350578886015182559484019460019091019084016200032f565b50858210156200036f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610120516116ed620003eb6000396000610244015260008181610317015281816103ac015281816105f101526107cb0152600081816101a9015261033d0152600061075a015260006107310152600061070801526116ed6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063ae1f6aaf1161008c578063dd62ed3e11610066578063dd62ed3e14610361578063e78cea9214610315578063ee9a31a2146103a757600080fd5b8063ae1f6aaf14610315578063c01e1bd61461033b578063d6c0b2c41461033b57600080fd5b80639dc29fac116100bd5780639dc29fac146102dc578063a457c2d7146102ef578063a9059cbb1461030257600080fd5b806370a082311461029e57806395d89b41146102d457600080fd5b806323b872dd1161012f5780633950935111610114578063395093511461026e57806340c10f191461028157806354fd4d501461029657600080fd5b806323b872dd1461022a578063313ce5671461023d57600080fd5b806306fdde031161016057806306fdde03146101f0578063095ea7b31461020557806318160ddd1461021857600080fd5b806301ffc9a71461017c578063033964be146101a4575b600080fd5b61018f61018a366004611329565b6103ce565b60405190151581526020015b60405180910390f35b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f86104bf565b60405161019b919061139e565b61018f610213366004611418565b610551565b6002545b60405190815260200161019b565b61018f610238366004611442565b610569565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161019b565b61018f61027c366004611418565b61058d565b61029461028f366004611418565b6105d9565b005b6101f8610701565b61021c6102ac36600461147e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101f86107a4565b6102946102ea366004611418565b6107b3565b61018f6102fd366004611418565b6108ca565b61018f610310366004611418565b61099b565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b7f00000000000000000000000000000000000000000000000000000000000000006101cb565b61021c61036f366004611499565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007f1d1d8b63000000000000000000000000000000000000000000000000000000007fec4fc8e3000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000851683148061048757507fffffffff00000000000000000000000000000000000000000000000000000000858116908316145b806104b657507fffffffff00000000000000000000000000000000000000000000000000000000858116908216145b95945050505050565b6060600380546104ce906114cc565b80601f01602080910402602001604051908101604052809291908181526020018280546104fa906114cc565b80156105475780601f1061051c57610100808354040283529160200191610547565b820191906000526020600020905b81548152906001019060200180831161052a57829003601f168201915b5050505050905090565b60003361055f8185856109a9565b5060019392505050565b600033610577858285610b5d565b610582858585610c34565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061055f90829086906105d490879061154e565b6109a9565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146106a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4f7074696d69736d4d696e7461626c6545524332303a206f6e6c79206272696460448201527f67652063616e206d696e7420616e64206275726e00000000000000000000000060648201526084015b60405180910390fd5b6106ad8282610ee7565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885826040516106f591815260200190565b60405180910390a25050565b606061072c7f0000000000000000000000000000000000000000000000000000000000000000611007565b6107557f0000000000000000000000000000000000000000000000000000000000000000611007565b61077e7f0000000000000000000000000000000000000000000000000000000000000000611007565b60405160200161079093929190611566565b604051602081830303815290604052905090565b6060600480546104ce906114cc565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4f7074696d69736d4d696e7461626c6545524332303a206f6e6c79206272696460448201527f67652063616e206d696e7420616e64206275726e000000000000000000000000606482015260840161069a565b6108828282611144565b8173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040516106f591815260200190565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091908381101561098e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161069a565b61058282868684036109a9565b60003361055f818585610c34565b73ffffffffffffffffffffffffffffffffffffffff8316610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161069a565b73ffffffffffffffffffffffffffffffffffffffff8216610aee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161069a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c2e5781811015610c21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161069a565b610c2e84848484036109a9565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610cd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161069a565b73ffffffffffffffffffffffffffffffffffffffff8216610d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161069a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161069a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610e7490849061154e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610eda91815260200190565b60405180910390a3610c2e565b73ffffffffffffffffffffffffffffffffffffffff8216610f64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161069a565b8060026000828254610f76919061154e565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610fb090849061154e565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60608160000361104a57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611074578061105e816115dc565b915061106d9050600a83611643565b915061104e565b60008167ffffffffffffffff81111561108f5761108f611657565b6040519080825280601f01601f1916602001820160405280156110b9576020820181803683370190505b5090505b841561113c576110ce600183611686565b91506110db600a8661169d565b6110e690603061154e565b60f81b8183815181106110fb576110fb6116b1565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611135600a86611643565b94506110bd565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff82166111e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161069a565b73ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260409020548181101561129d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161069a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906112d9908490611686565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b50565b60006020828403121561133b57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461136b57600080fd5b9392505050565b60005b8381101561138d578181015183820152602001611375565b83811115610c2e5750506000910152565b60208152600082518060208401526113bd816040850160208701611372565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461141357600080fd5b919050565b6000806040838503121561142b57600080fd5b611434836113ef565b946020939093013593505050565b60008060006060848603121561145757600080fd5b611460846113ef565b925061146e602085016113ef565b9150604084013590509250925092565b60006020828403121561149057600080fd5b61136b826113ef565b600080604083850312156114ac57600080fd5b6114b5836113ef565b91506114c3602084016113ef565b90509250929050565b600181811c908216806114e057607f821691505b602082108103611519577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156115615761156161151f565b500190565b60008451611578818460208901611372565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516115b4816001850160208a01611372565b600192019182015283516115cf816002840160208801611372565b0160020195945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361160d5761160d61151f565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261165257611652611614565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000828210156116985761169861151f565b500390565b6000826116ac576116ac611614565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000aa164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(OptimismMintableERC20FactoryStorageLayoutJSON), OptimismMintableERC20FactoryStorageLayout); err != nil { + panic(err) + } + + layouts["OptimismMintableERC20Factory"] = OptimismMintableERC20FactoryStorageLayout + deployedBytecodes["OptimismMintableERC20Factory"] = OptimismMintableERC20FactoryDeployedBin +} diff --git a/op-bindings/bindings/optimismmintableerc721factory.go b/op-bindings/bindings/optimismmintableerc721factory.go new file mode 100644 index 000000000..f31cd8e95 --- /dev/null +++ b/op-bindings/bindings/optimismmintableerc721factory.go @@ -0,0 +1,501 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// OptimismMintableERC721FactoryMetaData contains all meta data concerning the OptimismMintableERC721Factory contract. +var OptimismMintableERC721FactoryMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_bridge\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_remoteChainId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"deployer\",\"type\":\"address\"}],\"name\":\"OptimismMintableERC721Created\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BRIDGE\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REMOTE_CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"createOptimismMintableERC721\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isOptimismMintableERC721\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60c060405234801561001057600080fd5b5060405161392638038061392683398101604081905261002f91610045565b6001600160a01b0390911660805260a05261007f565b6000806040838503121561005857600080fd5b82516001600160a01b038116811461006f57600080fd5b6020939093015192949293505050565b60805160a0516138746100b26000396000818161010601526102c401526000818161017a01526102a301526138746000f3fe60806040523480156200001157600080fd5b50600436106200006f5760003560e01c80637d1d0c5b11620000565780637d1d0c5b1462000100578063d97df6521462000137578063ee9a31a2146200017457600080fd5b806354fd4d5014620000745780635572acae14620000c9575b600080fd5b620000b16040518060400160405280600581526020017f312e342e3000000000000000000000000000000000000000000000000000000081525081565b604051620000c0919062000435565b60405180910390f35b620000ef620000da3660046200047b565b60006020819052908152604090205460ff1681565b6040519015158152602001620000c0565b620001287f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001620000c0565b6200014e620001483660046200057b565b6200019c565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620000c0565b6200014e7f000000000000000000000000000000000000000000000000000000000000000081565b600073ffffffffffffffffffffffffffffffffffffffff84166200026d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f4f7074696d69736d4d696e7461626c65455243373231466163746f72793a204c908201527f3120746f6b656e20616464726573732063616e6e6f742062652061646472657360648201527f7328302900000000000000000000000000000000000000000000000000000000608482015260a40160405180910390fd5b60008484846040516020016200028693929190620005f8565b6040516020818303038152906040528051906020012090506000817f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000888888604051620002f490620003b9565b6200030495949392919062000647565b8190604051809103906000f590508015801562000325573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff8181166000818152602081815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590513381529394509189169290917fe72783bb8e0ca31286b85278da59684dd814df9762a52f0837f89edd1483b299910160405180910390a395945050505050565b6131bf80620006a983390190565b6000815180845260005b81811015620003ef57602081850181015186830182015201620003d1565b8181111562000402576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006200044a6020830184620003c7565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146200047657600080fd5b919050565b6000602082840312156200048e57600080fd5b6200044a8262000451565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112620004da57600080fd5b813567ffffffffffffffff80821115620004f857620004f862000499565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171562000541576200054162000499565b816040528381528660208588010111156200055b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156200059157600080fd5b6200059c8462000451565b9250602084013567ffffffffffffffff80821115620005ba57600080fd5b620005c887838801620004c8565b93506040860135915080821115620005df57600080fd5b50620005ee86828701620004c8565b9150509250925092565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000620006296060830185620003c7565b82810360408401526200063d8185620003c7565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835286602084015280861660408401525060a060608301526200068860a0830185620003c7565b82810360808401526200069c8185620003c7565b9897505050505050505056fe60e06040523480156200001157600080fd5b50604051620031bf380380620031bf83398101604081905262000034916200062d565b8181600062000044838262000756565b50600162000053828262000756565b5050506001600160a01b038516620000d85760405162461bcd60e51b815260206004820152603360248201527f4f7074696d69736d4d696e7461626c654552433732313a20627269646765206360448201527f616e6e6f7420626520616464726573732830290000000000000000000000000060648201526084015b60405180910390fd5b83600003620001505760405162461bcd60e51b815260206004820152603660248201527f4f7074696d69736d4d696e7461626c654552433732313a2072656d6f7465206360448201527f6861696e2069642063616e6e6f74206265207a65726f000000000000000000006064820152608401620000cf565b6001600160a01b038316620001ce5760405162461bcd60e51b815260206004820152603960248201527f4f7074696d69736d4d696e7461626c654552433732313a2072656d6f7465207460448201527f6f6b656e2063616e6e6f742062652061646472657373283029000000000000006064820152608401620000cf565b60808490526001600160a01b0383811660a081905290861660c0526200020290601462000256602090811b62000eed17901c565b62000218856200041660201b620011301760201c565b6040516020016200022b92919062000822565b604051602081830303815290604052600a90816200024a919062000756565b50505050505062000993565b6060600062000267836002620008ac565b62000274906002620008ce565b6001600160401b038111156200028e576200028e62000553565b6040519080825280601f01601f191660200182016040528015620002b9576020820181803683370190505b509050600360fc1b81600081518110620002d757620002d7620008e9565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110620003095762000309620008e9565b60200101906001600160f81b031916908160001a90535060006200032f846002620008ac565b6200033c906001620008ce565b90505b6001811115620003be576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110620003745762000374620008e9565b1a60f81b8282815181106200038d576200038d620008e9565b60200101906001600160f81b031916908160001a90535060049490941c93620003b681620008ff565b90506200033f565b5083156200040f5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401620000cf565b9392505050565b6060816000036200043e5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156200046e5780620004558162000919565b9150620004669050600a836200094b565b915062000442565b6000816001600160401b038111156200048b576200048b62000553565b6040519080825280601f01601f191660200182016040528015620004b6576020820181803683370190505b5090505b84156200052e57620004ce60018362000962565b9150620004dd600a866200097c565b620004ea906030620008ce565b60f81b818381518110620005025762000502620008e9565b60200101906001600160f81b031916908160001a90535062000526600a866200094b565b9450620004ba565b949350505050565b80516001600160a01b03811681146200054e57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620005865781810151838201526020016200056c565b8381111562000596576000848401525b50505050565b600082601f830112620005ae57600080fd5b81516001600160401b0380821115620005cb57620005cb62000553565b604051601f8301601f19908116603f01168101908282118183101715620005f657620005f662000553565b816040528381528660208588010111156200061057600080fd5b6200062384602083016020890162000569565b9695505050505050565b600080600080600060a086880312156200064657600080fd5b620006518662000536565b945060208601519350620006686040870162000536565b60608701519093506001600160401b03808211156200068657600080fd5b6200069489838a016200059c565b93506080880151915080821115620006ab57600080fd5b50620006ba888289016200059c565b9150509295509295909350565b600181811c90821680620006dc57607f821691505b602082108103620006fd57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200075157600081815260208120601f850160051c810160208610156200072c5750805b601f850160051c820191505b818110156200074d5782815560010162000738565b5050505b505050565b81516001600160401b0381111562000772576200077262000553565b6200078a81620007838454620006c7565b8462000703565b602080601f831160018114620007c25760008415620007a95750858301515b600019600386901b1c1916600185901b1785556200074d565b600085815260208120601f198616915b82811015620007f357888601518255948401946001909101908401620007d2565b5085821015620008125787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6832ba3432b932bab69d60b91b8152600083516200084881600985016020880162000569565b600160fe1b60099184019182015283516200086b81600a84016020880162000569565b712f746f6b656e5552493f75696e743235363d60701b600a9290910191820152601c01949350505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620008c957620008c962000896565b500290565b60008219821115620008e457620008e462000896565b500190565b634e487b7160e01b600052603260045260246000fd5b60008162000911576200091162000896565b506000190190565b6000600182016200092e576200092e62000896565b5060010190565b634e487b7160e01b600052601260045260246000fd5b6000826200095d576200095d62000935565b500490565b60008282101562000977576200097762000896565b500390565b6000826200098e576200098e62000935565b500690565b60805160a05160c0516127d9620009e6600039600081816103e20152818161047a01528181610b210152610c430152600081816101e001526103bc015260008181610329015261040801526127d96000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c80637d1d0c5b116100ee578063c87b56dd11610097578063e78cea9211610071578063e78cea92146103e0578063e951819614610406578063e985e9c51461042c578063ee9a31a21461047557600080fd5b8063c87b56dd1461039f578063d547cfb7146103b2578063d6c0b2c4146103ba57600080fd5b8063a1448194116100c8578063a144819414610366578063a22cb46514610379578063b88d4fde1461038c57600080fd5b80637d1d0c5b1461032457806395d89b411461034b5780639dc29fac1461035357600080fd5b806323b872dd1161015b5780634f6ccce7116101355780634f6ccce7146102af57806354fd4d50146102c25780636352211e146102fe57806370a082311461031157600080fd5b806323b872dd146102765780632f745c591461028957806342842e0e1461029c57600080fd5b8063081812fc1161018c578063081812fc1461023c578063095ea7b31461024f57806318160ddd1461026457600080fd5b806301ffc9a7146101b3578063033964be146101db57806306fdde0314610227575b600080fd5b6101c66101c1366004612226565b61049c565b60405190151581526020015b60405180910390f35b6102027f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d2565b61022f6104fa565b6040516101d291906122b9565b61020261024a3660046122cc565b61058c565b61026261025d36600461230e565b6105c0565b005b6008545b6040519081526020016101d2565b610262610284366004612338565b610751565b61026861029736600461230e565b6107f2565b6102626102aa366004612338565b6108c1565b6102686102bd3660046122cc565b6108dc565b61022f6040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b61020261030c3660046122cc565b61099a565b61026861031f366004612374565b610a2c565b6102687f000000000000000000000000000000000000000000000000000000000000000081565b61022f610afa565b61026261036136600461230e565b610b09565b61026261037436600461230e565b610c2b565b61026261038736600461238f565b610d42565b61026261039a3660046123fa565b610d51565b61022f6103ad3660046122cc565b610df9565b61022f610e5f565b7f0000000000000000000000000000000000000000000000000000000000000000610202565b7f0000000000000000000000000000000000000000000000000000000000000000610202565b7f0000000000000000000000000000000000000000000000000000000000000000610268565b6101c661043a3660046124f4565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b6102027f000000000000000000000000000000000000000000000000000000000000000081565b60007f74259ebf000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083168114806104f357506104f38361126d565b9392505050565b60606000805461050990612527565b80601f016020809104026020016040519081016040528092919081815260200182805461053590612527565b80156105825780601f1061055757610100808354040283529160200191610582565b820191906000526020600020905b81548152906001019060200180831161056557829003601f168201915b5050505050905090565b6000610597826112c3565b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60006105cb8261099a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361068d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff821614806106b657506106b6813361043a565b610742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610684565b61074c8383611351565b505050565b61075b33826113f1565b6107e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206e6f7220617070726f7665640000000000000000000000000000000000006064820152608401610684565b61074c8383836114b0565b60006107fd83610a2c565b821061088b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610684565b5073ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205490565b61074c83838360405180602001604052806000815250610d51565b60006108e760085490565b8210610975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610684565b600882815481106109885761098861257a565b90600052602060002001549050919050565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610a26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610684565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff8216610ad1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152608401610684565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b60606001805461050990612527565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610bce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4f7074696d69736d4d696e7461626c654552433732313a206f6e6c792062726960448201527f6467652063616e2063616c6c20746869732066756e6374696f6e0000000000006064820152608401610684565b610bd781611722565b8173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca582604051610c1f91815260200190565b60405180910390a25050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610cf0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4f7074696d69736d4d696e7461626c654552433732313a206f6e6c792062726960448201527f6467652063616e2063616c6c20746869732066756e6374696f6e0000000000006064820152608401610684565b610cfa82826117fb565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688582604051610c1f91815260200190565b610d4d338383611815565b5050565b610d5b33836113f1565b610de7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206e6f7220617070726f7665640000000000000000000000000000000000006064820152608401610684565b610df384848484611942565b50505050565b6060610e04826112c3565b6000610e0e6119e5565b90506000815111610e2e57604051806020016040528060008152506104f3565b80610e3884611130565b604051602001610e499291906125a9565b6040516020818303038152906040529392505050565b600a8054610e6c90612527565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9890612527565b8015610ee55780601f10610eba57610100808354040283529160200191610ee5565b820191906000526020600020905b815481529060010190602001808311610ec857829003601f168201915b505050505081565b60606000610efc836002612607565b610f07906002612644565b67ffffffffffffffff811115610f1f57610f1f6123cb565b6040519080825280601f01601f191660200182016040528015610f49576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110610f8057610f8061257a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110610fe357610fe361257a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600061101f846002612607565b61102a906001612644565b90505b60018111156110c7577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061106b5761106b61257a565b1a60f81b8282815181106110815761108161257a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c936110c08161265c565b905061102d565b5083156104f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610684565b60608160000361117357505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561119d578061118781612691565b91506111969050600a836126f8565b9150611177565b60008167ffffffffffffffff8111156111b8576111b86123cb565b6040519080825280601f01601f1916602001820160405280156111e2576020820181803683370190505b5090505b8415611265576111f760018361270c565b9150611204600a86612723565b61120f906030612644565b60f81b8183815181106112245761122461257a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061125e600a866126f8565b94506111e6565b949350505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d63000000000000000000000000000000000000000000000000000000001480610a265750610a26826119f4565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1661134e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610684565b50565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915581906113ab8261099a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806113fd8361099a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061146b575073ffffffffffffffffffffffffffffffffffffffff80821660009081526005602090815260408083209388168352929052205460ff165b8061126557508373ffffffffffffffffffffffffffffffffffffffff166114918461058c565b73ffffffffffffffffffffffffffffffffffffffff1614949350505050565b8273ffffffffffffffffffffffffffffffffffffffff166114d08261099a565b73ffffffffffffffffffffffffffffffffffffffff1614611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610684565b73ffffffffffffffffffffffffffffffffffffffff8216611615576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610684565b611620838383611ad7565b61162b600082611351565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546001929061166190849061270c565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080546001929061169c908490612644565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600061172d8261099a565b905061173b81600084611ad7565b611746600083611351565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040812080546001929061177c90849061270c565b909155505060008281526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b610d4d828260405180602001604052806000815250611bdd565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610684565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61194d8484846114b0565b61195984848484611c80565b610df3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610684565b6060600a805461050990612527565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480611a8757507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610a2657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610a26565b73ffffffffffffffffffffffffffffffffffffffff8316611b3f57611b3a81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611b7c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611b7c57611b7c8382611e73565b73ffffffffffffffffffffffffffffffffffffffff8216611ba05761074c81611f2a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461074c5761074c8282611fd9565b611be7838361202a565b611bf46000848484611c80565b61074c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610684565b600073ffffffffffffffffffffffffffffffffffffffff84163b15611e68576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290611cf7903390899088908890600401612737565b6020604051808303816000875af1925050508015611d50575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611d4d91810190612780565b60015b611e1d573d808015611d7e576040519150601f19603f3d011682016040523d82523d6000602084013e611d83565b606091505b508051600003611e15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610684565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611265565b506001949350505050565b60006001611e8084610a2c565b611e8a919061270c565b600083815260076020526040902054909150808214611eea5773ffffffffffffffffffffffffffffffffffffffff841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b50600091825260076020908152604080842084905573ffffffffffffffffffffffffffffffffffffffff9094168352600681528383209183525290812055565b600854600090611f3c9060019061270c565b60008381526009602052604081205460088054939450909284908110611f6457611f6461257a565b906000526020600020015490508060088381548110611f8557611f8561257a565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611fbd57611fbd61279d565b6001900381819060005260206000200160009055905550505050565b6000611fe483610a2c565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b73ffffffffffffffffffffffffffffffffffffffff82166120a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610684565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1615612133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610684565b61213f60008383611ad7565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290612175908490612644565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461134e57600080fd5b60006020828403121561223857600080fd5b81356104f3816121f8565b60005b8381101561225e578181015183820152602001612246565b83811115610df35750506000910152565b60008151808452612287816020860160208601612243565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006104f3602083018461226f565b6000602082840312156122de57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461230957600080fd5b919050565b6000806040838503121561232157600080fd5b61232a836122e5565b946020939093013593505050565b60008060006060848603121561234d57600080fd5b612356846122e5565b9250612364602085016122e5565b9150604084013590509250925092565b60006020828403121561238657600080fd5b6104f3826122e5565b600080604083850312156123a257600080fd5b6123ab836122e5565b9150602083013580151581146123c057600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000806080858703121561241057600080fd5b612419856122e5565b9350612427602086016122e5565b925060408501359150606085013567ffffffffffffffff8082111561244b57600080fd5b818701915087601f83011261245f57600080fd5b813581811115612471576124716123cb565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156124b7576124b76123cb565b816040528281528a60208487010111156124d057600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561250757600080fd5b612510836122e5565b915061251e602084016122e5565b90509250929050565b600181811c9082168061253b57607f821691505b602082108103612574577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600083516125bb818460208801612243565b8351908301906125cf818360208801612243565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561263f5761263f6125d8565b500290565b60008219821115612657576126576125d8565b500190565b60008161266b5761266b6125d8565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036126c2576126c26125d8565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612707576127076126c9565b500490565b60008282101561271e5761271e6125d8565b500390565b600082612732576127326126c9565b500690565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612776608083018461226f565b9695505050505050565b60006020828403121561279257600080fd5b81516104f3816121f8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c634300080f000aa164736f6c634300080f000a", +} + +// OptimismMintableERC721FactoryABI is the input ABI used to generate the binding from. +// Deprecated: Use OptimismMintableERC721FactoryMetaData.ABI instead. +var OptimismMintableERC721FactoryABI = OptimismMintableERC721FactoryMetaData.ABI + +// OptimismMintableERC721FactoryBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use OptimismMintableERC721FactoryMetaData.Bin instead. +var OptimismMintableERC721FactoryBin = OptimismMintableERC721FactoryMetaData.Bin + +// DeployOptimismMintableERC721Factory deploys a new Ethereum contract, binding an instance of OptimismMintableERC721Factory to it. +func DeployOptimismMintableERC721Factory(auth *bind.TransactOpts, backend bind.ContractBackend, _bridge common.Address, _remoteChainId *big.Int) (common.Address, *types.Transaction, *OptimismMintableERC721Factory, error) { + parsed, err := OptimismMintableERC721FactoryMetaData.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(OptimismMintableERC721FactoryBin), backend, _bridge, _remoteChainId) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &OptimismMintableERC721Factory{OptimismMintableERC721FactoryCaller: OptimismMintableERC721FactoryCaller{contract: contract}, OptimismMintableERC721FactoryTransactor: OptimismMintableERC721FactoryTransactor{contract: contract}, OptimismMintableERC721FactoryFilterer: OptimismMintableERC721FactoryFilterer{contract: contract}}, nil +} + +// OptimismMintableERC721Factory is an auto generated Go binding around an Ethereum contract. +type OptimismMintableERC721Factory struct { + OptimismMintableERC721FactoryCaller // Read-only binding to the contract + OptimismMintableERC721FactoryTransactor // Write-only binding to the contract + OptimismMintableERC721FactoryFilterer // Log filterer for contract events +} + +// OptimismMintableERC721FactoryCaller is an auto generated read-only Go binding around an Ethereum contract. +type OptimismMintableERC721FactoryCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// OptimismMintableERC721FactoryTransactor is an auto generated write-only Go binding around an Ethereum contract. +type OptimismMintableERC721FactoryTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// OptimismMintableERC721FactoryFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type OptimismMintableERC721FactoryFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// OptimismMintableERC721FactorySession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type OptimismMintableERC721FactorySession struct { + Contract *OptimismMintableERC721Factory // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// OptimismMintableERC721FactoryCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type OptimismMintableERC721FactoryCallerSession struct { + Contract *OptimismMintableERC721FactoryCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// OptimismMintableERC721FactoryTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type OptimismMintableERC721FactoryTransactorSession struct { + Contract *OptimismMintableERC721FactoryTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// OptimismMintableERC721FactoryRaw is an auto generated low-level Go binding around an Ethereum contract. +type OptimismMintableERC721FactoryRaw struct { + Contract *OptimismMintableERC721Factory // Generic contract binding to access the raw methods on +} + +// OptimismMintableERC721FactoryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type OptimismMintableERC721FactoryCallerRaw struct { + Contract *OptimismMintableERC721FactoryCaller // Generic read-only contract binding to access the raw methods on +} + +// OptimismMintableERC721FactoryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type OptimismMintableERC721FactoryTransactorRaw struct { + Contract *OptimismMintableERC721FactoryTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewOptimismMintableERC721Factory creates a new instance of OptimismMintableERC721Factory, bound to a specific deployed contract. +func NewOptimismMintableERC721Factory(address common.Address, backend bind.ContractBackend) (*OptimismMintableERC721Factory, error) { + contract, err := bindOptimismMintableERC721Factory(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &OptimismMintableERC721Factory{OptimismMintableERC721FactoryCaller: OptimismMintableERC721FactoryCaller{contract: contract}, OptimismMintableERC721FactoryTransactor: OptimismMintableERC721FactoryTransactor{contract: contract}, OptimismMintableERC721FactoryFilterer: OptimismMintableERC721FactoryFilterer{contract: contract}}, nil +} + +// NewOptimismMintableERC721FactoryCaller creates a new read-only instance of OptimismMintableERC721Factory, bound to a specific deployed contract. +func NewOptimismMintableERC721FactoryCaller(address common.Address, caller bind.ContractCaller) (*OptimismMintableERC721FactoryCaller, error) { + contract, err := bindOptimismMintableERC721Factory(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &OptimismMintableERC721FactoryCaller{contract: contract}, nil +} + +// NewOptimismMintableERC721FactoryTransactor creates a new write-only instance of OptimismMintableERC721Factory, bound to a specific deployed contract. +func NewOptimismMintableERC721FactoryTransactor(address common.Address, transactor bind.ContractTransactor) (*OptimismMintableERC721FactoryTransactor, error) { + contract, err := bindOptimismMintableERC721Factory(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &OptimismMintableERC721FactoryTransactor{contract: contract}, nil +} + +// NewOptimismMintableERC721FactoryFilterer creates a new log filterer instance of OptimismMintableERC721Factory, bound to a specific deployed contract. +func NewOptimismMintableERC721FactoryFilterer(address common.Address, filterer bind.ContractFilterer) (*OptimismMintableERC721FactoryFilterer, error) { + contract, err := bindOptimismMintableERC721Factory(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &OptimismMintableERC721FactoryFilterer{contract: contract}, nil +} + +// bindOptimismMintableERC721Factory binds a generic wrapper to an already deployed contract. +func bindOptimismMintableERC721Factory(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(OptimismMintableERC721FactoryABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_OptimismMintableERC721Factory *OptimismMintableERC721FactoryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OptimismMintableERC721Factory.Contract.OptimismMintableERC721FactoryCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_OptimismMintableERC721Factory *OptimismMintableERC721FactoryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismMintableERC721Factory.Contract.OptimismMintableERC721FactoryTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_OptimismMintableERC721Factory *OptimismMintableERC721FactoryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OptimismMintableERC721Factory.Contract.OptimismMintableERC721FactoryTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_OptimismMintableERC721Factory *OptimismMintableERC721FactoryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OptimismMintableERC721Factory.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_OptimismMintableERC721Factory *OptimismMintableERC721FactoryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismMintableERC721Factory.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_OptimismMintableERC721Factory *OptimismMintableERC721FactoryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OptimismMintableERC721Factory.Contract.contract.Transact(opts, method, params...) +} + +// BRIDGE is a free data retrieval call binding the contract method 0xee9a31a2. +// +// Solidity: function BRIDGE() view returns(address) +func (_OptimismMintableERC721Factory *OptimismMintableERC721FactoryCaller) BRIDGE(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismMintableERC721Factory.contract.Call(opts, &out, "BRIDGE") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// BRIDGE is a free data retrieval call binding the contract method 0xee9a31a2. +// +// Solidity: function BRIDGE() view returns(address) +func (_OptimismMintableERC721Factory *OptimismMintableERC721FactorySession) BRIDGE() (common.Address, error) { + return _OptimismMintableERC721Factory.Contract.BRIDGE(&_OptimismMintableERC721Factory.CallOpts) +} + +// BRIDGE is a free data retrieval call binding the contract method 0xee9a31a2. +// +// Solidity: function BRIDGE() view returns(address) +func (_OptimismMintableERC721Factory *OptimismMintableERC721FactoryCallerSession) BRIDGE() (common.Address, error) { + return _OptimismMintableERC721Factory.Contract.BRIDGE(&_OptimismMintableERC721Factory.CallOpts) +} + +// REMOTECHAINID is a free data retrieval call binding the contract method 0x7d1d0c5b. +// +// Solidity: function REMOTE_CHAIN_ID() view returns(uint256) +func (_OptimismMintableERC721Factory *OptimismMintableERC721FactoryCaller) REMOTECHAINID(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _OptimismMintableERC721Factory.contract.Call(opts, &out, "REMOTE_CHAIN_ID") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// REMOTECHAINID is a free data retrieval call binding the contract method 0x7d1d0c5b. +// +// Solidity: function REMOTE_CHAIN_ID() view returns(uint256) +func (_OptimismMintableERC721Factory *OptimismMintableERC721FactorySession) REMOTECHAINID() (*big.Int, error) { + return _OptimismMintableERC721Factory.Contract.REMOTECHAINID(&_OptimismMintableERC721Factory.CallOpts) +} + +// REMOTECHAINID is a free data retrieval call binding the contract method 0x7d1d0c5b. +// +// Solidity: function REMOTE_CHAIN_ID() view returns(uint256) +func (_OptimismMintableERC721Factory *OptimismMintableERC721FactoryCallerSession) REMOTECHAINID() (*big.Int, error) { + return _OptimismMintableERC721Factory.Contract.REMOTECHAINID(&_OptimismMintableERC721Factory.CallOpts) +} + +// IsOptimismMintableERC721 is a free data retrieval call binding the contract method 0x5572acae. +// +// Solidity: function isOptimismMintableERC721(address ) view returns(bool) +func (_OptimismMintableERC721Factory *OptimismMintableERC721FactoryCaller) IsOptimismMintableERC721(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var out []interface{} + err := _OptimismMintableERC721Factory.contract.Call(opts, &out, "isOptimismMintableERC721", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsOptimismMintableERC721 is a free data retrieval call binding the contract method 0x5572acae. +// +// Solidity: function isOptimismMintableERC721(address ) view returns(bool) +func (_OptimismMintableERC721Factory *OptimismMintableERC721FactorySession) IsOptimismMintableERC721(arg0 common.Address) (bool, error) { + return _OptimismMintableERC721Factory.Contract.IsOptimismMintableERC721(&_OptimismMintableERC721Factory.CallOpts, arg0) +} + +// IsOptimismMintableERC721 is a free data retrieval call binding the contract method 0x5572acae. +// +// Solidity: function isOptimismMintableERC721(address ) view returns(bool) +func (_OptimismMintableERC721Factory *OptimismMintableERC721FactoryCallerSession) IsOptimismMintableERC721(arg0 common.Address) (bool, error) { + return _OptimismMintableERC721Factory.Contract.IsOptimismMintableERC721(&_OptimismMintableERC721Factory.CallOpts, arg0) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_OptimismMintableERC721Factory *OptimismMintableERC721FactoryCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _OptimismMintableERC721Factory.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_OptimismMintableERC721Factory *OptimismMintableERC721FactorySession) Version() (string, error) { + return _OptimismMintableERC721Factory.Contract.Version(&_OptimismMintableERC721Factory.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_OptimismMintableERC721Factory *OptimismMintableERC721FactoryCallerSession) Version() (string, error) { + return _OptimismMintableERC721Factory.Contract.Version(&_OptimismMintableERC721Factory.CallOpts) +} + +// CreateOptimismMintableERC721 is a paid mutator transaction binding the contract method 0xd97df652. +// +// Solidity: function createOptimismMintableERC721(address _remoteToken, string _name, string _symbol) returns(address) +func (_OptimismMintableERC721Factory *OptimismMintableERC721FactoryTransactor) CreateOptimismMintableERC721(opts *bind.TransactOpts, _remoteToken common.Address, _name string, _symbol string) (*types.Transaction, error) { + return _OptimismMintableERC721Factory.contract.Transact(opts, "createOptimismMintableERC721", _remoteToken, _name, _symbol) +} + +// CreateOptimismMintableERC721 is a paid mutator transaction binding the contract method 0xd97df652. +// +// Solidity: function createOptimismMintableERC721(address _remoteToken, string _name, string _symbol) returns(address) +func (_OptimismMintableERC721Factory *OptimismMintableERC721FactorySession) CreateOptimismMintableERC721(_remoteToken common.Address, _name string, _symbol string) (*types.Transaction, error) { + return _OptimismMintableERC721Factory.Contract.CreateOptimismMintableERC721(&_OptimismMintableERC721Factory.TransactOpts, _remoteToken, _name, _symbol) +} + +// CreateOptimismMintableERC721 is a paid mutator transaction binding the contract method 0xd97df652. +// +// Solidity: function createOptimismMintableERC721(address _remoteToken, string _name, string _symbol) returns(address) +func (_OptimismMintableERC721Factory *OptimismMintableERC721FactoryTransactorSession) CreateOptimismMintableERC721(_remoteToken common.Address, _name string, _symbol string) (*types.Transaction, error) { + return _OptimismMintableERC721Factory.Contract.CreateOptimismMintableERC721(&_OptimismMintableERC721Factory.TransactOpts, _remoteToken, _name, _symbol) +} + +// OptimismMintableERC721FactoryOptimismMintableERC721CreatedIterator is returned from FilterOptimismMintableERC721Created and is used to iterate over the raw logs and unpacked data for OptimismMintableERC721Created events raised by the OptimismMintableERC721Factory contract. +type OptimismMintableERC721FactoryOptimismMintableERC721CreatedIterator struct { + Event *OptimismMintableERC721FactoryOptimismMintableERC721Created // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OptimismMintableERC721FactoryOptimismMintableERC721CreatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismMintableERC721FactoryOptimismMintableERC721Created) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OptimismMintableERC721FactoryOptimismMintableERC721Created) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OptimismMintableERC721FactoryOptimismMintableERC721CreatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OptimismMintableERC721FactoryOptimismMintableERC721CreatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OptimismMintableERC721FactoryOptimismMintableERC721Created represents a OptimismMintableERC721Created event raised by the OptimismMintableERC721Factory contract. +type OptimismMintableERC721FactoryOptimismMintableERC721Created struct { + LocalToken common.Address + RemoteToken common.Address + Deployer common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOptimismMintableERC721Created is a free log retrieval operation binding the contract event 0xe72783bb8e0ca31286b85278da59684dd814df9762a52f0837f89edd1483b299. +// +// Solidity: event OptimismMintableERC721Created(address indexed localToken, address indexed remoteToken, address deployer) +func (_OptimismMintableERC721Factory *OptimismMintableERC721FactoryFilterer) FilterOptimismMintableERC721Created(opts *bind.FilterOpts, localToken []common.Address, remoteToken []common.Address) (*OptimismMintableERC721FactoryOptimismMintableERC721CreatedIterator, error) { + + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + + logs, sub, err := _OptimismMintableERC721Factory.contract.FilterLogs(opts, "OptimismMintableERC721Created", localTokenRule, remoteTokenRule) + if err != nil { + return nil, err + } + return &OptimismMintableERC721FactoryOptimismMintableERC721CreatedIterator{contract: _OptimismMintableERC721Factory.contract, event: "OptimismMintableERC721Created", logs: logs, sub: sub}, nil +} + +// WatchOptimismMintableERC721Created is a free log subscription operation binding the contract event 0xe72783bb8e0ca31286b85278da59684dd814df9762a52f0837f89edd1483b299. +// +// Solidity: event OptimismMintableERC721Created(address indexed localToken, address indexed remoteToken, address deployer) +func (_OptimismMintableERC721Factory *OptimismMintableERC721FactoryFilterer) WatchOptimismMintableERC721Created(opts *bind.WatchOpts, sink chan<- *OptimismMintableERC721FactoryOptimismMintableERC721Created, localToken []common.Address, remoteToken []common.Address) (event.Subscription, error) { + + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + + logs, sub, err := _OptimismMintableERC721Factory.contract.WatchLogs(opts, "OptimismMintableERC721Created", localTokenRule, remoteTokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OptimismMintableERC721FactoryOptimismMintableERC721Created) + if err := _OptimismMintableERC721Factory.contract.UnpackLog(event, "OptimismMintableERC721Created", 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 +} + +// ParseOptimismMintableERC721Created is a log parse operation binding the contract event 0xe72783bb8e0ca31286b85278da59684dd814df9762a52f0837f89edd1483b299. +// +// Solidity: event OptimismMintableERC721Created(address indexed localToken, address indexed remoteToken, address deployer) +func (_OptimismMintableERC721Factory *OptimismMintableERC721FactoryFilterer) ParseOptimismMintableERC721Created(log types.Log) (*OptimismMintableERC721FactoryOptimismMintableERC721Created, error) { + event := new(OptimismMintableERC721FactoryOptimismMintableERC721Created) + if err := _OptimismMintableERC721Factory.contract.UnpackLog(event, "OptimismMintableERC721Created", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-bindings/bindings/optimismmintableerc721factory_more.go b/op-bindings/bindings/optimismmintableerc721factory_more.go new file mode 100644 index 000000000..86cd6eb86 --- /dev/null +++ b/op-bindings/bindings/optimismmintableerc721factory_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const OptimismMintableERC721FactoryStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/universal/OptimismMintableERC721Factory.sol:OptimismMintableERC721Factory\",\"label\":\"isOptimismMintableERC721\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_mapping(t_address,t_bool)\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_mapping(t_address,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_bool\"}}}" + +var OptimismMintableERC721FactoryStorageLayout = new(solc.StorageLayout) + +var OptimismMintableERC721FactoryDeployedBin = "0x60806040523480156200001157600080fd5b50600436106200006f5760003560e01c80637d1d0c5b11620000565780637d1d0c5b1462000100578063d97df6521462000137578063ee9a31a2146200017457600080fd5b806354fd4d5014620000745780635572acae14620000c9575b600080fd5b620000b16040518060400160405280600581526020017f312e342e3000000000000000000000000000000000000000000000000000000081525081565b604051620000c0919062000435565b60405180910390f35b620000ef620000da3660046200047b565b60006020819052908152604090205460ff1681565b6040519015158152602001620000c0565b620001287f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001620000c0565b6200014e620001483660046200057b565b6200019c565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620000c0565b6200014e7f000000000000000000000000000000000000000000000000000000000000000081565b600073ffffffffffffffffffffffffffffffffffffffff84166200026d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f4f7074696d69736d4d696e7461626c65455243373231466163746f72793a204c908201527f3120746f6b656e20616464726573732063616e6e6f742062652061646472657360648201527f7328302900000000000000000000000000000000000000000000000000000000608482015260a40160405180910390fd5b60008484846040516020016200028693929190620005f8565b6040516020818303038152906040528051906020012090506000817f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000888888604051620002f490620003b9565b6200030495949392919062000647565b8190604051809103906000f590508015801562000325573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff8181166000818152602081815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590513381529394509189169290917fe72783bb8e0ca31286b85278da59684dd814df9762a52f0837f89edd1483b299910160405180910390a395945050505050565b6131bf80620006a983390190565b6000815180845260005b81811015620003ef57602081850181015186830182015201620003d1565b8181111562000402576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006200044a6020830184620003c7565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146200047657600080fd5b919050565b6000602082840312156200048e57600080fd5b6200044a8262000451565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112620004da57600080fd5b813567ffffffffffffffff80821115620004f857620004f862000499565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171562000541576200054162000499565b816040528381528660208588010111156200055b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156200059157600080fd5b6200059c8462000451565b9250602084013567ffffffffffffffff80821115620005ba57600080fd5b620005c887838801620004c8565b93506040860135915080821115620005df57600080fd5b50620005ee86828701620004c8565b9150509250925092565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000620006296060830185620003c7565b82810360408401526200063d8185620003c7565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835286602084015280861660408401525060a060608301526200068860a0830185620003c7565b82810360808401526200069c8185620003c7565b9897505050505050505056fe60e06040523480156200001157600080fd5b50604051620031bf380380620031bf83398101604081905262000034916200062d565b8181600062000044838262000756565b50600162000053828262000756565b5050506001600160a01b038516620000d85760405162461bcd60e51b815260206004820152603360248201527f4f7074696d69736d4d696e7461626c654552433732313a20627269646765206360448201527f616e6e6f7420626520616464726573732830290000000000000000000000000060648201526084015b60405180910390fd5b83600003620001505760405162461bcd60e51b815260206004820152603660248201527f4f7074696d69736d4d696e7461626c654552433732313a2072656d6f7465206360448201527f6861696e2069642063616e6e6f74206265207a65726f000000000000000000006064820152608401620000cf565b6001600160a01b038316620001ce5760405162461bcd60e51b815260206004820152603960248201527f4f7074696d69736d4d696e7461626c654552433732313a2072656d6f7465207460448201527f6f6b656e2063616e6e6f742062652061646472657373283029000000000000006064820152608401620000cf565b60808490526001600160a01b0383811660a081905290861660c0526200020290601462000256602090811b62000eed17901c565b62000218856200041660201b620011301760201c565b6040516020016200022b92919062000822565b604051602081830303815290604052600a90816200024a919062000756565b50505050505062000993565b6060600062000267836002620008ac565b62000274906002620008ce565b6001600160401b038111156200028e576200028e62000553565b6040519080825280601f01601f191660200182016040528015620002b9576020820181803683370190505b509050600360fc1b81600081518110620002d757620002d7620008e9565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110620003095762000309620008e9565b60200101906001600160f81b031916908160001a90535060006200032f846002620008ac565b6200033c906001620008ce565b90505b6001811115620003be576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110620003745762000374620008e9565b1a60f81b8282815181106200038d576200038d620008e9565b60200101906001600160f81b031916908160001a90535060049490941c93620003b681620008ff565b90506200033f565b5083156200040f5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401620000cf565b9392505050565b6060816000036200043e5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156200046e5780620004558162000919565b9150620004669050600a836200094b565b915062000442565b6000816001600160401b038111156200048b576200048b62000553565b6040519080825280601f01601f191660200182016040528015620004b6576020820181803683370190505b5090505b84156200052e57620004ce60018362000962565b9150620004dd600a866200097c565b620004ea906030620008ce565b60f81b818381518110620005025762000502620008e9565b60200101906001600160f81b031916908160001a90535062000526600a866200094b565b9450620004ba565b949350505050565b80516001600160a01b03811681146200054e57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620005865781810151838201526020016200056c565b8381111562000596576000848401525b50505050565b600082601f830112620005ae57600080fd5b81516001600160401b0380821115620005cb57620005cb62000553565b604051601f8301601f19908116603f01168101908282118183101715620005f657620005f662000553565b816040528381528660208588010111156200061057600080fd5b6200062384602083016020890162000569565b9695505050505050565b600080600080600060a086880312156200064657600080fd5b620006518662000536565b945060208601519350620006686040870162000536565b60608701519093506001600160401b03808211156200068657600080fd5b6200069489838a016200059c565b93506080880151915080821115620006ab57600080fd5b50620006ba888289016200059c565b9150509295509295909350565b600181811c90821680620006dc57607f821691505b602082108103620006fd57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200075157600081815260208120601f850160051c810160208610156200072c5750805b601f850160051c820191505b818110156200074d5782815560010162000738565b5050505b505050565b81516001600160401b0381111562000772576200077262000553565b6200078a81620007838454620006c7565b8462000703565b602080601f831160018114620007c25760008415620007a95750858301515b600019600386901b1c1916600185901b1785556200074d565b600085815260208120601f198616915b82811015620007f357888601518255948401946001909101908401620007d2565b5085821015620008125787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6832ba3432b932bab69d60b91b8152600083516200084881600985016020880162000569565b600160fe1b60099184019182015283516200086b81600a84016020880162000569565b712f746f6b656e5552493f75696e743235363d60701b600a9290910191820152601c01949350505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620008c957620008c962000896565b500290565b60008219821115620008e457620008e462000896565b500190565b634e487b7160e01b600052603260045260246000fd5b60008162000911576200091162000896565b506000190190565b6000600182016200092e576200092e62000896565b5060010190565b634e487b7160e01b600052601260045260246000fd5b6000826200095d576200095d62000935565b500490565b60008282101562000977576200097762000896565b500390565b6000826200098e576200098e62000935565b500690565b60805160a05160c0516127d9620009e6600039600081816103e20152818161047a01528181610b210152610c430152600081816101e001526103bc015260008181610329015261040801526127d96000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c80637d1d0c5b116100ee578063c87b56dd11610097578063e78cea9211610071578063e78cea92146103e0578063e951819614610406578063e985e9c51461042c578063ee9a31a21461047557600080fd5b8063c87b56dd1461039f578063d547cfb7146103b2578063d6c0b2c4146103ba57600080fd5b8063a1448194116100c8578063a144819414610366578063a22cb46514610379578063b88d4fde1461038c57600080fd5b80637d1d0c5b1461032457806395d89b411461034b5780639dc29fac1461035357600080fd5b806323b872dd1161015b5780634f6ccce7116101355780634f6ccce7146102af57806354fd4d50146102c25780636352211e146102fe57806370a082311461031157600080fd5b806323b872dd146102765780632f745c591461028957806342842e0e1461029c57600080fd5b8063081812fc1161018c578063081812fc1461023c578063095ea7b31461024f57806318160ddd1461026457600080fd5b806301ffc9a7146101b3578063033964be146101db57806306fdde0314610227575b600080fd5b6101c66101c1366004612226565b61049c565b60405190151581526020015b60405180910390f35b6102027f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d2565b61022f6104fa565b6040516101d291906122b9565b61020261024a3660046122cc565b61058c565b61026261025d36600461230e565b6105c0565b005b6008545b6040519081526020016101d2565b610262610284366004612338565b610751565b61026861029736600461230e565b6107f2565b6102626102aa366004612338565b6108c1565b6102686102bd3660046122cc565b6108dc565b61022f6040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b61020261030c3660046122cc565b61099a565b61026861031f366004612374565b610a2c565b6102687f000000000000000000000000000000000000000000000000000000000000000081565b61022f610afa565b61026261036136600461230e565b610b09565b61026261037436600461230e565b610c2b565b61026261038736600461238f565b610d42565b61026261039a3660046123fa565b610d51565b61022f6103ad3660046122cc565b610df9565b61022f610e5f565b7f0000000000000000000000000000000000000000000000000000000000000000610202565b7f0000000000000000000000000000000000000000000000000000000000000000610202565b7f0000000000000000000000000000000000000000000000000000000000000000610268565b6101c661043a3660046124f4565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b6102027f000000000000000000000000000000000000000000000000000000000000000081565b60007f74259ebf000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083168114806104f357506104f38361126d565b9392505050565b60606000805461050990612527565b80601f016020809104026020016040519081016040528092919081815260200182805461053590612527565b80156105825780601f1061055757610100808354040283529160200191610582565b820191906000526020600020905b81548152906001019060200180831161056557829003601f168201915b5050505050905090565b6000610597826112c3565b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60006105cb8261099a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361068d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff821614806106b657506106b6813361043a565b610742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610684565b61074c8383611351565b505050565b61075b33826113f1565b6107e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206e6f7220617070726f7665640000000000000000000000000000000000006064820152608401610684565b61074c8383836114b0565b60006107fd83610a2c565b821061088b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610684565b5073ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205490565b61074c83838360405180602001604052806000815250610d51565b60006108e760085490565b8210610975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610684565b600882815481106109885761098861257a565b90600052602060002001549050919050565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610a26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610684565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff8216610ad1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152608401610684565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b60606001805461050990612527565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610bce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4f7074696d69736d4d696e7461626c654552433732313a206f6e6c792062726960448201527f6467652063616e2063616c6c20746869732066756e6374696f6e0000000000006064820152608401610684565b610bd781611722565b8173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca582604051610c1f91815260200190565b60405180910390a25050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610cf0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4f7074696d69736d4d696e7461626c654552433732313a206f6e6c792062726960448201527f6467652063616e2063616c6c20746869732066756e6374696f6e0000000000006064820152608401610684565b610cfa82826117fb565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688582604051610c1f91815260200190565b610d4d338383611815565b5050565b610d5b33836113f1565b610de7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206e6f7220617070726f7665640000000000000000000000000000000000006064820152608401610684565b610df384848484611942565b50505050565b6060610e04826112c3565b6000610e0e6119e5565b90506000815111610e2e57604051806020016040528060008152506104f3565b80610e3884611130565b604051602001610e499291906125a9565b6040516020818303038152906040529392505050565b600a8054610e6c90612527565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9890612527565b8015610ee55780601f10610eba57610100808354040283529160200191610ee5565b820191906000526020600020905b815481529060010190602001808311610ec857829003601f168201915b505050505081565b60606000610efc836002612607565b610f07906002612644565b67ffffffffffffffff811115610f1f57610f1f6123cb565b6040519080825280601f01601f191660200182016040528015610f49576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110610f8057610f8061257a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110610fe357610fe361257a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600061101f846002612607565b61102a906001612644565b90505b60018111156110c7577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061106b5761106b61257a565b1a60f81b8282815181106110815761108161257a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c936110c08161265c565b905061102d565b5083156104f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610684565b60608160000361117357505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561119d578061118781612691565b91506111969050600a836126f8565b9150611177565b60008167ffffffffffffffff8111156111b8576111b86123cb565b6040519080825280601f01601f1916602001820160405280156111e2576020820181803683370190505b5090505b8415611265576111f760018361270c565b9150611204600a86612723565b61120f906030612644565b60f81b8183815181106112245761122461257a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061125e600a866126f8565b94506111e6565b949350505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d63000000000000000000000000000000000000000000000000000000001480610a265750610a26826119f4565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1661134e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610684565b50565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915581906113ab8261099a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806113fd8361099a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061146b575073ffffffffffffffffffffffffffffffffffffffff80821660009081526005602090815260408083209388168352929052205460ff165b8061126557508373ffffffffffffffffffffffffffffffffffffffff166114918461058c565b73ffffffffffffffffffffffffffffffffffffffff1614949350505050565b8273ffffffffffffffffffffffffffffffffffffffff166114d08261099a565b73ffffffffffffffffffffffffffffffffffffffff1614611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610684565b73ffffffffffffffffffffffffffffffffffffffff8216611615576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610684565b611620838383611ad7565b61162b600082611351565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546001929061166190849061270c565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080546001929061169c908490612644565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600061172d8261099a565b905061173b81600084611ad7565b611746600083611351565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040812080546001929061177c90849061270c565b909155505060008281526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b610d4d828260405180602001604052806000815250611bdd565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610684565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61194d8484846114b0565b61195984848484611c80565b610df3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610684565b6060600a805461050990612527565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480611a8757507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610a2657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610a26565b73ffffffffffffffffffffffffffffffffffffffff8316611b3f57611b3a81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611b7c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611b7c57611b7c8382611e73565b73ffffffffffffffffffffffffffffffffffffffff8216611ba05761074c81611f2a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461074c5761074c8282611fd9565b611be7838361202a565b611bf46000848484611c80565b61074c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610684565b600073ffffffffffffffffffffffffffffffffffffffff84163b15611e68576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290611cf7903390899088908890600401612737565b6020604051808303816000875af1925050508015611d50575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611d4d91810190612780565b60015b611e1d573d808015611d7e576040519150601f19603f3d011682016040523d82523d6000602084013e611d83565b606091505b508051600003611e15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610684565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611265565b506001949350505050565b60006001611e8084610a2c565b611e8a919061270c565b600083815260076020526040902054909150808214611eea5773ffffffffffffffffffffffffffffffffffffffff841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b50600091825260076020908152604080842084905573ffffffffffffffffffffffffffffffffffffffff9094168352600681528383209183525290812055565b600854600090611f3c9060019061270c565b60008381526009602052604081205460088054939450909284908110611f6457611f6461257a565b906000526020600020015490508060088381548110611f8557611f8561257a565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611fbd57611fbd61279d565b6001900381819060005260206000200160009055905550505050565b6000611fe483610a2c565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b73ffffffffffffffffffffffffffffffffffffffff82166120a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610684565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1615612133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610684565b61213f60008383611ad7565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290612175908490612644565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461134e57600080fd5b60006020828403121561223857600080fd5b81356104f3816121f8565b60005b8381101561225e578181015183820152602001612246565b83811115610df35750506000910152565b60008151808452612287816020860160208601612243565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006104f3602083018461226f565b6000602082840312156122de57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461230957600080fd5b919050565b6000806040838503121561232157600080fd5b61232a836122e5565b946020939093013593505050565b60008060006060848603121561234d57600080fd5b612356846122e5565b9250612364602085016122e5565b9150604084013590509250925092565b60006020828403121561238657600080fd5b6104f3826122e5565b600080604083850312156123a257600080fd5b6123ab836122e5565b9150602083013580151581146123c057600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000806080858703121561241057600080fd5b612419856122e5565b9350612427602086016122e5565b925060408501359150606085013567ffffffffffffffff8082111561244b57600080fd5b818701915087601f83011261245f57600080fd5b813581811115612471576124716123cb565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156124b7576124b76123cb565b816040528281528a60208487010111156124d057600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561250757600080fd5b612510836122e5565b915061251e602084016122e5565b90509250929050565b600181811c9082168061253b57607f821691505b602082108103612574577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600083516125bb818460208801612243565b8351908301906125cf818360208801612243565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561263f5761263f6125d8565b500290565b60008219821115612657576126576125d8565b500190565b60008161266b5761266b6125d8565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036126c2576126c26125d8565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612707576127076126c9565b500490565b60008282101561271e5761271e6125d8565b500390565b600082612732576127326126c9565b500690565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612776608083018461226f565b9695505050505050565b60006020828403121561279257600080fd5b81516104f3816121f8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c634300080f000aa164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(OptimismMintableERC721FactoryStorageLayoutJSON), OptimismMintableERC721FactoryStorageLayout); err != nil { + panic(err) + } + + layouts["OptimismMintableERC721Factory"] = OptimismMintableERC721FactoryStorageLayout + deployedBytecodes["OptimismMintableERC721Factory"] = OptimismMintableERC721FactoryDeployedBin +} diff --git a/op-bindings/bindings/optimismportal.go b/op-bindings/bindings/optimismportal.go new file mode 100644 index 000000000..203d9588c --- /dev/null +++ b/op-bindings/bindings/optimismportal.go @@ -0,0 +1,1732 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// TypesOutputRootProof is an auto generated low-level Go binding around an user-defined struct. +type TypesOutputRootProof struct { + Version [32]byte + StateRoot [32]byte + MessagePasserStorageRoot [32]byte + LatestBlockhash [32]byte +} + +// TypesWithdrawalTransaction is an auto generated low-level Go binding around an user-defined struct. +type TypesWithdrawalTransaction struct { + Nonce *big.Int + Sender common.Address + Target common.Address + Value *big.Int + GasLimit *big.Int + Data []byte +} + +// OptimismPortalMetaData contains all meta data concerning the OptimismPortal contract. +var OptimismPortalMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"opaqueData\",\"type\":\"bytes\"}],\"name\":\"TransactionDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"name\":\"WithdrawalFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"WithdrawalProven\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"GUARDIAN\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_ORACLE\",\"outputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SYSTEM_CONFIG\",\"outputs\":[{\"internalType\":\"contractSystemConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"_isCreation\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"depositTransaction\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"donateETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"structTypes.WithdrawalTransaction\",\"name\":\"_tx\",\"type\":\"tuple\"}],\"name\":\"finalizeWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"finalizedWithdrawals\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"guardian\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"_l2Oracle\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_guardian\",\"type\":\"address\"},{\"internalType\":\"contractSystemConfig\",\"name\":\"_systemConfig\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"}],\"name\":\"isOutputFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2Oracle\",\"outputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_byteCount\",\"type\":\"uint64\"}],\"name\":\"minimumGasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"params\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"prevBaseFee\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"prevBoughtGas\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"prevBlockNum\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"structTypes.WithdrawalTransaction\",\"name\":\"_tx\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messagePasserStorageRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"latestBlockhash\",\"type\":\"bytes32\"}],\"internalType\":\"structTypes.OutputRootProof\",\"name\":\"_outputRootProof\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"_withdrawalProof\",\"type\":\"bytes[]\"}],\"name\":\"proveWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"provenWithdrawals\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint128\",\"name\":\"timestamp\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2OutputIndex\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"systemConfig\",\"outputs\":[{\"internalType\":\"contractSystemConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60806040523480156200001157600080fd5b506200002260008080600162000028565b62000224565b600054600390610100900460ff161580156200004b575060005460ff8083169116105b620000b45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805461ffff191660ff831617610100908117909155603280546001600160a01b031990811661dead1790915560358054603680546001600160a01b0389811691861691909117909155603780548a831695169490941790935585151592891690930260ff19166001600160a81b0319909316929092171790556200013962000181565b6000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b600054610100900460ff16620001ee5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000ab565b60408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b0217600155565b61545c80620002346000396000f3fe60806040526004361061016d5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063e9e05c4211610059578063e9e05c4214610573578063f049875014610586578063fecf9734146105b157600080fd5b8063a35d99df1461040d578063cff0ab9614610446578063e965084c146104e757600080fd5b80639b5f694a116100b05780639b5f694a1461037e5780639bf62d82146103b0578063a14238e7146103dd57600080fd5b80638b4c40b0146101925780638c3152e91461035e57600080fd5b806354fd4d50116101225780636dbffb78116101075780636dbffb78146102fe578063724c184c1461031e5780638456cb591461034957600080fd5b806354fd4d501461027e5780635c975abb146102d457600080fd5b80633f4ba83a116101535780633f4ba83a1461021c578063452a9320146102315780634870496f1461025e57600080fd5b80621c2ff61461019957806333d7e2bd146101ef57600080fd5b36610194576101923334620186a06000604051806020016040528060008152506105d1565b005b600080fd5b3480156101a557600080fd5b50603554610100900473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101fb57600080fd5b506036546101c59073ffffffffffffffffffffffffffffffffffffffff1681565b34801561022857600080fd5b5061019261086c565b34801561023d57600080fd5b506037546101c59073ffffffffffffffffffffffffffffffffffffffff1681565b34801561026a57600080fd5b50610192610279366004614a4a565b610971565b34801561028a57600080fd5b506102c76040518060400160405280600681526020017f312e31302e30000000000000000000000000000000000000000000000000000081525081565b6040516101e69190614ba0565b3480156102e057600080fd5b506035546102ee9060ff1681565b60405190151581526020016101e6565b34801561030a57600080fd5b506102ee610319366004614bb3565b610fa6565b34801561032a57600080fd5b5060375473ffffffffffffffffffffffffffffffffffffffff166101c5565b34801561035557600080fd5b50610192611065565b34801561036a57600080fd5b50610192610379366004614bcc565b611167565b34801561038a57600080fd5b506035546101c590610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103bc57600080fd5b506032546101c59073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103e957600080fd5b506102ee6103f8366004614bb3565b60336020526000908152604090205460ff1681565b34801561041957600080fd5b5061042d610428366004614c26565b611a2b565b60405167ffffffffffffffff90911681526020016101e6565b34801561045257600080fd5b506001546104ae906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101e6565b3480156104f357600080fd5b50610545610502366004614bb3565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101e6565b610192610581366004614c51565b6105d1565b34801561059257600080fd5b5060365473ffffffffffffffffffffffffffffffffffffffff166101c5565b3480156105bd57600080fd5b506101926105cc366004614ccc565b611a44565b8260005a905083156106885773ffffffffffffffffffffffffffffffffffffffff87161561068857604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b6106928351611a2b565b67ffffffffffffffff168567ffffffffffffffff161015610735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4f7074696d69736d506f7274616c3a20676173206c696d697420746f6f20736d60448201527f616c6c0000000000000000000000000000000000000000000000000000000000606482015260840161067f565b6201d4c0835111156107a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4f7074696d69736d506f7274616c3a206461746120746f6f206c617267650000604482015260640161067f565b333281146107c4575033731111000000000000000000000000000000001111015b600034888888886040516020016107df959493929190614d26565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161084f9190614ba0565b60405180910390a450506108638282611c52565b50505050505050565b60375473ffffffffffffffffffffffffffffffffffffffff163314610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e20756e70617573650000000000000000000000000000000000000000000000606482015260840161067f565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b60355460ff16156109de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a2070617573656400000000000000000000604482015260640161067f565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e747261637400606482015260840161067f565b6035546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101869052600091610100900473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b369190614dab565b519050610b50610b4b36869003860186614e10565b611f7f565b8114610bde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f660000000000000000000000000000000000000000000000606482015260840161067f565b6000610be987611fdb565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610d035750805160355460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015261010090910473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cff9190614dab565b5114155b610d8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e000000000000000000606482015260840161067f565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610e589101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e4e888a614e76565b8a6040013561200b565b610ee4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f660000000000000000000000000000606482015260840161067f565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6035546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810183905260009161105f9161010090910473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614dab565b602001516fffffffffffffffffffffffffffffffff1661202f565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e20706175736500000000000000000000000000000000000000000000000000606482015260840161067f565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001610967565b60355460ff16156111d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a2070617573656400000000000000000000604482015260640161067f565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead1461127d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e00606482015260840161067f565b600061128882611fdb565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e207965740000000000000000000000000000606482015260840161067f565b603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114049190614efa565b81602001516fffffffffffffffffffffffffffffffff1610156114cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a40161067f565b6114ee81602001516fffffffffffffffffffffffffffffffff1661202f565b6115a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a40161067f565b60355460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff9091166004820152600091610100900473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa15801561162c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116509190614dab565b825181519192501461170a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a40161067f565b61172981602001516fffffffffffffffffffffffffffffffff1661202f565b6117db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a40161067f565b60008381526033602052604090205460ff161561187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a65640000000000000000000000606482015260840161067f565b600083815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908601516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558501516080860151606087015160a088015161191c939291906120d4565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061198190841515815260200190565b60405180910390a2801580156119975750326001145b15611a24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a207769746864726177616c206661696c6560448201527f6400000000000000000000000000000000000000000000000000000000000000606482015260840161067f565b5050505050565b6000611a38826010614f42565b61105f90615208614f72565b600054600390610100900460ff16158015611a66575060005460ff8083169116105b611af2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161067f565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100908117909155603280547fffffffffffffffffffffffff000000000000000000000000000000000000000090811661dead17909155603580546036805473ffffffffffffffffffffffffffffffffffffffff89811691861691909117909155603780548a83169516949094179093558515159289169093027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00167fffffffffffffffffffffff00000000000000000000000000000000000000000090931692909217179055611bed612132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b600154600090611c88907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643614f9e565b90506000611c94612215565b90506000816020015160ff16826000015163ffffffff16611cb59190614fe4565b90508215611dec57600154600090611cec908390700100000000000000000000000000000000900467ffffffffffffffff1661504c565b90506000836040015160ff1683611d0391906150c0565b600154611d239084906fffffffffffffffffffffffffffffffff166150c0565b611d2d9190614fe4565b600154909150600090611d7e90611d579084906fffffffffffffffffffffffffffffffff1661517c565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166122db565b90506001861115611dad57611daa611d5782876040015160ff1660018a611da59190614f9e565b6122fa565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090611e1f908490700100000000000000000000000000000000900467ffffffffffffffff16614f72565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315611f02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d69740000606482015260840161067f565b600154600090611f2e906fffffffffffffffffffffffffffffffff1667ffffffffffffffff88166151f0565b90506000611f4048633b9aca0061234f565b611f4a908361522d565b905060005a611f599088614f9e565b905080821115611f7557611f75611f708284614f9e565b612366565b5050505050505050565b60008160000151826020015183604001518460600151604051602001611fbe949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611fbe979096959101615241565b60008061201786612394565b9050612025818686866123c6565b9695505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f4daa2916040518163ffffffff1660e01b8152600401602060405180830381865afa15801561209e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c29190614efa565b6120cc9083615298565b421192915050565b60008060006120e48660006123f6565b90508061211a576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600054610100900460ff166121c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161067f565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260365483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa1580156122b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d691906152d5565b905090565b60006122f06122ea8585612414565b83612424565b90505b9392505050565b6000670de0b6b3a764000061233b6123128583614fe4565b61232490670de0b6b3a764000061504c565b61233685670de0b6b3a76400006150c0565b612433565b61234590866150c0565b6122f09190614fe4565b60008183101561235f57816122f3565b5090919050565b6000805a90505b825a6123799083614f9e565b101561238f5761238882615374565b915061236d565b505050565b606081805190602001206040516020016123b091815260200190565b6040516020818303038152906040529050919050565b60006123ed846123d7878686612464565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b60008183121561235f57816122f3565b600081831261235f57816122f3565b60006122f3670de0b6b3a76400008361244b86612ee2565b61245591906150c0565b61245f9190614fe4565b613126565b606060008451116124d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b65790000000000000000000000604482015260640161067f565b60006124dc84613365565b905060006124e986613451565b905060008460405160200161250091815260200190565b60405160208183030381529060405290506000805b8451811015612e59576000858281518110612532576125326153ac565b6020026020010151905084518311156125cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e677468000000000000000000000000000000000000606482015260840161067f565b82600003612686578051805160209182012060405161261b926125f592910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f742068617368000000604482015260640161067f565b6127dd565b80515160201161273c57805180516020918201206040516126b0926125f592910190815260200190565b612681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c206861736800000000000000000000000000000000000000000000000000606482015260840161067f565b8051845160208087019190912082519190920120146127dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f6520686173680000000000000000000000000000000000000000000000000000606482015260840161067f565b6127e960106001615298565b816020015151036129c5578451830361295d576128238160200151601081518110612816576128166153ac565b60200260200101516134b4565b965060008751116128b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e6368290000000000606482015260840161067f565b600186516128c49190614f9e565b8214612952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e636829000000000000606482015260840161067f565b5050505050506122f3565b6000858481518110612971576129716153ac565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061299c5761299c6153ac565b602002602001015190506129af81613614565b95506129bc600186615298565b94505050612e46565b600281602001515103612dbe5760006129dd82613639565b90506000816000815181106129f4576129f46153ac565b016020015160f81c90506000612a0b6002836153db565b612a169060026153fd565b90506000612a27848360ff1661365d565b90506000612a358a8961365d565b90506000612a438383613693565b905080835114612ad5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b6579000000000000606482015260840161067f565b60ff851660021480612aea575060ff85166003145b15612cd95780825114612b7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e646572000000606482015260840161067f565b612b998760200151600181518110612816576128166153ac565b9c5060008d5111612c2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c6561662900000000000000606482015260840161067f565b60018c51612c3a9190614f9e565b8814612cc8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c656166290000000000000000606482015260840161067f565b5050505050505050505050506122f3565b60ff85161580612cec575060ff85166001145b15612d2b57612d188760200151600181518110612d0b57612d0b6153ac565b6020026020010151613614565b9950612d24818a615298565b9850612db3565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e207072656669780000000000000000000000000000606482015260840161067f565b505050505050612e46565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f6465000000000000000000000000000000000000000000000000606482015260840161067f565b5080612e5181615374565b915050612515565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e7473000000000000000000000000000000000000000000000000000000606482015260840161067f565b6000808213612f4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e45440000000000000000000000000000000000000000000000604482015260640161067f565b60006060612f5a84613747565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361315757506000919050565b680755bf798b4a1bf1e582126131c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f570000000000000000000000000000000000000000604482015260640161067f565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b80516060908067ffffffffffffffff8111156133835761338361486a565b6040519080825280602002602001820160405280156133c857816020015b60408051808201909152606080825260208201528152602001906001900390816133a15790505b50915060005b8181101561344a5760405180604001604052808583815181106133f3576133f36153ac565b60200260200101518152602001613422868481518110613415576134156153ac565b602002602001015161381d565b815250838281518110613437576134376153ac565b60209081029190910101526001016133ce565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b838110156134a9578060011b82018184015160001a8060041c8253600f81166001830153505060010161347b565b509295945050505050565b606060008060006134c485613830565b9194509250905060008160018111156134df576134df615420565b1461356c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d00000000000000606482015260840161067f565b6135768284615298565b855114613605576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e646572000000000000000000000000606482015260840161067f565b6123ed8560200151848461429d565b606060208260000151106136305761362b826134b4565b61105f565b61105f82614331565b606061105f6136588360200151600081518110612816576128166153ac565b613451565b60608251821061367c575060408051602081019091526000815261105f565b6122f3838384865161368e9190614f9e565b614347565b60008082518451106136a65782516136a9565b83515b90505b808210801561373057508282815181106136c8576136c86153ac565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848381518110613707576137076153ac565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15613740578160010191506136ac565b5092915050565b60008082116137b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e45440000000000000000000000000000000000000000000000604482015260640161067f565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606061105f61382b8361451f565b614608565b6000806000808460000151116138ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a40161067f565b6020840151805160001a607f8111613913576000600160009450945094505050614296565b60b78111613b21576000613928608083614f9e565b9050808760000151116139e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a40161067f565b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082141580613a5c57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b613b0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a40161067f565b5060019550935060009250614296915050565b60bf8111613e6f576000613b3660b783614f9e565b905080876000015111613bf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a40161067f565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613ccf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a40161067f565b600184015160088302610100031c60378111613d93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a40161067f565b613d9d8184615298565b895111613e52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a40161067f565b613e5d836001615298565b97509550600094506142969350505050565b60f78111613f50576000613e8460c083614f9e565b905080876000015111613f3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a40161067f565b600195509350849250614296915050565b6000613f5d60f783614f9e565b905080876000015111614018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a40161067f565b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036140f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a40161067f565b600184015160088302610100031c603781116141ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a40161067f565b6141c48184615298565b895111614279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a40161067f565b614284836001615298565b97509550600194506142969350505050565b9193909250565b60608167ffffffffffffffff8111156142b8576142b861486a565b6040519080825280601f01601f1916602001820160405280156142e2576020820181803683370190505b50905081156122f35760006142f78486615298565b90506020820160005b84811015614318578281015182820152602001614300565b84811115614327576000858301525b5050509392505050565b606061105f82602001516000846000015161429d565b60608182601f0110156143b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015260640161067f565b828284011015614422576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015260640161067f565b8183018451101561448f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015260640161067f565b6060821580156144ae5760405191506000825260208201604052614516565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156144e75780518352602092830192016144cf565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015260008251116145ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a40161067f565b50604080518082019091528151815260209182019181019190915290565b6060600080600061461885613830565b91945092509050600181600181111561463357614633615420565b146146c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d0000000000000000606482015260840161067f565b84516146cc8385615298565b14614759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e6465720000000000000000000000000000606482015260840161067f565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816147705790505093506000835b865181101561485e576000806147e36040518060400160405280858c600001516147c79190614f9e565b8152602001858c602001516147dc9190615298565b9052613830565b5091509150604051806040016040528083836147ff9190615298565b8152602001848b602001516148149190615298565b815250888581518110614829576148296153ac565b602090810291909101015261483f600185615298565b935061484b8183615298565b6148559084615298565b9250505061479d565b50845250919392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156148e0576148e061486a565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461490a57600080fd5b50565b600082601f83011261491e57600080fd5b813567ffffffffffffffff8111156149385761493861486a565b61496960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614899565b81815284602083860101111561497e57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156149ad57600080fd5b60405160c0810167ffffffffffffffff82821081831117156149d1576149d161486a565b8160405282935084358352602085013591506149ec826148e8565b81602084015260408501359150614a02826148e8565b816040840152606085013560608401526080850135608084015260a0850135915080821115614a3057600080fd5b50614a3d8582860161490d565b60a0830152505092915050565b600080600080600085870360e0811215614a6357600080fd5b863567ffffffffffffffff80821115614a7b57600080fd5b614a878a838b0161499b565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc084011215614ac057600080fd5b60408901955060c0890135925080831115614ada57600080fd5b828901925089601f840112614aee57600080fd5b8235915080821115614aff57600080fd5b508860208260051b8401011115614b1557600080fd5b959894975092955050506020019190565b60005b83811015614b41578181015183820152602001614b29565b83811115614b50576000848401525b50505050565b60008151808452614b6e816020860160208601614b26565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122f36020830184614b56565b600060208284031215614bc557600080fd5b5035919050565b600060208284031215614bde57600080fd5b813567ffffffffffffffff811115614bf557600080fd5b614c018482850161499b565b949350505050565b803567ffffffffffffffff81168114614c2157600080fd5b919050565b600060208284031215614c3857600080fd5b6122f382614c09565b80358015158114614c2157600080fd5b600080600080600060a08688031215614c6957600080fd5b8535614c74816148e8565b945060208601359350614c8960408701614c09565b9250614c9760608701614c41565b9150608086013567ffffffffffffffff811115614cb357600080fd5b614cbf8882890161490d565b9150509295509295909350565b60008060008060808587031215614ce257600080fd5b8435614ced816148e8565b93506020850135614cfd816148e8565b92506040850135614d0d816148e8565b9150614d1b60608601614c41565b905092959194509250565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251614d7a816049850160208701614b26565b919091016049019695505050505050565b80516fffffffffffffffffffffffffffffffff81168114614c2157600080fd5b600060608284031215614dbd57600080fd5b6040516060810181811067ffffffffffffffff82111715614de057614de061486a565b60405282518152614df360208401614d8b565b6020820152614e0460408401614d8b565b60408201529392505050565b600060808284031215614e2257600080fd5b6040516080810181811067ffffffffffffffff82111715614e4557614e4561486a565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115614e9157614e9161486a565b8360051b6020614ea2818301614899565b868152918501918181019036841115614eba57600080fd5b865b84811015614eee57803586811115614ed45760008081fd5b614ee036828b0161490d565b845250918301918301614ebc565b50979650505050505050565b600060208284031215614f0c57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615614f6957614f69614f13565b02949350505050565b600067ffffffffffffffff808316818516808303821115614f9557614f95614f13565b01949350505050565b600082821015614fb057614fb0614f13565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614ff357614ff3614fb5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561504757615047614f13565b500590565b6000808312837f80000000000000000000000000000000000000000000000000000000000000000183128115161561508657615086614f13565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156150ba576150ba614f13565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561510157615101614f13565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561513c5761513c614f13565b6000871292508782058712848416161561515857615158614f13565b8785058712818416161561516e5761516e614f13565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038413811516156151b6576151b6614f13565b827f80000000000000000000000000000000000000000000000000000000000000000384128116156151ea576151ea614f13565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561522857615228614f13565b500290565b60008261523c5761523c614fb5565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261528c60c0830184614b56565b98975050505050505050565b600082198211156152ab576152ab614f13565b500190565b805163ffffffff81168114614c2157600080fd5b805160ff81168114614c2157600080fd5b600060c082840312156152e757600080fd5b60405160c0810181811067ffffffffffffffff8211171561530a5761530a61486a565b604052615316836152b0565b8152615324602084016152c4565b6020820152615335604084016152c4565b6040820152615346606084016152b0565b6060820152615357608084016152b0565b608082015261536860a08401614d8b565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036153a5576153a5614f13565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff8316806153ee576153ee614fb5565b8060ff84160691505092915050565b600060ff821660ff84168082101561541757615417614f13565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", +} + +// OptimismPortalABI is the input ABI used to generate the binding from. +// Deprecated: Use OptimismPortalMetaData.ABI instead. +var OptimismPortalABI = OptimismPortalMetaData.ABI + +// OptimismPortalBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use OptimismPortalMetaData.Bin instead. +var OptimismPortalBin = OptimismPortalMetaData.Bin + +// DeployOptimismPortal deploys a new Ethereum contract, binding an instance of OptimismPortal to it. +func DeployOptimismPortal(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *OptimismPortal, error) { + parsed, err := OptimismPortalMetaData.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(OptimismPortalBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &OptimismPortal{OptimismPortalCaller: OptimismPortalCaller{contract: contract}, OptimismPortalTransactor: OptimismPortalTransactor{contract: contract}, OptimismPortalFilterer: OptimismPortalFilterer{contract: contract}}, nil +} + +// OptimismPortal is an auto generated Go binding around an Ethereum contract. +type OptimismPortal struct { + OptimismPortalCaller // Read-only binding to the contract + OptimismPortalTransactor // Write-only binding to the contract + OptimismPortalFilterer // Log filterer for contract events +} + +// OptimismPortalCaller is an auto generated read-only Go binding around an Ethereum contract. +type OptimismPortalCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// OptimismPortalTransactor is an auto generated write-only Go binding around an Ethereum contract. +type OptimismPortalTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// OptimismPortalFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type OptimismPortalFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// OptimismPortalSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type OptimismPortalSession struct { + Contract *OptimismPortal // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// OptimismPortalCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type OptimismPortalCallerSession struct { + Contract *OptimismPortalCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// OptimismPortalTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type OptimismPortalTransactorSession struct { + Contract *OptimismPortalTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// OptimismPortalRaw is an auto generated low-level Go binding around an Ethereum contract. +type OptimismPortalRaw struct { + Contract *OptimismPortal // Generic contract binding to access the raw methods on +} + +// OptimismPortalCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type OptimismPortalCallerRaw struct { + Contract *OptimismPortalCaller // Generic read-only contract binding to access the raw methods on +} + +// OptimismPortalTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type OptimismPortalTransactorRaw struct { + Contract *OptimismPortalTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewOptimismPortal creates a new instance of OptimismPortal, bound to a specific deployed contract. +func NewOptimismPortal(address common.Address, backend bind.ContractBackend) (*OptimismPortal, error) { + contract, err := bindOptimismPortal(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &OptimismPortal{OptimismPortalCaller: OptimismPortalCaller{contract: contract}, OptimismPortalTransactor: OptimismPortalTransactor{contract: contract}, OptimismPortalFilterer: OptimismPortalFilterer{contract: contract}}, nil +} + +// NewOptimismPortalCaller creates a new read-only instance of OptimismPortal, bound to a specific deployed contract. +func NewOptimismPortalCaller(address common.Address, caller bind.ContractCaller) (*OptimismPortalCaller, error) { + contract, err := bindOptimismPortal(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &OptimismPortalCaller{contract: contract}, nil +} + +// NewOptimismPortalTransactor creates a new write-only instance of OptimismPortal, bound to a specific deployed contract. +func NewOptimismPortalTransactor(address common.Address, transactor bind.ContractTransactor) (*OptimismPortalTransactor, error) { + contract, err := bindOptimismPortal(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &OptimismPortalTransactor{contract: contract}, nil +} + +// NewOptimismPortalFilterer creates a new log filterer instance of OptimismPortal, bound to a specific deployed contract. +func NewOptimismPortalFilterer(address common.Address, filterer bind.ContractFilterer) (*OptimismPortalFilterer, error) { + contract, err := bindOptimismPortal(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &OptimismPortalFilterer{contract: contract}, nil +} + +// bindOptimismPortal binds a generic wrapper to an already deployed contract. +func bindOptimismPortal(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(OptimismPortalABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_OptimismPortal *OptimismPortalRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OptimismPortal.Contract.OptimismPortalCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_OptimismPortal *OptimismPortalRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismPortal.Contract.OptimismPortalTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_OptimismPortal *OptimismPortalRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OptimismPortal.Contract.OptimismPortalTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_OptimismPortal *OptimismPortalCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OptimismPortal.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_OptimismPortal *OptimismPortalTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismPortal.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_OptimismPortal *OptimismPortalTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OptimismPortal.Contract.contract.Transact(opts, method, params...) +} + +// GUARDIAN is a free data retrieval call binding the contract method 0x724c184c. +// +// Solidity: function GUARDIAN() view returns(address) +func (_OptimismPortal *OptimismPortalCaller) GUARDIAN(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismPortal.contract.Call(opts, &out, "GUARDIAN") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GUARDIAN is a free data retrieval call binding the contract method 0x724c184c. +// +// Solidity: function GUARDIAN() view returns(address) +func (_OptimismPortal *OptimismPortalSession) GUARDIAN() (common.Address, error) { + return _OptimismPortal.Contract.GUARDIAN(&_OptimismPortal.CallOpts) +} + +// GUARDIAN is a free data retrieval call binding the contract method 0x724c184c. +// +// Solidity: function GUARDIAN() view returns(address) +func (_OptimismPortal *OptimismPortalCallerSession) GUARDIAN() (common.Address, error) { + return _OptimismPortal.Contract.GUARDIAN(&_OptimismPortal.CallOpts) +} + +// L2ORACLE is a free data retrieval call binding the contract method 0x001c2ff6. +// +// Solidity: function L2_ORACLE() view returns(address) +func (_OptimismPortal *OptimismPortalCaller) L2ORACLE(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismPortal.contract.Call(opts, &out, "L2_ORACLE") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// L2ORACLE is a free data retrieval call binding the contract method 0x001c2ff6. +// +// Solidity: function L2_ORACLE() view returns(address) +func (_OptimismPortal *OptimismPortalSession) L2ORACLE() (common.Address, error) { + return _OptimismPortal.Contract.L2ORACLE(&_OptimismPortal.CallOpts) +} + +// L2ORACLE is a free data retrieval call binding the contract method 0x001c2ff6. +// +// Solidity: function L2_ORACLE() view returns(address) +func (_OptimismPortal *OptimismPortalCallerSession) L2ORACLE() (common.Address, error) { + return _OptimismPortal.Contract.L2ORACLE(&_OptimismPortal.CallOpts) +} + +// SYSTEMCONFIG is a free data retrieval call binding the contract method 0xf0498750. +// +// Solidity: function SYSTEM_CONFIG() view returns(address) +func (_OptimismPortal *OptimismPortalCaller) SYSTEMCONFIG(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismPortal.contract.Call(opts, &out, "SYSTEM_CONFIG") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// SYSTEMCONFIG is a free data retrieval call binding the contract method 0xf0498750. +// +// Solidity: function SYSTEM_CONFIG() view returns(address) +func (_OptimismPortal *OptimismPortalSession) SYSTEMCONFIG() (common.Address, error) { + return _OptimismPortal.Contract.SYSTEMCONFIG(&_OptimismPortal.CallOpts) +} + +// SYSTEMCONFIG is a free data retrieval call binding the contract method 0xf0498750. +// +// Solidity: function SYSTEM_CONFIG() view returns(address) +func (_OptimismPortal *OptimismPortalCallerSession) SYSTEMCONFIG() (common.Address, error) { + return _OptimismPortal.Contract.SYSTEMCONFIG(&_OptimismPortal.CallOpts) +} + +// FinalizedWithdrawals is a free data retrieval call binding the contract method 0xa14238e7. +// +// Solidity: function finalizedWithdrawals(bytes32 ) view returns(bool) +func (_OptimismPortal *OptimismPortalCaller) FinalizedWithdrawals(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { + var out []interface{} + err := _OptimismPortal.contract.Call(opts, &out, "finalizedWithdrawals", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// FinalizedWithdrawals is a free data retrieval call binding the contract method 0xa14238e7. +// +// Solidity: function finalizedWithdrawals(bytes32 ) view returns(bool) +func (_OptimismPortal *OptimismPortalSession) FinalizedWithdrawals(arg0 [32]byte) (bool, error) { + return _OptimismPortal.Contract.FinalizedWithdrawals(&_OptimismPortal.CallOpts, arg0) +} + +// FinalizedWithdrawals is a free data retrieval call binding the contract method 0xa14238e7. +// +// Solidity: function finalizedWithdrawals(bytes32 ) view returns(bool) +func (_OptimismPortal *OptimismPortalCallerSession) FinalizedWithdrawals(arg0 [32]byte) (bool, error) { + return _OptimismPortal.Contract.FinalizedWithdrawals(&_OptimismPortal.CallOpts, arg0) +} + +// Guardian is a free data retrieval call binding the contract method 0x452a9320. +// +// Solidity: function guardian() view returns(address) +func (_OptimismPortal *OptimismPortalCaller) Guardian(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismPortal.contract.Call(opts, &out, "guardian") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Guardian is a free data retrieval call binding the contract method 0x452a9320. +// +// Solidity: function guardian() view returns(address) +func (_OptimismPortal *OptimismPortalSession) Guardian() (common.Address, error) { + return _OptimismPortal.Contract.Guardian(&_OptimismPortal.CallOpts) +} + +// Guardian is a free data retrieval call binding the contract method 0x452a9320. +// +// Solidity: function guardian() view returns(address) +func (_OptimismPortal *OptimismPortalCallerSession) Guardian() (common.Address, error) { + return _OptimismPortal.Contract.Guardian(&_OptimismPortal.CallOpts) +} + +// IsOutputFinalized is a free data retrieval call binding the contract method 0x6dbffb78. +// +// Solidity: function isOutputFinalized(uint256 _l2OutputIndex) view returns(bool) +func (_OptimismPortal *OptimismPortalCaller) IsOutputFinalized(opts *bind.CallOpts, _l2OutputIndex *big.Int) (bool, error) { + var out []interface{} + err := _OptimismPortal.contract.Call(opts, &out, "isOutputFinalized", _l2OutputIndex) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsOutputFinalized is a free data retrieval call binding the contract method 0x6dbffb78. +// +// Solidity: function isOutputFinalized(uint256 _l2OutputIndex) view returns(bool) +func (_OptimismPortal *OptimismPortalSession) IsOutputFinalized(_l2OutputIndex *big.Int) (bool, error) { + return _OptimismPortal.Contract.IsOutputFinalized(&_OptimismPortal.CallOpts, _l2OutputIndex) +} + +// IsOutputFinalized is a free data retrieval call binding the contract method 0x6dbffb78. +// +// Solidity: function isOutputFinalized(uint256 _l2OutputIndex) view returns(bool) +func (_OptimismPortal *OptimismPortalCallerSession) IsOutputFinalized(_l2OutputIndex *big.Int) (bool, error) { + return _OptimismPortal.Contract.IsOutputFinalized(&_OptimismPortal.CallOpts, _l2OutputIndex) +} + +// L2Oracle is a free data retrieval call binding the contract method 0x9b5f694a. +// +// Solidity: function l2Oracle() view returns(address) +func (_OptimismPortal *OptimismPortalCaller) L2Oracle(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismPortal.contract.Call(opts, &out, "l2Oracle") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// L2Oracle is a free data retrieval call binding the contract method 0x9b5f694a. +// +// Solidity: function l2Oracle() view returns(address) +func (_OptimismPortal *OptimismPortalSession) L2Oracle() (common.Address, error) { + return _OptimismPortal.Contract.L2Oracle(&_OptimismPortal.CallOpts) +} + +// L2Oracle is a free data retrieval call binding the contract method 0x9b5f694a. +// +// Solidity: function l2Oracle() view returns(address) +func (_OptimismPortal *OptimismPortalCallerSession) L2Oracle() (common.Address, error) { + return _OptimismPortal.Contract.L2Oracle(&_OptimismPortal.CallOpts) +} + +// L2Sender is a free data retrieval call binding the contract method 0x9bf62d82. +// +// Solidity: function l2Sender() view returns(address) +func (_OptimismPortal *OptimismPortalCaller) L2Sender(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismPortal.contract.Call(opts, &out, "l2Sender") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// L2Sender is a free data retrieval call binding the contract method 0x9bf62d82. +// +// Solidity: function l2Sender() view returns(address) +func (_OptimismPortal *OptimismPortalSession) L2Sender() (common.Address, error) { + return _OptimismPortal.Contract.L2Sender(&_OptimismPortal.CallOpts) +} + +// L2Sender is a free data retrieval call binding the contract method 0x9bf62d82. +// +// Solidity: function l2Sender() view returns(address) +func (_OptimismPortal *OptimismPortalCallerSession) L2Sender() (common.Address, error) { + return _OptimismPortal.Contract.L2Sender(&_OptimismPortal.CallOpts) +} + +// MinimumGasLimit is a free data retrieval call binding the contract method 0xa35d99df. +// +// Solidity: function minimumGasLimit(uint64 _byteCount) pure returns(uint64) +func (_OptimismPortal *OptimismPortalCaller) MinimumGasLimit(opts *bind.CallOpts, _byteCount uint64) (uint64, error) { + var out []interface{} + err := _OptimismPortal.contract.Call(opts, &out, "minimumGasLimit", _byteCount) + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// MinimumGasLimit is a free data retrieval call binding the contract method 0xa35d99df. +// +// Solidity: function minimumGasLimit(uint64 _byteCount) pure returns(uint64) +func (_OptimismPortal *OptimismPortalSession) MinimumGasLimit(_byteCount uint64) (uint64, error) { + return _OptimismPortal.Contract.MinimumGasLimit(&_OptimismPortal.CallOpts, _byteCount) +} + +// MinimumGasLimit is a free data retrieval call binding the contract method 0xa35d99df. +// +// Solidity: function minimumGasLimit(uint64 _byteCount) pure returns(uint64) +func (_OptimismPortal *OptimismPortalCallerSession) MinimumGasLimit(_byteCount uint64) (uint64, error) { + return _OptimismPortal.Contract.MinimumGasLimit(&_OptimismPortal.CallOpts, _byteCount) +} + +// Params is a free data retrieval call binding the contract method 0xcff0ab96. +// +// Solidity: function params() view returns(uint128 prevBaseFee, uint64 prevBoughtGas, uint64 prevBlockNum) +func (_OptimismPortal *OptimismPortalCaller) Params(opts *bind.CallOpts) (struct { + PrevBaseFee *big.Int + PrevBoughtGas uint64 + PrevBlockNum uint64 +}, error) { + var out []interface{} + err := _OptimismPortal.contract.Call(opts, &out, "params") + + outstruct := new(struct { + PrevBaseFee *big.Int + PrevBoughtGas uint64 + PrevBlockNum uint64 + }) + if err != nil { + return *outstruct, err + } + + outstruct.PrevBaseFee = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.PrevBoughtGas = *abi.ConvertType(out[1], new(uint64)).(*uint64) + outstruct.PrevBlockNum = *abi.ConvertType(out[2], new(uint64)).(*uint64) + + return *outstruct, err + +} + +// Params is a free data retrieval call binding the contract method 0xcff0ab96. +// +// Solidity: function params() view returns(uint128 prevBaseFee, uint64 prevBoughtGas, uint64 prevBlockNum) +func (_OptimismPortal *OptimismPortalSession) Params() (struct { + PrevBaseFee *big.Int + PrevBoughtGas uint64 + PrevBlockNum uint64 +}, error) { + return _OptimismPortal.Contract.Params(&_OptimismPortal.CallOpts) +} + +// Params is a free data retrieval call binding the contract method 0xcff0ab96. +// +// Solidity: function params() view returns(uint128 prevBaseFee, uint64 prevBoughtGas, uint64 prevBlockNum) +func (_OptimismPortal *OptimismPortalCallerSession) Params() (struct { + PrevBaseFee *big.Int + PrevBoughtGas uint64 + PrevBlockNum uint64 +}, error) { + return _OptimismPortal.Contract.Params(&_OptimismPortal.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_OptimismPortal *OptimismPortalCaller) Paused(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _OptimismPortal.contract.Call(opts, &out, "paused") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_OptimismPortal *OptimismPortalSession) Paused() (bool, error) { + return _OptimismPortal.Contract.Paused(&_OptimismPortal.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_OptimismPortal *OptimismPortalCallerSession) Paused() (bool, error) { + return _OptimismPortal.Contract.Paused(&_OptimismPortal.CallOpts) +} + +// ProvenWithdrawals is a free data retrieval call binding the contract method 0xe965084c. +// +// Solidity: function provenWithdrawals(bytes32 ) view returns(bytes32 outputRoot, uint128 timestamp, uint128 l2OutputIndex) +func (_OptimismPortal *OptimismPortalCaller) ProvenWithdrawals(opts *bind.CallOpts, arg0 [32]byte) (struct { + OutputRoot [32]byte + Timestamp *big.Int + L2OutputIndex *big.Int +}, error) { + var out []interface{} + err := _OptimismPortal.contract.Call(opts, &out, "provenWithdrawals", arg0) + + outstruct := new(struct { + OutputRoot [32]byte + Timestamp *big.Int + L2OutputIndex *big.Int + }) + if err != nil { + return *outstruct, err + } + + outstruct.OutputRoot = *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + outstruct.Timestamp = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.L2OutputIndex = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +// ProvenWithdrawals is a free data retrieval call binding the contract method 0xe965084c. +// +// Solidity: function provenWithdrawals(bytes32 ) view returns(bytes32 outputRoot, uint128 timestamp, uint128 l2OutputIndex) +func (_OptimismPortal *OptimismPortalSession) ProvenWithdrawals(arg0 [32]byte) (struct { + OutputRoot [32]byte + Timestamp *big.Int + L2OutputIndex *big.Int +}, error) { + return _OptimismPortal.Contract.ProvenWithdrawals(&_OptimismPortal.CallOpts, arg0) +} + +// ProvenWithdrawals is a free data retrieval call binding the contract method 0xe965084c. +// +// Solidity: function provenWithdrawals(bytes32 ) view returns(bytes32 outputRoot, uint128 timestamp, uint128 l2OutputIndex) +func (_OptimismPortal *OptimismPortalCallerSession) ProvenWithdrawals(arg0 [32]byte) (struct { + OutputRoot [32]byte + Timestamp *big.Int + L2OutputIndex *big.Int +}, error) { + return _OptimismPortal.Contract.ProvenWithdrawals(&_OptimismPortal.CallOpts, arg0) +} + +// SystemConfig is a free data retrieval call binding the contract method 0x33d7e2bd. +// +// Solidity: function systemConfig() view returns(address) +func (_OptimismPortal *OptimismPortalCaller) SystemConfig(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismPortal.contract.Call(opts, &out, "systemConfig") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// SystemConfig is a free data retrieval call binding the contract method 0x33d7e2bd. +// +// Solidity: function systemConfig() view returns(address) +func (_OptimismPortal *OptimismPortalSession) SystemConfig() (common.Address, error) { + return _OptimismPortal.Contract.SystemConfig(&_OptimismPortal.CallOpts) +} + +// SystemConfig is a free data retrieval call binding the contract method 0x33d7e2bd. +// +// Solidity: function systemConfig() view returns(address) +func (_OptimismPortal *OptimismPortalCallerSession) SystemConfig() (common.Address, error) { + return _OptimismPortal.Contract.SystemConfig(&_OptimismPortal.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_OptimismPortal *OptimismPortalCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _OptimismPortal.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_OptimismPortal *OptimismPortalSession) Version() (string, error) { + return _OptimismPortal.Contract.Version(&_OptimismPortal.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_OptimismPortal *OptimismPortalCallerSession) Version() (string, error) { + return _OptimismPortal.Contract.Version(&_OptimismPortal.CallOpts) +} + +// DepositTransaction is a paid mutator transaction binding the contract method 0xe9e05c42. +// +// Solidity: function depositTransaction(address _to, uint256 _value, uint64 _gasLimit, bool _isCreation, bytes _data) payable returns() +func (_OptimismPortal *OptimismPortalTransactor) DepositTransaction(opts *bind.TransactOpts, _to common.Address, _value *big.Int, _gasLimit uint64, _isCreation bool, _data []byte) (*types.Transaction, error) { + return _OptimismPortal.contract.Transact(opts, "depositTransaction", _to, _value, _gasLimit, _isCreation, _data) +} + +// DepositTransaction is a paid mutator transaction binding the contract method 0xe9e05c42. +// +// Solidity: function depositTransaction(address _to, uint256 _value, uint64 _gasLimit, bool _isCreation, bytes _data) payable returns() +func (_OptimismPortal *OptimismPortalSession) DepositTransaction(_to common.Address, _value *big.Int, _gasLimit uint64, _isCreation bool, _data []byte) (*types.Transaction, error) { + return _OptimismPortal.Contract.DepositTransaction(&_OptimismPortal.TransactOpts, _to, _value, _gasLimit, _isCreation, _data) +} + +// DepositTransaction is a paid mutator transaction binding the contract method 0xe9e05c42. +// +// Solidity: function depositTransaction(address _to, uint256 _value, uint64 _gasLimit, bool _isCreation, bytes _data) payable returns() +func (_OptimismPortal *OptimismPortalTransactorSession) DepositTransaction(_to common.Address, _value *big.Int, _gasLimit uint64, _isCreation bool, _data []byte) (*types.Transaction, error) { + return _OptimismPortal.Contract.DepositTransaction(&_OptimismPortal.TransactOpts, _to, _value, _gasLimit, _isCreation, _data) +} + +// DonateETH is a paid mutator transaction binding the contract method 0x8b4c40b0. +// +// Solidity: function donateETH() payable returns() +func (_OptimismPortal *OptimismPortalTransactor) DonateETH(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismPortal.contract.Transact(opts, "donateETH") +} + +// DonateETH is a paid mutator transaction binding the contract method 0x8b4c40b0. +// +// Solidity: function donateETH() payable returns() +func (_OptimismPortal *OptimismPortalSession) DonateETH() (*types.Transaction, error) { + return _OptimismPortal.Contract.DonateETH(&_OptimismPortal.TransactOpts) +} + +// DonateETH is a paid mutator transaction binding the contract method 0x8b4c40b0. +// +// Solidity: function donateETH() payable returns() +func (_OptimismPortal *OptimismPortalTransactorSession) DonateETH() (*types.Transaction, error) { + return _OptimismPortal.Contract.DonateETH(&_OptimismPortal.TransactOpts) +} + +// FinalizeWithdrawalTransaction is a paid mutator transaction binding the contract method 0x8c3152e9. +// +// Solidity: function finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx) returns() +func (_OptimismPortal *OptimismPortalTransactor) FinalizeWithdrawalTransaction(opts *bind.TransactOpts, _tx TypesWithdrawalTransaction) (*types.Transaction, error) { + return _OptimismPortal.contract.Transact(opts, "finalizeWithdrawalTransaction", _tx) +} + +// FinalizeWithdrawalTransaction is a paid mutator transaction binding the contract method 0x8c3152e9. +// +// Solidity: function finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx) returns() +func (_OptimismPortal *OptimismPortalSession) FinalizeWithdrawalTransaction(_tx TypesWithdrawalTransaction) (*types.Transaction, error) { + return _OptimismPortal.Contract.FinalizeWithdrawalTransaction(&_OptimismPortal.TransactOpts, _tx) +} + +// FinalizeWithdrawalTransaction is a paid mutator transaction binding the contract method 0x8c3152e9. +// +// Solidity: function finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx) returns() +func (_OptimismPortal *OptimismPortalTransactorSession) FinalizeWithdrawalTransaction(_tx TypesWithdrawalTransaction) (*types.Transaction, error) { + return _OptimismPortal.Contract.FinalizeWithdrawalTransaction(&_OptimismPortal.TransactOpts, _tx) +} + +// Initialize is a paid mutator transaction binding the contract method 0xfecf9734. +// +// Solidity: function initialize(address _l2Oracle, address _guardian, address _systemConfig, bool _paused) returns() +func (_OptimismPortal *OptimismPortalTransactor) Initialize(opts *bind.TransactOpts, _l2Oracle common.Address, _guardian common.Address, _systemConfig common.Address, _paused bool) (*types.Transaction, error) { + return _OptimismPortal.contract.Transact(opts, "initialize", _l2Oracle, _guardian, _systemConfig, _paused) +} + +// Initialize is a paid mutator transaction binding the contract method 0xfecf9734. +// +// Solidity: function initialize(address _l2Oracle, address _guardian, address _systemConfig, bool _paused) returns() +func (_OptimismPortal *OptimismPortalSession) Initialize(_l2Oracle common.Address, _guardian common.Address, _systemConfig common.Address, _paused bool) (*types.Transaction, error) { + return _OptimismPortal.Contract.Initialize(&_OptimismPortal.TransactOpts, _l2Oracle, _guardian, _systemConfig, _paused) +} + +// Initialize is a paid mutator transaction binding the contract method 0xfecf9734. +// +// Solidity: function initialize(address _l2Oracle, address _guardian, address _systemConfig, bool _paused) returns() +func (_OptimismPortal *OptimismPortalTransactorSession) Initialize(_l2Oracle common.Address, _guardian common.Address, _systemConfig common.Address, _paused bool) (*types.Transaction, error) { + return _OptimismPortal.Contract.Initialize(&_OptimismPortal.TransactOpts, _l2Oracle, _guardian, _systemConfig, _paused) +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_OptimismPortal *OptimismPortalTransactor) Pause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismPortal.contract.Transact(opts, "pause") +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_OptimismPortal *OptimismPortalSession) Pause() (*types.Transaction, error) { + return _OptimismPortal.Contract.Pause(&_OptimismPortal.TransactOpts) +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_OptimismPortal *OptimismPortalTransactorSession) Pause() (*types.Transaction, error) { + return _OptimismPortal.Contract.Pause(&_OptimismPortal.TransactOpts) +} + +// ProveWithdrawalTransaction is a paid mutator transaction binding the contract method 0x4870496f. +// +// Solidity: function proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx, uint256 _l2OutputIndex, (bytes32,bytes32,bytes32,bytes32) _outputRootProof, bytes[] _withdrawalProof) returns() +func (_OptimismPortal *OptimismPortalTransactor) ProveWithdrawalTransaction(opts *bind.TransactOpts, _tx TypesWithdrawalTransaction, _l2OutputIndex *big.Int, _outputRootProof TypesOutputRootProof, _withdrawalProof [][]byte) (*types.Transaction, error) { + return _OptimismPortal.contract.Transact(opts, "proveWithdrawalTransaction", _tx, _l2OutputIndex, _outputRootProof, _withdrawalProof) +} + +// ProveWithdrawalTransaction is a paid mutator transaction binding the contract method 0x4870496f. +// +// Solidity: function proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx, uint256 _l2OutputIndex, (bytes32,bytes32,bytes32,bytes32) _outputRootProof, bytes[] _withdrawalProof) returns() +func (_OptimismPortal *OptimismPortalSession) ProveWithdrawalTransaction(_tx TypesWithdrawalTransaction, _l2OutputIndex *big.Int, _outputRootProof TypesOutputRootProof, _withdrawalProof [][]byte) (*types.Transaction, error) { + return _OptimismPortal.Contract.ProveWithdrawalTransaction(&_OptimismPortal.TransactOpts, _tx, _l2OutputIndex, _outputRootProof, _withdrawalProof) +} + +// ProveWithdrawalTransaction is a paid mutator transaction binding the contract method 0x4870496f. +// +// Solidity: function proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx, uint256 _l2OutputIndex, (bytes32,bytes32,bytes32,bytes32) _outputRootProof, bytes[] _withdrawalProof) returns() +func (_OptimismPortal *OptimismPortalTransactorSession) ProveWithdrawalTransaction(_tx TypesWithdrawalTransaction, _l2OutputIndex *big.Int, _outputRootProof TypesOutputRootProof, _withdrawalProof [][]byte) (*types.Transaction, error) { + return _OptimismPortal.Contract.ProveWithdrawalTransaction(&_OptimismPortal.TransactOpts, _tx, _l2OutputIndex, _outputRootProof, _withdrawalProof) +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_OptimismPortal *OptimismPortalTransactor) Unpause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismPortal.contract.Transact(opts, "unpause") +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_OptimismPortal *OptimismPortalSession) Unpause() (*types.Transaction, error) { + return _OptimismPortal.Contract.Unpause(&_OptimismPortal.TransactOpts) +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_OptimismPortal *OptimismPortalTransactorSession) Unpause() (*types.Transaction, error) { + return _OptimismPortal.Contract.Unpause(&_OptimismPortal.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_OptimismPortal *OptimismPortalTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismPortal.contract.RawTransact(opts, nil) // calldata is disallowed for receive function +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_OptimismPortal *OptimismPortalSession) Receive() (*types.Transaction, error) { + return _OptimismPortal.Contract.Receive(&_OptimismPortal.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_OptimismPortal *OptimismPortalTransactorSession) Receive() (*types.Transaction, error) { + return _OptimismPortal.Contract.Receive(&_OptimismPortal.TransactOpts) +} + +// OptimismPortalInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the OptimismPortal contract. +type OptimismPortalInitializedIterator struct { + Event *OptimismPortalInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OptimismPortalInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismPortalInitialized) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OptimismPortalInitialized) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OptimismPortalInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OptimismPortalInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OptimismPortalInitialized represents a Initialized event raised by the OptimismPortal contract. +type OptimismPortalInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_OptimismPortal *OptimismPortalFilterer) FilterInitialized(opts *bind.FilterOpts) (*OptimismPortalInitializedIterator, error) { + + logs, sub, err := _OptimismPortal.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &OptimismPortalInitializedIterator{contract: _OptimismPortal.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_OptimismPortal *OptimismPortalFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *OptimismPortalInitialized) (event.Subscription, error) { + + logs, sub, err := _OptimismPortal.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: + // New log arrived, parse the event and forward to the user + event := new(OptimismPortalInitialized) + if err := _OptimismPortal.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 +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_OptimismPortal *OptimismPortalFilterer) ParseInitialized(log types.Log) (*OptimismPortalInitialized, error) { + event := new(OptimismPortalInitialized) + if err := _OptimismPortal.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// OptimismPortalPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the OptimismPortal contract. +type OptimismPortalPausedIterator struct { + Event *OptimismPortalPaused // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OptimismPortalPausedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismPortalPaused) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OptimismPortalPaused) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OptimismPortalPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OptimismPortalPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OptimismPortalPaused represents a Paused event raised by the OptimismPortal contract. +type OptimismPortalPaused struct { + Account common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPaused is a free log retrieval operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_OptimismPortal *OptimismPortalFilterer) FilterPaused(opts *bind.FilterOpts) (*OptimismPortalPausedIterator, error) { + + logs, sub, err := _OptimismPortal.contract.FilterLogs(opts, "Paused") + if err != nil { + return nil, err + } + return &OptimismPortalPausedIterator{contract: _OptimismPortal.contract, event: "Paused", logs: logs, sub: sub}, nil +} + +// WatchPaused is a free log subscription operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_OptimismPortal *OptimismPortalFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *OptimismPortalPaused) (event.Subscription, error) { + + logs, sub, err := _OptimismPortal.contract.WatchLogs(opts, "Paused") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OptimismPortalPaused) + if err := _OptimismPortal.contract.UnpackLog(event, "Paused", 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 +} + +// ParsePaused is a log parse operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258. +// +// Solidity: event Paused(address account) +func (_OptimismPortal *OptimismPortalFilterer) ParsePaused(log types.Log) (*OptimismPortalPaused, error) { + event := new(OptimismPortalPaused) + if err := _OptimismPortal.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// OptimismPortalTransactionDepositedIterator is returned from FilterTransactionDeposited and is used to iterate over the raw logs and unpacked data for TransactionDeposited events raised by the OptimismPortal contract. +type OptimismPortalTransactionDepositedIterator struct { + Event *OptimismPortalTransactionDeposited // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OptimismPortalTransactionDepositedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismPortalTransactionDeposited) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OptimismPortalTransactionDeposited) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OptimismPortalTransactionDepositedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OptimismPortalTransactionDepositedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OptimismPortalTransactionDeposited represents a TransactionDeposited event raised by the OptimismPortal contract. +type OptimismPortalTransactionDeposited struct { + From common.Address + To common.Address + Version *big.Int + OpaqueData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransactionDeposited is a free log retrieval operation binding the contract event 0xb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32. +// +// Solidity: event TransactionDeposited(address indexed from, address indexed to, uint256 indexed version, bytes opaqueData) +func (_OptimismPortal *OptimismPortalFilterer) FilterTransactionDeposited(opts *bind.FilterOpts, from []common.Address, to []common.Address, version []*big.Int) (*OptimismPortalTransactionDepositedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var versionRule []interface{} + for _, versionItem := range version { + versionRule = append(versionRule, versionItem) + } + + logs, sub, err := _OptimismPortal.contract.FilterLogs(opts, "TransactionDeposited", fromRule, toRule, versionRule) + if err != nil { + return nil, err + } + return &OptimismPortalTransactionDepositedIterator{contract: _OptimismPortal.contract, event: "TransactionDeposited", logs: logs, sub: sub}, nil +} + +// WatchTransactionDeposited is a free log subscription operation binding the contract event 0xb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32. +// +// Solidity: event TransactionDeposited(address indexed from, address indexed to, uint256 indexed version, bytes opaqueData) +func (_OptimismPortal *OptimismPortalFilterer) WatchTransactionDeposited(opts *bind.WatchOpts, sink chan<- *OptimismPortalTransactionDeposited, from []common.Address, to []common.Address, version []*big.Int) (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) + } + var versionRule []interface{} + for _, versionItem := range version { + versionRule = append(versionRule, versionItem) + } + + logs, sub, err := _OptimismPortal.contract.WatchLogs(opts, "TransactionDeposited", fromRule, toRule, versionRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OptimismPortalTransactionDeposited) + if err := _OptimismPortal.contract.UnpackLog(event, "TransactionDeposited", 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 +} + +// ParseTransactionDeposited is a log parse operation binding the contract event 0xb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32. +// +// Solidity: event TransactionDeposited(address indexed from, address indexed to, uint256 indexed version, bytes opaqueData) +func (_OptimismPortal *OptimismPortalFilterer) ParseTransactionDeposited(log types.Log) (*OptimismPortalTransactionDeposited, error) { + event := new(OptimismPortalTransactionDeposited) + if err := _OptimismPortal.contract.UnpackLog(event, "TransactionDeposited", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// OptimismPortalUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the OptimismPortal contract. +type OptimismPortalUnpausedIterator struct { + Event *OptimismPortalUnpaused // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OptimismPortalUnpausedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismPortalUnpaused) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OptimismPortalUnpaused) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OptimismPortalUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OptimismPortalUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OptimismPortalUnpaused represents a Unpaused event raised by the OptimismPortal contract. +type OptimismPortalUnpaused struct { + Account common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUnpaused is a free log retrieval operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_OptimismPortal *OptimismPortalFilterer) FilterUnpaused(opts *bind.FilterOpts) (*OptimismPortalUnpausedIterator, error) { + + logs, sub, err := _OptimismPortal.contract.FilterLogs(opts, "Unpaused") + if err != nil { + return nil, err + } + return &OptimismPortalUnpausedIterator{contract: _OptimismPortal.contract, event: "Unpaused", logs: logs, sub: sub}, nil +} + +// WatchUnpaused is a free log subscription operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_OptimismPortal *OptimismPortalFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *OptimismPortalUnpaused) (event.Subscription, error) { + + logs, sub, err := _OptimismPortal.contract.WatchLogs(opts, "Unpaused") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OptimismPortalUnpaused) + if err := _OptimismPortal.contract.UnpackLog(event, "Unpaused", 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 +} + +// ParseUnpaused is a log parse operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa. +// +// Solidity: event Unpaused(address account) +func (_OptimismPortal *OptimismPortalFilterer) ParseUnpaused(log types.Log) (*OptimismPortalUnpaused, error) { + event := new(OptimismPortalUnpaused) + if err := _OptimismPortal.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// OptimismPortalWithdrawalFinalizedIterator is returned from FilterWithdrawalFinalized and is used to iterate over the raw logs and unpacked data for WithdrawalFinalized events raised by the OptimismPortal contract. +type OptimismPortalWithdrawalFinalizedIterator struct { + Event *OptimismPortalWithdrawalFinalized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OptimismPortalWithdrawalFinalizedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismPortalWithdrawalFinalized) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OptimismPortalWithdrawalFinalized) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OptimismPortalWithdrawalFinalizedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OptimismPortalWithdrawalFinalizedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OptimismPortalWithdrawalFinalized represents a WithdrawalFinalized event raised by the OptimismPortal contract. +type OptimismPortalWithdrawalFinalized struct { + WithdrawalHash [32]byte + Success bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawalFinalized is a free log retrieval operation binding the contract event 0xdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b. +// +// Solidity: event WithdrawalFinalized(bytes32 indexed withdrawalHash, bool success) +func (_OptimismPortal *OptimismPortalFilterer) FilterWithdrawalFinalized(opts *bind.FilterOpts, withdrawalHash [][32]byte) (*OptimismPortalWithdrawalFinalizedIterator, error) { + + var withdrawalHashRule []interface{} + for _, withdrawalHashItem := range withdrawalHash { + withdrawalHashRule = append(withdrawalHashRule, withdrawalHashItem) + } + + logs, sub, err := _OptimismPortal.contract.FilterLogs(opts, "WithdrawalFinalized", withdrawalHashRule) + if err != nil { + return nil, err + } + return &OptimismPortalWithdrawalFinalizedIterator{contract: _OptimismPortal.contract, event: "WithdrawalFinalized", logs: logs, sub: sub}, nil +} + +// WatchWithdrawalFinalized is a free log subscription operation binding the contract event 0xdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b. +// +// Solidity: event WithdrawalFinalized(bytes32 indexed withdrawalHash, bool success) +func (_OptimismPortal *OptimismPortalFilterer) WatchWithdrawalFinalized(opts *bind.WatchOpts, sink chan<- *OptimismPortalWithdrawalFinalized, withdrawalHash [][32]byte) (event.Subscription, error) { + + var withdrawalHashRule []interface{} + for _, withdrawalHashItem := range withdrawalHash { + withdrawalHashRule = append(withdrawalHashRule, withdrawalHashItem) + } + + logs, sub, err := _OptimismPortal.contract.WatchLogs(opts, "WithdrawalFinalized", withdrawalHashRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OptimismPortalWithdrawalFinalized) + if err := _OptimismPortal.contract.UnpackLog(event, "WithdrawalFinalized", 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 +} + +// ParseWithdrawalFinalized is a log parse operation binding the contract event 0xdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b. +// +// Solidity: event WithdrawalFinalized(bytes32 indexed withdrawalHash, bool success) +func (_OptimismPortal *OptimismPortalFilterer) ParseWithdrawalFinalized(log types.Log) (*OptimismPortalWithdrawalFinalized, error) { + event := new(OptimismPortalWithdrawalFinalized) + if err := _OptimismPortal.contract.UnpackLog(event, "WithdrawalFinalized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// OptimismPortalWithdrawalProvenIterator is returned from FilterWithdrawalProven and is used to iterate over the raw logs and unpacked data for WithdrawalProven events raised by the OptimismPortal contract. +type OptimismPortalWithdrawalProvenIterator struct { + Event *OptimismPortalWithdrawalProven // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OptimismPortalWithdrawalProvenIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismPortalWithdrawalProven) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OptimismPortalWithdrawalProven) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OptimismPortalWithdrawalProvenIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OptimismPortalWithdrawalProvenIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OptimismPortalWithdrawalProven represents a WithdrawalProven event raised by the OptimismPortal contract. +type OptimismPortalWithdrawalProven struct { + WithdrawalHash [32]byte + From common.Address + To common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawalProven is a free log retrieval operation binding the contract event 0x67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f62. +// +// Solidity: event WithdrawalProven(bytes32 indexed withdrawalHash, address indexed from, address indexed to) +func (_OptimismPortal *OptimismPortalFilterer) FilterWithdrawalProven(opts *bind.FilterOpts, withdrawalHash [][32]byte, from []common.Address, to []common.Address) (*OptimismPortalWithdrawalProvenIterator, error) { + + var withdrawalHashRule []interface{} + for _, withdrawalHashItem := range withdrawalHash { + withdrawalHashRule = append(withdrawalHashRule, withdrawalHashItem) + } + 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 := _OptimismPortal.contract.FilterLogs(opts, "WithdrawalProven", withdrawalHashRule, fromRule, toRule) + if err != nil { + return nil, err + } + return &OptimismPortalWithdrawalProvenIterator{contract: _OptimismPortal.contract, event: "WithdrawalProven", logs: logs, sub: sub}, nil +} + +// WatchWithdrawalProven is a free log subscription operation binding the contract event 0x67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f62. +// +// Solidity: event WithdrawalProven(bytes32 indexed withdrawalHash, address indexed from, address indexed to) +func (_OptimismPortal *OptimismPortalFilterer) WatchWithdrawalProven(opts *bind.WatchOpts, sink chan<- *OptimismPortalWithdrawalProven, withdrawalHash [][32]byte, from []common.Address, to []common.Address) (event.Subscription, error) { + + var withdrawalHashRule []interface{} + for _, withdrawalHashItem := range withdrawalHash { + withdrawalHashRule = append(withdrawalHashRule, withdrawalHashItem) + } + 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 := _OptimismPortal.contract.WatchLogs(opts, "WithdrawalProven", withdrawalHashRule, fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OptimismPortalWithdrawalProven) + if err := _OptimismPortal.contract.UnpackLog(event, "WithdrawalProven", 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 +} + +// ParseWithdrawalProven is a log parse operation binding the contract event 0x67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f62. +// +// Solidity: event WithdrawalProven(bytes32 indexed withdrawalHash, address indexed from, address indexed to) +func (_OptimismPortal *OptimismPortalFilterer) ParseWithdrawalProven(log types.Log) (*OptimismPortalWithdrawalProven, error) { + event := new(OptimismPortalWithdrawalProven) + if err := _OptimismPortal.contract.UnpackLog(event, "WithdrawalProven", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-bindings/bindings/optimismportal_more.go b/op-bindings/bindings/optimismportal_more.go new file mode 100644 index 000000000..2ec41bc3f --- /dev/null +++ b/op-bindings/bindings/optimismportal_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const OptimismPortalStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/L1/OptimismPortal.sol:OptimismPortal\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"src/L1/OptimismPortal.sol:OptimismPortal\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"src/L1/OptimismPortal.sol:OptimismPortal\",\"label\":\"params\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_struct(ResourceParams)1014_storage\"},{\"astId\":1003,\"contract\":\"src/L1/OptimismPortal.sol:OptimismPortal\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_array(t_uint256)48_storage\"},{\"astId\":1004,\"contract\":\"src/L1/OptimismPortal.sol:OptimismPortal\",\"label\":\"l2Sender\",\"offset\":0,\"slot\":\"50\",\"type\":\"t_address\"},{\"astId\":1005,\"contract\":\"src/L1/OptimismPortal.sol:OptimismPortal\",\"label\":\"finalizedWithdrawals\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1006,\"contract\":\"src/L1/OptimismPortal.sol:OptimismPortal\",\"label\":\"provenWithdrawals\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_mapping(t_bytes32,t_struct(ProvenWithdrawal)1013_storage)\"},{\"astId\":1007,\"contract\":\"src/L1/OptimismPortal.sol:OptimismPortal\",\"label\":\"paused\",\"offset\":0,\"slot\":\"53\",\"type\":\"t_bool\"},{\"astId\":1008,\"contract\":\"src/L1/OptimismPortal.sol:OptimismPortal\",\"label\":\"l2Oracle\",\"offset\":1,\"slot\":\"53\",\"type\":\"t_contract(L2OutputOracle)1011\"},{\"astId\":1009,\"contract\":\"src/L1/OptimismPortal.sol:OptimismPortal\",\"label\":\"systemConfig\",\"offset\":0,\"slot\":\"54\",\"type\":\"t_contract(SystemConfig)1012\"},{\"astId\":1010,\"contract\":\"src/L1/OptimismPortal.sol:OptimismPortal\",\"label\":\"guardian\",\"offset\":0,\"slot\":\"55\",\"type\":\"t_address\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)48_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[48]\",\"numberOfBytes\":\"1536\",\"base\":\"t_uint256\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_contract(L2OutputOracle)1011\":{\"encoding\":\"inplace\",\"label\":\"contract L2OutputOracle\",\"numberOfBytes\":\"20\"},\"t_contract(SystemConfig)1012\":{\"encoding\":\"inplace\",\"label\":\"contract SystemConfig\",\"numberOfBytes\":\"20\"},\"t_mapping(t_bytes32,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_bool\"},\"t_mapping(t_bytes32,t_struct(ProvenWithdrawal)1013_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e struct OptimismPortal.ProvenWithdrawal)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_struct(ProvenWithdrawal)1013_storage\"},\"t_struct(ProvenWithdrawal)1013_storage\":{\"encoding\":\"inplace\",\"label\":\"struct OptimismPortal.ProvenWithdrawal\",\"numberOfBytes\":\"64\"},\"t_struct(ResourceParams)1014_storage\":{\"encoding\":\"inplace\",\"label\":\"struct ResourceMetering.ResourceParams\",\"numberOfBytes\":\"32\"},\"t_uint128\":{\"encoding\":\"inplace\",\"label\":\"uint128\",\"numberOfBytes\":\"16\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint64\":{\"encoding\":\"inplace\",\"label\":\"uint64\",\"numberOfBytes\":\"8\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" + +var OptimismPortalStorageLayout = new(solc.StorageLayout) + +var OptimismPortalDeployedBin = "0x60806040526004361061016d5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063e9e05c4211610059578063e9e05c4214610573578063f049875014610586578063fecf9734146105b157600080fd5b8063a35d99df1461040d578063cff0ab9614610446578063e965084c146104e757600080fd5b80639b5f694a116100b05780639b5f694a1461037e5780639bf62d82146103b0578063a14238e7146103dd57600080fd5b80638b4c40b0146101925780638c3152e91461035e57600080fd5b806354fd4d50116101225780636dbffb78116101075780636dbffb78146102fe578063724c184c1461031e5780638456cb591461034957600080fd5b806354fd4d501461027e5780635c975abb146102d457600080fd5b80633f4ba83a116101535780633f4ba83a1461021c578063452a9320146102315780634870496f1461025e57600080fd5b80621c2ff61461019957806333d7e2bd146101ef57600080fd5b36610194576101923334620186a06000604051806020016040528060008152506105d1565b005b600080fd5b3480156101a557600080fd5b50603554610100900473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101fb57600080fd5b506036546101c59073ffffffffffffffffffffffffffffffffffffffff1681565b34801561022857600080fd5b5061019261086c565b34801561023d57600080fd5b506037546101c59073ffffffffffffffffffffffffffffffffffffffff1681565b34801561026a57600080fd5b50610192610279366004614a4a565b610971565b34801561028a57600080fd5b506102c76040518060400160405280600681526020017f312e31302e30000000000000000000000000000000000000000000000000000081525081565b6040516101e69190614ba0565b3480156102e057600080fd5b506035546102ee9060ff1681565b60405190151581526020016101e6565b34801561030a57600080fd5b506102ee610319366004614bb3565b610fa6565b34801561032a57600080fd5b5060375473ffffffffffffffffffffffffffffffffffffffff166101c5565b34801561035557600080fd5b50610192611065565b34801561036a57600080fd5b50610192610379366004614bcc565b611167565b34801561038a57600080fd5b506035546101c590610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103bc57600080fd5b506032546101c59073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103e957600080fd5b506102ee6103f8366004614bb3565b60336020526000908152604090205460ff1681565b34801561041957600080fd5b5061042d610428366004614c26565b611a2b565b60405167ffffffffffffffff90911681526020016101e6565b34801561045257600080fd5b506001546104ae906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101e6565b3480156104f357600080fd5b50610545610502366004614bb3565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101e6565b610192610581366004614c51565b6105d1565b34801561059257600080fd5b5060365473ffffffffffffffffffffffffffffffffffffffff166101c5565b3480156105bd57600080fd5b506101926105cc366004614ccc565b611a44565b8260005a905083156106885773ffffffffffffffffffffffffffffffffffffffff87161561068857604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b6106928351611a2b565b67ffffffffffffffff168567ffffffffffffffff161015610735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4f7074696d69736d506f7274616c3a20676173206c696d697420746f6f20736d60448201527f616c6c0000000000000000000000000000000000000000000000000000000000606482015260840161067f565b6201d4c0835111156107a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4f7074696d69736d506f7274616c3a206461746120746f6f206c617267650000604482015260640161067f565b333281146107c4575033731111000000000000000000000000000000001111015b600034888888886040516020016107df959493929190614d26565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161084f9190614ba0565b60405180910390a450506108638282611c52565b50505050505050565b60375473ffffffffffffffffffffffffffffffffffffffff163314610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e20756e70617573650000000000000000000000000000000000000000000000606482015260840161067f565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b60355460ff16156109de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a2070617573656400000000000000000000604482015260640161067f565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e747261637400606482015260840161067f565b6035546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101869052600091610100900473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b369190614dab565b519050610b50610b4b36869003860186614e10565b611f7f565b8114610bde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f660000000000000000000000000000000000000000000000606482015260840161067f565b6000610be987611fdb565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610d035750805160355460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015261010090910473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cff9190614dab565b5114155b610d8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e000000000000000000606482015260840161067f565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610e589101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e4e888a614e76565b8a6040013561200b565b610ee4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f660000000000000000000000000000606482015260840161067f565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6035546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810183905260009161105f9161010090910473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614dab565b602001516fffffffffffffffffffffffffffffffff1661202f565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e20706175736500000000000000000000000000000000000000000000000000606482015260840161067f565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001610967565b60355460ff16156111d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a2070617573656400000000000000000000604482015260640161067f565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead1461127d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e00606482015260840161067f565b600061128882611fdb565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e207965740000000000000000000000000000606482015260840161067f565b603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114049190614efa565b81602001516fffffffffffffffffffffffffffffffff1610156114cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a40161067f565b6114ee81602001516fffffffffffffffffffffffffffffffff1661202f565b6115a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a40161067f565b60355460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff9091166004820152600091610100900473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa15801561162c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116509190614dab565b825181519192501461170a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a40161067f565b61172981602001516fffffffffffffffffffffffffffffffff1661202f565b6117db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a40161067f565b60008381526033602052604090205460ff161561187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a65640000000000000000000000606482015260840161067f565b600083815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908601516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558501516080860151606087015160a088015161191c939291906120d4565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061198190841515815260200190565b60405180910390a2801580156119975750326001145b15611a24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a207769746864726177616c206661696c6560448201527f6400000000000000000000000000000000000000000000000000000000000000606482015260840161067f565b5050505050565b6000611a38826010614f42565b61105f90615208614f72565b600054600390610100900460ff16158015611a66575060005460ff8083169116105b611af2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161067f565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100908117909155603280547fffffffffffffffffffffffff000000000000000000000000000000000000000090811661dead17909155603580546036805473ffffffffffffffffffffffffffffffffffffffff89811691861691909117909155603780548a83169516949094179093558515159289169093027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00167fffffffffffffffffffffff00000000000000000000000000000000000000000090931692909217179055611bed612132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b600154600090611c88907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643614f9e565b90506000611c94612215565b90506000816020015160ff16826000015163ffffffff16611cb59190614fe4565b90508215611dec57600154600090611cec908390700100000000000000000000000000000000900467ffffffffffffffff1661504c565b90506000836040015160ff1683611d0391906150c0565b600154611d239084906fffffffffffffffffffffffffffffffff166150c0565b611d2d9190614fe4565b600154909150600090611d7e90611d579084906fffffffffffffffffffffffffffffffff1661517c565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166122db565b90506001861115611dad57611daa611d5782876040015160ff1660018a611da59190614f9e565b6122fa565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090611e1f908490700100000000000000000000000000000000900467ffffffffffffffff16614f72565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315611f02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d69740000606482015260840161067f565b600154600090611f2e906fffffffffffffffffffffffffffffffff1667ffffffffffffffff88166151f0565b90506000611f4048633b9aca0061234f565b611f4a908361522d565b905060005a611f599088614f9e565b905080821115611f7557611f75611f708284614f9e565b612366565b5050505050505050565b60008160000151826020015183604001518460600151604051602001611fbe949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611fbe979096959101615241565b60008061201786612394565b9050612025818686866123c6565b9695505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f4daa2916040518163ffffffff1660e01b8152600401602060405180830381865afa15801561209e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c29190614efa565b6120cc9083615298565b421192915050565b60008060006120e48660006123f6565b90508061211a576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600054610100900460ff166121c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161067f565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260365483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa1580156122b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d691906152d5565b905090565b60006122f06122ea8585612414565b83612424565b90505b9392505050565b6000670de0b6b3a764000061233b6123128583614fe4565b61232490670de0b6b3a764000061504c565b61233685670de0b6b3a76400006150c0565b612433565b61234590866150c0565b6122f09190614fe4565b60008183101561235f57816122f3565b5090919050565b6000805a90505b825a6123799083614f9e565b101561238f5761238882615374565b915061236d565b505050565b606081805190602001206040516020016123b091815260200190565b6040516020818303038152906040529050919050565b60006123ed846123d7878686612464565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b60008183121561235f57816122f3565b600081831261235f57816122f3565b60006122f3670de0b6b3a76400008361244b86612ee2565b61245591906150c0565b61245f9190614fe4565b613126565b606060008451116124d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b65790000000000000000000000604482015260640161067f565b60006124dc84613365565b905060006124e986613451565b905060008460405160200161250091815260200190565b60405160208183030381529060405290506000805b8451811015612e59576000858281518110612532576125326153ac565b6020026020010151905084518311156125cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e677468000000000000000000000000000000000000606482015260840161067f565b82600003612686578051805160209182012060405161261b926125f592910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f742068617368000000604482015260640161067f565b6127dd565b80515160201161273c57805180516020918201206040516126b0926125f592910190815260200190565b612681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c206861736800000000000000000000000000000000000000000000000000606482015260840161067f565b8051845160208087019190912082519190920120146127dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f6520686173680000000000000000000000000000000000000000000000000000606482015260840161067f565b6127e960106001615298565b816020015151036129c5578451830361295d576128238160200151601081518110612816576128166153ac565b60200260200101516134b4565b965060008751116128b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e6368290000000000606482015260840161067f565b600186516128c49190614f9e565b8214612952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e636829000000000000606482015260840161067f565b5050505050506122f3565b6000858481518110612971576129716153ac565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061299c5761299c6153ac565b602002602001015190506129af81613614565b95506129bc600186615298565b94505050612e46565b600281602001515103612dbe5760006129dd82613639565b90506000816000815181106129f4576129f46153ac565b016020015160f81c90506000612a0b6002836153db565b612a169060026153fd565b90506000612a27848360ff1661365d565b90506000612a358a8961365d565b90506000612a438383613693565b905080835114612ad5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b6579000000000000606482015260840161067f565b60ff851660021480612aea575060ff85166003145b15612cd95780825114612b7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e646572000000606482015260840161067f565b612b998760200151600181518110612816576128166153ac565b9c5060008d5111612c2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c6561662900000000000000606482015260840161067f565b60018c51612c3a9190614f9e565b8814612cc8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c656166290000000000000000606482015260840161067f565b5050505050505050505050506122f3565b60ff85161580612cec575060ff85166001145b15612d2b57612d188760200151600181518110612d0b57612d0b6153ac565b6020026020010151613614565b9950612d24818a615298565b9850612db3565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e207072656669780000000000000000000000000000606482015260840161067f565b505050505050612e46565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f6465000000000000000000000000000000000000000000000000606482015260840161067f565b5080612e5181615374565b915050612515565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e7473000000000000000000000000000000000000000000000000000000606482015260840161067f565b6000808213612f4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e45440000000000000000000000000000000000000000000000604482015260640161067f565b60006060612f5a84613747565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361315757506000919050565b680755bf798b4a1bf1e582126131c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f570000000000000000000000000000000000000000604482015260640161067f565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b80516060908067ffffffffffffffff8111156133835761338361486a565b6040519080825280602002602001820160405280156133c857816020015b60408051808201909152606080825260208201528152602001906001900390816133a15790505b50915060005b8181101561344a5760405180604001604052808583815181106133f3576133f36153ac565b60200260200101518152602001613422868481518110613415576134156153ac565b602002602001015161381d565b815250838281518110613437576134376153ac565b60209081029190910101526001016133ce565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b838110156134a9578060011b82018184015160001a8060041c8253600f81166001830153505060010161347b565b509295945050505050565b606060008060006134c485613830565b9194509250905060008160018111156134df576134df615420565b1461356c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d00000000000000606482015260840161067f565b6135768284615298565b855114613605576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e646572000000000000000000000000606482015260840161067f565b6123ed8560200151848461429d565b606060208260000151106136305761362b826134b4565b61105f565b61105f82614331565b606061105f6136588360200151600081518110612816576128166153ac565b613451565b60608251821061367c575060408051602081019091526000815261105f565b6122f3838384865161368e9190614f9e565b614347565b60008082518451106136a65782516136a9565b83515b90505b808210801561373057508282815181106136c8576136c86153ac565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848381518110613707576137076153ac565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15613740578160010191506136ac565b5092915050565b60008082116137b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e45440000000000000000000000000000000000000000000000604482015260640161067f565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606061105f61382b8361451f565b614608565b6000806000808460000151116138ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a40161067f565b6020840151805160001a607f8111613913576000600160009450945094505050614296565b60b78111613b21576000613928608083614f9e565b9050808760000151116139e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a40161067f565b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082141580613a5c57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b613b0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a40161067f565b5060019550935060009250614296915050565b60bf8111613e6f576000613b3660b783614f9e565b905080876000015111613bf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a40161067f565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613ccf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a40161067f565b600184015160088302610100031c60378111613d93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a40161067f565b613d9d8184615298565b895111613e52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a40161067f565b613e5d836001615298565b97509550600094506142969350505050565b60f78111613f50576000613e8460c083614f9e565b905080876000015111613f3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a40161067f565b600195509350849250614296915050565b6000613f5d60f783614f9e565b905080876000015111614018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a40161067f565b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036140f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a40161067f565b600184015160088302610100031c603781116141ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a40161067f565b6141c48184615298565b895111614279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a40161067f565b614284836001615298565b97509550600194506142969350505050565b9193909250565b60608167ffffffffffffffff8111156142b8576142b861486a565b6040519080825280601f01601f1916602001820160405280156142e2576020820181803683370190505b50905081156122f35760006142f78486615298565b90506020820160005b84811015614318578281015182820152602001614300565b84811115614327576000858301525b5050509392505050565b606061105f82602001516000846000015161429d565b60608182601f0110156143b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015260640161067f565b828284011015614422576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015260640161067f565b8183018451101561448f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015260640161067f565b6060821580156144ae5760405191506000825260208201604052614516565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156144e75780518352602092830192016144cf565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015260008251116145ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a40161067f565b50604080518082019091528151815260209182019181019190915290565b6060600080600061461885613830565b91945092509050600181600181111561463357614633615420565b146146c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d0000000000000000606482015260840161067f565b84516146cc8385615298565b14614759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e6465720000000000000000000000000000606482015260840161067f565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816147705790505093506000835b865181101561485e576000806147e36040518060400160405280858c600001516147c79190614f9e565b8152602001858c602001516147dc9190615298565b9052613830565b5091509150604051806040016040528083836147ff9190615298565b8152602001848b602001516148149190615298565b815250888581518110614829576148296153ac565b602090810291909101015261483f600185615298565b935061484b8183615298565b6148559084615298565b9250505061479d565b50845250919392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156148e0576148e061486a565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461490a57600080fd5b50565b600082601f83011261491e57600080fd5b813567ffffffffffffffff8111156149385761493861486a565b61496960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614899565b81815284602083860101111561497e57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156149ad57600080fd5b60405160c0810167ffffffffffffffff82821081831117156149d1576149d161486a565b8160405282935084358352602085013591506149ec826148e8565b81602084015260408501359150614a02826148e8565b816040840152606085013560608401526080850135608084015260a0850135915080821115614a3057600080fd5b50614a3d8582860161490d565b60a0830152505092915050565b600080600080600085870360e0811215614a6357600080fd5b863567ffffffffffffffff80821115614a7b57600080fd5b614a878a838b0161499b565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc084011215614ac057600080fd5b60408901955060c0890135925080831115614ada57600080fd5b828901925089601f840112614aee57600080fd5b8235915080821115614aff57600080fd5b508860208260051b8401011115614b1557600080fd5b959894975092955050506020019190565b60005b83811015614b41578181015183820152602001614b29565b83811115614b50576000848401525b50505050565b60008151808452614b6e816020860160208601614b26565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122f36020830184614b56565b600060208284031215614bc557600080fd5b5035919050565b600060208284031215614bde57600080fd5b813567ffffffffffffffff811115614bf557600080fd5b614c018482850161499b565b949350505050565b803567ffffffffffffffff81168114614c2157600080fd5b919050565b600060208284031215614c3857600080fd5b6122f382614c09565b80358015158114614c2157600080fd5b600080600080600060a08688031215614c6957600080fd5b8535614c74816148e8565b945060208601359350614c8960408701614c09565b9250614c9760608701614c41565b9150608086013567ffffffffffffffff811115614cb357600080fd5b614cbf8882890161490d565b9150509295509295909350565b60008060008060808587031215614ce257600080fd5b8435614ced816148e8565b93506020850135614cfd816148e8565b92506040850135614d0d816148e8565b9150614d1b60608601614c41565b905092959194509250565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251614d7a816049850160208701614b26565b919091016049019695505050505050565b80516fffffffffffffffffffffffffffffffff81168114614c2157600080fd5b600060608284031215614dbd57600080fd5b6040516060810181811067ffffffffffffffff82111715614de057614de061486a565b60405282518152614df360208401614d8b565b6020820152614e0460408401614d8b565b60408201529392505050565b600060808284031215614e2257600080fd5b6040516080810181811067ffffffffffffffff82111715614e4557614e4561486a565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115614e9157614e9161486a565b8360051b6020614ea2818301614899565b868152918501918181019036841115614eba57600080fd5b865b84811015614eee57803586811115614ed45760008081fd5b614ee036828b0161490d565b845250918301918301614ebc565b50979650505050505050565b600060208284031215614f0c57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615614f6957614f69614f13565b02949350505050565b600067ffffffffffffffff808316818516808303821115614f9557614f95614f13565b01949350505050565b600082821015614fb057614fb0614f13565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614ff357614ff3614fb5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561504757615047614f13565b500590565b6000808312837f80000000000000000000000000000000000000000000000000000000000000000183128115161561508657615086614f13565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156150ba576150ba614f13565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561510157615101614f13565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561513c5761513c614f13565b6000871292508782058712848416161561515857615158614f13565b8785058712818416161561516e5761516e614f13565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038413811516156151b6576151b6614f13565b827f80000000000000000000000000000000000000000000000000000000000000000384128116156151ea576151ea614f13565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561522857615228614f13565b500290565b60008261523c5761523c614fb5565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261528c60c0830184614b56565b98975050505050505050565b600082198211156152ab576152ab614f13565b500190565b805163ffffffff81168114614c2157600080fd5b805160ff81168114614c2157600080fd5b600060c082840312156152e757600080fd5b60405160c0810181811067ffffffffffffffff8211171561530a5761530a61486a565b604052615316836152b0565b8152615324602084016152c4565b6020820152615335604084016152c4565b6040820152615346606084016152b0565b6060820152615357608084016152b0565b608082015261536860a08401614d8b565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036153a5576153a5614f13565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff8316806153ee576153ee614fb5565b8060ff84160691505092915050565b600060ff821660ff84168082101561541757615417614f13565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(OptimismPortalStorageLayoutJSON), OptimismPortalStorageLayout); err != nil { + panic(err) + } + + layouts["OptimismPortal"] = OptimismPortalStorageLayout + deployedBytecodes["OptimismPortal"] = OptimismPortalDeployedBin +} diff --git a/op-bindings/bindings/preimageoracle.go b/op-bindings/bindings/preimageoracle.go new file mode 100644 index 000000000..fd34e81b3 --- /dev/null +++ b/op-bindings/bindings/preimageoracle.go @@ -0,0 +1,382 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// PreimageOracleMetaData contains all meta data concerning the PreimageOracle contract. +var PreimageOracleMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"name\":\"PartOffsetOOB\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_partOffset\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_preimage\",\"type\":\"bytes\"}],\"name\":\"loadKeccak256PreimagePart\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ident\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_word\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_size\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_partOffset\",\"type\":\"uint256\"}],\"name\":\"loadLocalData\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"key_\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"preimageLengths\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"preimagePartOk\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"preimageParts\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_offset\",\"type\":\"uint256\"}],\"name\":\"readPreimage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"dat_\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"datLen_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b50610625806100206000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c8063e03110e111610050578063e03110e114610106578063e15926111461012e578063fef2b4ed1461014357600080fd5b806361238bde146100775780638542cf50146100b55780639a1f5e7f146100f3575b600080fd5b6100a26100853660046104d1565b600160209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6100e36100c33660046104d1565b600260209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016100ac565b6100a26101013660046104f3565b610163565b6101196101143660046104d1565b610236565b604080519283526020830191909152016100ac565b61014161013c366004610525565b610327565b005b6100a26101513660046105a1565b60006020819052908152604090205481565b600061016e85610430565b905061017b8360086105e9565b8211806101885750602083115b156101bf576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845287528083209483529386528382205581815293849052922055919050565b6000828152600260209081526040808320848452909152812054819060ff166102bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b50600083815260208181526040909120546102db8160086105e9565b6102e68560206105e9565b1061030457836102f78260086105e9565b6103019190610601565b91505b506000938452600160209081526040808620948652939052919092205492909150565b604435600080600883018611156103465763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216176104cb81600090815233602052604090207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b92915050565b600080604083850312156104e457600080fd5b50508035926020909101359150565b6000806000806080858703121561050957600080fd5b5050823594602084013594506040840135936060013592509050565b60008060006040848603121561053a57600080fd5b83359250602084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057c57600080fd5b87602082850101111561058e57600080fd5b6020830194508093505050509250925092565b6000602082840312156105b357600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156105fc576105fc6105ba565b500190565b600082821015610613576106136105ba565b50039056fea164736f6c634300080f000a", +} + +// PreimageOracleABI is the input ABI used to generate the binding from. +// Deprecated: Use PreimageOracleMetaData.ABI instead. +var PreimageOracleABI = PreimageOracleMetaData.ABI + +// PreimageOracleBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use PreimageOracleMetaData.Bin instead. +var PreimageOracleBin = PreimageOracleMetaData.Bin + +// DeployPreimageOracle deploys a new Ethereum contract, binding an instance of PreimageOracle to it. +func DeployPreimageOracle(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *PreimageOracle, error) { + parsed, err := PreimageOracleMetaData.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(PreimageOracleBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &PreimageOracle{PreimageOracleCaller: PreimageOracleCaller{contract: contract}, PreimageOracleTransactor: PreimageOracleTransactor{contract: contract}, PreimageOracleFilterer: PreimageOracleFilterer{contract: contract}}, nil +} + +// PreimageOracle is an auto generated Go binding around an Ethereum contract. +type PreimageOracle struct { + PreimageOracleCaller // Read-only binding to the contract + PreimageOracleTransactor // Write-only binding to the contract + PreimageOracleFilterer // Log filterer for contract events +} + +// PreimageOracleCaller is an auto generated read-only Go binding around an Ethereum contract. +type PreimageOracleCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PreimageOracleTransactor is an auto generated write-only Go binding around an Ethereum contract. +type PreimageOracleTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PreimageOracleFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type PreimageOracleFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PreimageOracleSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type PreimageOracleSession struct { + Contract *PreimageOracle // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// PreimageOracleCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type PreimageOracleCallerSession struct { + Contract *PreimageOracleCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// PreimageOracleTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type PreimageOracleTransactorSession struct { + Contract *PreimageOracleTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// PreimageOracleRaw is an auto generated low-level Go binding around an Ethereum contract. +type PreimageOracleRaw struct { + Contract *PreimageOracle // Generic contract binding to access the raw methods on +} + +// PreimageOracleCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type PreimageOracleCallerRaw struct { + Contract *PreimageOracleCaller // Generic read-only contract binding to access the raw methods on +} + +// PreimageOracleTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type PreimageOracleTransactorRaw struct { + Contract *PreimageOracleTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewPreimageOracle creates a new instance of PreimageOracle, bound to a specific deployed contract. +func NewPreimageOracle(address common.Address, backend bind.ContractBackend) (*PreimageOracle, error) { + contract, err := bindPreimageOracle(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &PreimageOracle{PreimageOracleCaller: PreimageOracleCaller{contract: contract}, PreimageOracleTransactor: PreimageOracleTransactor{contract: contract}, PreimageOracleFilterer: PreimageOracleFilterer{contract: contract}}, nil +} + +// NewPreimageOracleCaller creates a new read-only instance of PreimageOracle, bound to a specific deployed contract. +func NewPreimageOracleCaller(address common.Address, caller bind.ContractCaller) (*PreimageOracleCaller, error) { + contract, err := bindPreimageOracle(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &PreimageOracleCaller{contract: contract}, nil +} + +// NewPreimageOracleTransactor creates a new write-only instance of PreimageOracle, bound to a specific deployed contract. +func NewPreimageOracleTransactor(address common.Address, transactor bind.ContractTransactor) (*PreimageOracleTransactor, error) { + contract, err := bindPreimageOracle(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &PreimageOracleTransactor{contract: contract}, nil +} + +// NewPreimageOracleFilterer creates a new log filterer instance of PreimageOracle, bound to a specific deployed contract. +func NewPreimageOracleFilterer(address common.Address, filterer bind.ContractFilterer) (*PreimageOracleFilterer, error) { + contract, err := bindPreimageOracle(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &PreimageOracleFilterer{contract: contract}, nil +} + +// bindPreimageOracle binds a generic wrapper to an already deployed contract. +func bindPreimageOracle(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(PreimageOracleABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_PreimageOracle *PreimageOracleRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _PreimageOracle.Contract.PreimageOracleCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_PreimageOracle *PreimageOracleRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PreimageOracle.Contract.PreimageOracleTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_PreimageOracle *PreimageOracleRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _PreimageOracle.Contract.PreimageOracleTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_PreimageOracle *PreimageOracleCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _PreimageOracle.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_PreimageOracle *PreimageOracleTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PreimageOracle.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_PreimageOracle *PreimageOracleTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _PreimageOracle.Contract.contract.Transact(opts, method, params...) +} + +// PreimageLengths is a free data retrieval call binding the contract method 0xfef2b4ed. +// +// Solidity: function preimageLengths(bytes32 ) view returns(uint256) +func (_PreimageOracle *PreimageOracleCaller) PreimageLengths(opts *bind.CallOpts, arg0 [32]byte) (*big.Int, error) { + var out []interface{} + err := _PreimageOracle.contract.Call(opts, &out, "preimageLengths", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// PreimageLengths is a free data retrieval call binding the contract method 0xfef2b4ed. +// +// Solidity: function preimageLengths(bytes32 ) view returns(uint256) +func (_PreimageOracle *PreimageOracleSession) PreimageLengths(arg0 [32]byte) (*big.Int, error) { + return _PreimageOracle.Contract.PreimageLengths(&_PreimageOracle.CallOpts, arg0) +} + +// PreimageLengths is a free data retrieval call binding the contract method 0xfef2b4ed. +// +// Solidity: function preimageLengths(bytes32 ) view returns(uint256) +func (_PreimageOracle *PreimageOracleCallerSession) PreimageLengths(arg0 [32]byte) (*big.Int, error) { + return _PreimageOracle.Contract.PreimageLengths(&_PreimageOracle.CallOpts, arg0) +} + +// PreimagePartOk is a free data retrieval call binding the contract method 0x8542cf50. +// +// Solidity: function preimagePartOk(bytes32 , uint256 ) view returns(bool) +func (_PreimageOracle *PreimageOracleCaller) PreimagePartOk(opts *bind.CallOpts, arg0 [32]byte, arg1 *big.Int) (bool, error) { + var out []interface{} + err := _PreimageOracle.contract.Call(opts, &out, "preimagePartOk", arg0, arg1) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// PreimagePartOk is a free data retrieval call binding the contract method 0x8542cf50. +// +// Solidity: function preimagePartOk(bytes32 , uint256 ) view returns(bool) +func (_PreimageOracle *PreimageOracleSession) PreimagePartOk(arg0 [32]byte, arg1 *big.Int) (bool, error) { + return _PreimageOracle.Contract.PreimagePartOk(&_PreimageOracle.CallOpts, arg0, arg1) +} + +// PreimagePartOk is a free data retrieval call binding the contract method 0x8542cf50. +// +// Solidity: function preimagePartOk(bytes32 , uint256 ) view returns(bool) +func (_PreimageOracle *PreimageOracleCallerSession) PreimagePartOk(arg0 [32]byte, arg1 *big.Int) (bool, error) { + return _PreimageOracle.Contract.PreimagePartOk(&_PreimageOracle.CallOpts, arg0, arg1) +} + +// PreimageParts is a free data retrieval call binding the contract method 0x61238bde. +// +// Solidity: function preimageParts(bytes32 , uint256 ) view returns(bytes32) +func (_PreimageOracle *PreimageOracleCaller) PreimageParts(opts *bind.CallOpts, arg0 [32]byte, arg1 *big.Int) ([32]byte, error) { + var out []interface{} + err := _PreimageOracle.contract.Call(opts, &out, "preimageParts", arg0, arg1) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PreimageParts is a free data retrieval call binding the contract method 0x61238bde. +// +// Solidity: function preimageParts(bytes32 , uint256 ) view returns(bytes32) +func (_PreimageOracle *PreimageOracleSession) PreimageParts(arg0 [32]byte, arg1 *big.Int) ([32]byte, error) { + return _PreimageOracle.Contract.PreimageParts(&_PreimageOracle.CallOpts, arg0, arg1) +} + +// PreimageParts is a free data retrieval call binding the contract method 0x61238bde. +// +// Solidity: function preimageParts(bytes32 , uint256 ) view returns(bytes32) +func (_PreimageOracle *PreimageOracleCallerSession) PreimageParts(arg0 [32]byte, arg1 *big.Int) ([32]byte, error) { + return _PreimageOracle.Contract.PreimageParts(&_PreimageOracle.CallOpts, arg0, arg1) +} + +// ReadPreimage is a free data retrieval call binding the contract method 0xe03110e1. +// +// Solidity: function readPreimage(bytes32 _key, uint256 _offset) view returns(bytes32 dat_, uint256 datLen_) +func (_PreimageOracle *PreimageOracleCaller) ReadPreimage(opts *bind.CallOpts, _key [32]byte, _offset *big.Int) (struct { + Dat [32]byte + DatLen *big.Int +}, error) { + var out []interface{} + err := _PreimageOracle.contract.Call(opts, &out, "readPreimage", _key, _offset) + + outstruct := new(struct { + Dat [32]byte + DatLen *big.Int + }) + if err != nil { + return *outstruct, err + } + + outstruct.Dat = *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + outstruct.DatLen = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +// ReadPreimage is a free data retrieval call binding the contract method 0xe03110e1. +// +// Solidity: function readPreimage(bytes32 _key, uint256 _offset) view returns(bytes32 dat_, uint256 datLen_) +func (_PreimageOracle *PreimageOracleSession) ReadPreimage(_key [32]byte, _offset *big.Int) (struct { + Dat [32]byte + DatLen *big.Int +}, error) { + return _PreimageOracle.Contract.ReadPreimage(&_PreimageOracle.CallOpts, _key, _offset) +} + +// ReadPreimage is a free data retrieval call binding the contract method 0xe03110e1. +// +// Solidity: function readPreimage(bytes32 _key, uint256 _offset) view returns(bytes32 dat_, uint256 datLen_) +func (_PreimageOracle *PreimageOracleCallerSession) ReadPreimage(_key [32]byte, _offset *big.Int) (struct { + Dat [32]byte + DatLen *big.Int +}, error) { + return _PreimageOracle.Contract.ReadPreimage(&_PreimageOracle.CallOpts, _key, _offset) +} + +// LoadKeccak256PreimagePart is a paid mutator transaction binding the contract method 0xe1592611. +// +// Solidity: function loadKeccak256PreimagePart(uint256 _partOffset, bytes _preimage) returns() +func (_PreimageOracle *PreimageOracleTransactor) LoadKeccak256PreimagePart(opts *bind.TransactOpts, _partOffset *big.Int, _preimage []byte) (*types.Transaction, error) { + return _PreimageOracle.contract.Transact(opts, "loadKeccak256PreimagePart", _partOffset, _preimage) +} + +// LoadKeccak256PreimagePart is a paid mutator transaction binding the contract method 0xe1592611. +// +// Solidity: function loadKeccak256PreimagePart(uint256 _partOffset, bytes _preimage) returns() +func (_PreimageOracle *PreimageOracleSession) LoadKeccak256PreimagePart(_partOffset *big.Int, _preimage []byte) (*types.Transaction, error) { + return _PreimageOracle.Contract.LoadKeccak256PreimagePart(&_PreimageOracle.TransactOpts, _partOffset, _preimage) +} + +// LoadKeccak256PreimagePart is a paid mutator transaction binding the contract method 0xe1592611. +// +// Solidity: function loadKeccak256PreimagePart(uint256 _partOffset, bytes _preimage) returns() +func (_PreimageOracle *PreimageOracleTransactorSession) LoadKeccak256PreimagePart(_partOffset *big.Int, _preimage []byte) (*types.Transaction, error) { + return _PreimageOracle.Contract.LoadKeccak256PreimagePart(&_PreimageOracle.TransactOpts, _partOffset, _preimage) +} + +// LoadLocalData is a paid mutator transaction binding the contract method 0x9a1f5e7f. +// +// Solidity: function loadLocalData(uint256 _ident, bytes32 _word, uint256 _size, uint256 _partOffset) returns(bytes32 key_) +func (_PreimageOracle *PreimageOracleTransactor) LoadLocalData(opts *bind.TransactOpts, _ident *big.Int, _word [32]byte, _size *big.Int, _partOffset *big.Int) (*types.Transaction, error) { + return _PreimageOracle.contract.Transact(opts, "loadLocalData", _ident, _word, _size, _partOffset) +} + +// LoadLocalData is a paid mutator transaction binding the contract method 0x9a1f5e7f. +// +// Solidity: function loadLocalData(uint256 _ident, bytes32 _word, uint256 _size, uint256 _partOffset) returns(bytes32 key_) +func (_PreimageOracle *PreimageOracleSession) LoadLocalData(_ident *big.Int, _word [32]byte, _size *big.Int, _partOffset *big.Int) (*types.Transaction, error) { + return _PreimageOracle.Contract.LoadLocalData(&_PreimageOracle.TransactOpts, _ident, _word, _size, _partOffset) +} + +// LoadLocalData is a paid mutator transaction binding the contract method 0x9a1f5e7f. +// +// Solidity: function loadLocalData(uint256 _ident, bytes32 _word, uint256 _size, uint256 _partOffset) returns(bytes32 key_) +func (_PreimageOracle *PreimageOracleTransactorSession) LoadLocalData(_ident *big.Int, _word [32]byte, _size *big.Int, _partOffset *big.Int) (*types.Transaction, error) { + return _PreimageOracle.Contract.LoadLocalData(&_PreimageOracle.TransactOpts, _ident, _word, _size, _partOffset) +} diff --git a/op-bindings/bindings/preimageoracle_more.go b/op-bindings/bindings/preimageoracle_more.go new file mode 100644 index 000000000..7c6f701dd --- /dev/null +++ b/op-bindings/bindings/preimageoracle_more.go @@ -0,0 +1,27 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const PreimageOracleStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"preimageLengths\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_mapping(t_bytes32,t_uint256)\"},{\"astId\":1001,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"preimageParts\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_mapping(t_bytes32,t_mapping(t_uint256,t_bytes32))\"},{\"astId\":1002,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"preimagePartOk\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_mapping(t_bytes32,t_mapping(t_uint256,t_bool))\"}],\"types\":{\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_bytes32,t_mapping(t_uint256,t_bool))\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e mapping(uint256 =\u003e bool))\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_mapping(t_uint256,t_bool)\"},\"t_mapping(t_bytes32,t_mapping(t_uint256,t_bytes32))\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e mapping(uint256 =\u003e bytes32))\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_mapping(t_uint256,t_bytes32)\"},\"t_mapping(t_bytes32,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_uint256\"},\"t_mapping(t_uint256,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_bool\"},\"t_mapping(t_uint256,t_bytes32)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e bytes32)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_bytes32\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"}}}" + +var PreimageOracleStorageLayout = new(solc.StorageLayout) + +var PreimageOracleDeployedBin = "0x608060405234801561001057600080fd5b50600436106100725760003560e01c8063e03110e111610050578063e03110e114610106578063e15926111461012e578063fef2b4ed1461014357600080fd5b806361238bde146100775780638542cf50146100b55780639a1f5e7f146100f3575b600080fd5b6100a26100853660046104d1565b600160209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6100e36100c33660046104d1565b600260209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016100ac565b6100a26101013660046104f3565b610163565b6101196101143660046104d1565b610236565b604080519283526020830191909152016100ac565b61014161013c366004610525565b610327565b005b6100a26101513660046105a1565b60006020819052908152604090205481565b600061016e85610430565b905061017b8360086105e9565b8211806101885750602083115b156101bf576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845287528083209483529386528382205581815293849052922055919050565b6000828152600260209081526040808320848452909152812054819060ff166102bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b50600083815260208181526040909120546102db8160086105e9565b6102e68560206105e9565b1061030457836102f78260086105e9565b6103019190610601565b91505b506000938452600160209081526040808620948652939052919092205492909150565b604435600080600883018611156103465763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216176104cb81600090815233602052604090207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b92915050565b600080604083850312156104e457600080fd5b50508035926020909101359150565b6000806000806080858703121561050957600080fd5b5050823594602084013594506040840135936060013592509050565b60008060006040848603121561053a57600080fd5b83359250602084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057c57600080fd5b87602082850101111561058e57600080fd5b6020830194508093505050509250925092565b6000602082840312156105b357600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156105fc576105fc6105ba565b500190565b600082821015610613576106136105ba565b50039056fea164736f6c634300080f000a" + +var PreimageOracleDeployedSourceMap = "306:3865:130:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;537:68;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;413:25:284;;;401:2;386:18;537:68:130;;;;;;;;680:66;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;614:14:284;;607:22;589:41;;577:2;562:18;680:66:130;449:187:284;1367:1165:130;;;;;;:::i;:::-;;:::i;789:536::-;;;;;;:::i;:::-;;:::i;:::-;;;;1205:25:284;;;1261:2;1246:18;;1239:34;;;;1178:18;789:536:130;1031:248:284;2574:1595:130;;;;;;:::i;:::-;;:::i;:::-;;419:50;;;;;;:::i;:::-;;;;;;;;;;;;;;;1367:1165;1529:12;1634:36;1663:6;1634:28;:36::i;:::-;1627:43;-1:-1:-1;1764:9:130;:5;1772:1;1764:9;:::i;:::-;1750:11;:23;:37;;;;1785:2;1777:5;:10;1750:37;1746:90;;;1810:15;;;;;;;;;;;;;;1746:90;1905:12;2005:4;1998:18;;;2106:3;2102:15;;;2089:29;;2138:4;2131:19;;;;2240:18;;2330:20;;;:14;:20;;;;;;:33;;;;;;;;:40;;;;2366:4;2330:40;;;;;;2380:19;;;;;;;;:32;;;;;;;;;:39;2496:21;;;;;;;;;:29;2345:4;1367:1165;-1:-1:-1;1367:1165:130:o;789:536::-;865:12;914:20;;;:14;:20;;;;;;;;:29;;;;;;;;;865:12;;914:29;;906:62;;;;;;;2839:2:284;906:62:130;;;2821:21:284;2878:2;2858:18;;;2851:30;2917:22;2897:18;;;2890:50;2957:18;;906:62:130;;;;;;;;-1:-1:-1;1099:14:130;1116:21;;;1087:2;1116:21;;;;;;;;1167:10;1116:21;1176:1;1167:10;:::i;:::-;1151:12;:7;1161:2;1151:12;:::i;:::-;:26;1147:87;;1216:7;1203:10;:6;1212:1;1203:10;:::i;:::-;:20;;;;:::i;:::-;1193:30;;1147:87;-1:-1:-1;1290:19:130;;;;:13;:19;;;;;;;;:28;;;;;;;;;;;;789:536;;-1:-1:-1;789:536:130:o;2574:1595::-;2870:4;2857:18;2675:12;;2999:1;2989:12;;2973:29;;2970:210;;;3074:10;3071:1;3064:21;3164:1;3158:4;3151:15;2970:210;3423:3;3419:14;;;3323:4;3407:27;3454:11;3428:4;3573:16;3454:11;3555:41;3786:29;;;3790:11;3786:29;3780:36;3838:20;;;;3985:19;3978:27;4007:11;3975:44;4038:19;;;;4016:1;4038:19;;;;;;;;:32;;;;;;;;:39;;;;4073:4;4038:39;;;;;;4087:18;;;;;;;;:31;;;;;;;;;:38;;;;4135:20;;;;;;;;;;;:27;;;;-1:-1:-1;;;;2574:1595:130:o;492:353:129:-;752:11;777:19;765:32;;749:49;824:14;749:49;1277:21;1426:15;;;1467:8;1461:4;1454:22;1595:4;1582:18;;1602:19;1578:44;1624:11;1575:61;;1222:430;824:14;817:21;492:353;-1:-1:-1;;492:353:129:o;14:248:284:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:284;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:284:o;641:385::-;727:6;735;743;751;804:3;792:9;783:7;779:23;775:33;772:53;;;821:1;818;811:12;772:53;-1:-1:-1;;844:23:284;;;914:2;899:18;;886:32;;-1:-1:-1;965:2:284;950:18;;937:32;;1016:2;1001:18;988:32;;-1:-1:-1;641:385:284;-1:-1:-1;641:385:284:o;1284:659::-;1363:6;1371;1379;1432:2;1420:9;1411:7;1407:23;1403:32;1400:52;;;1448:1;1445;1438:12;1400:52;1484:9;1471:23;1461:33;;1545:2;1534:9;1530:18;1517:32;1568:18;1609:2;1601:6;1598:14;1595:34;;;1625:1;1622;1615:12;1595:34;1663:6;1652:9;1648:22;1638:32;;1708:7;1701:4;1697:2;1693:13;1689:27;1679:55;;1730:1;1727;1720:12;1679:55;1770:2;1757:16;1796:2;1788:6;1785:14;1782:34;;;1812:1;1809;1802:12;1782:34;1857:7;1852:2;1843:6;1839:2;1835:15;1831:24;1828:37;1825:57;;;1878:1;1875;1868:12;1825:57;1909:2;1905;1901:11;1891:21;;1931:6;1921:16;;;;;1284:659;;;;;:::o;1948:180::-;2007:6;2060:2;2048:9;2039:7;2035:23;2031:32;2028:52;;;2076:1;2073;2066:12;2028:52;-1:-1:-1;2099:23:284;;1948:180;-1:-1:-1;1948:180:284:o;2315:184::-;2367:77;2364:1;2357:88;2464:4;2461:1;2454:15;2488:4;2485:1;2478:15;2504:128;2544:3;2575:1;2571:6;2568:1;2565:13;2562:39;;;2581:18;;:::i;:::-;-1:-1:-1;2617:9:284;;2504:128::o;2986:125::-;3026:4;3054:1;3051;3048:8;3045:34;;;3059:18;;:::i;:::-;-1:-1:-1;3096:9:284;;2986:125::o" + +func init() { + if err := json.Unmarshal([]byte(PreimageOracleStorageLayoutJSON), PreimageOracleStorageLayout); err != nil { + panic(err) + } + + layouts["PreimageOracle"] = PreimageOracleStorageLayout + deployedBytecodes["PreimageOracle"] = PreimageOracleDeployedBin +} diff --git a/op-bindings/bindings/protocolversions.go b/op-bindings/bindings/protocolversions.go new file mode 100644 index 000000000..9535ea8cb --- /dev/null +++ b/op-bindings/bindings/protocolversions.go @@ -0,0 +1,965 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// ProtocolVersionsMetaData contains all meta data concerning the ProtocolVersions contract. +var ProtocolVersionsMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"enumProtocolVersions.UpdateType\",\"name\":\"updateType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ConfigUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"RECOMMENDED_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REQUIRED_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VERSION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"ProtocolVersion\",\"name\":\"_required\",\"type\":\"uint256\"},{\"internalType\":\"ProtocolVersion\",\"name\":\"_recommended\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"recommended\",\"outputs\":[{\"internalType\":\"ProtocolVersion\",\"name\":\"out_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"required\",\"outputs\":[{\"internalType\":\"ProtocolVersion\",\"name\":\"out_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ProtocolVersion\",\"name\":\"_recommended\",\"type\":\"uint256\"}],\"name\":\"setRecommended\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ProtocolVersion\",\"name\":\"_required\",\"type\":\"uint256\"}],\"name\":\"setRequired\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60806040523480156200001157600080fd5b506200002261dead60008062000028565b620004c9565b600054600390610100900460ff161580156200004b575060005460ff8083169116105b620000b45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805461ffff191660ff831617610100179055620000d26200013a565b620000dd84620001a2565b620000e88362000221565b620000f382620002d1565b6000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b600054610100900460ff16620001965760405162461bcd60e51b815260206004820152602b602482015260008051602062000e9683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000ab565b620001a062000332565b565b620001ac62000399565b6001600160a01b038116620002135760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000ab565b6200021e81620003f5565b50565b620002676200025260017f4aaefe95bd84fd3f32700cf3b7566bc944b73138e41958b5785826df2aecace16200044b565b60001b826200044760201b620004f51760201c565b6000816040516020016200027d91815260200190565b60408051601f19818403018152919052905060005b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051620002c5919062000471565b60405180910390a35050565b620003026200025260017fe314dfc40f0025322aacc0ba8ef420b62fb3b702cf01e0cdf3d829117ac2ff1b6200044b565b6000816040516020016200031891815260200190565b60408051601f198184030181529190529050600162000292565b600054610100900460ff166200038e5760405162461bcd60e51b815260206004820152602b602482015260008051602062000e9683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000ab565b620001a033620003f5565b6033546001600160a01b03163314620001a05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000ab565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b9055565b6000828210156200046c57634e487b7160e01b600052601160045260246000fd5b500390565b600060208083528351808285015260005b81811015620004a05785810183015185820160400152820162000482565b81811115620004b3576000604083870101525b50601f01601f1916929092016040019392505050565b6109bd80620004d96000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80638da5cb5b11610081578063f2fde38b1161005b578063f2fde38b146101b8578063f7d12760146101cb578063ffa1ad74146101d357600080fd5b80638da5cb5b14610180578063d798b1ac146101a8578063dc8452cd146101b057600080fd5b80635fd579af116100b25780635fd579af14610152578063715018a6146101655780637a1ac61e1461016d57600080fd5b80630457d6f2146100d9578063206a8300146100ee57806354fd4d5014610109575b600080fd5b6100ec6100e736600461085d565b6101db565b005b6100f66101ef565b6040519081526020015b60405180910390f35b6101456040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161010091906108e1565b6100ec61016036600461085d565b61021d565b6100ec61022e565b6100ec61017b366004610924565b610242565b60335460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610100565b6100f66103ad565b6100f66103e6565b6100ec6101c6366004610957565b610416565b6100f66104ca565b6100f6600081565b6101e36104f9565b6101ec8161057a565b50565b61021a60017f4aaefe95bd84fd3f32700cf3b7566bc944b73138e41958b5785826df2aecace1610972565b81565b6102256104f9565b6101ec81610632565b6102366104f9565b61024060006106ac565b565b600054600390610100900460ff16158015610264575060005460ff8083169116105b6102f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff83161761010017905561032e610723565b61033784610416565b6103408361057a565b61034982610632565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b60006103e16103dd60017fe314dfc40f0025322aacc0ba8ef420b62fb3b702cf01e0cdf3d829117ac2ff1b610972565b5490565b905090565b60006103e16103dd60017f4aaefe95bd84fd3f32700cf3b7566bc944b73138e41958b5785826df2aecace1610972565b61041e6104f9565b73ffffffffffffffffffffffffffffffffffffffff81166104c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102ec565b6101ec816106ac565b61021a60017fe314dfc40f0025322aacc0ba8ef420b62fb3b702cf01e0cdf3d829117ac2ff1b610972565b9055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102ec565b6105ad6105a860017f4aaefe95bd84fd3f32700cf3b7566bc944b73138e41958b5785826df2aecace1610972565b829055565b6000816040516020016105c291815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060005b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161062691906108e1565b60405180910390a35050565b6106606105a860017fe314dfc40f0025322aacc0ba8ef420b62fb3b702cf01e0cdf3d829117ac2ff1b610972565b60008160405160200161067591815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060016105f5565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166107ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016102ec565b610240600054610100900460ff16610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016102ec565b610240336106ac565b60006020828403121561086f57600080fd5b5035919050565b6000815180845260005b8181101561089c57602081850181015186830182015201610880565b818111156108ae576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006108f46020830184610876565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091f57600080fd5b919050565b60008060006060848603121561093957600080fd5b610942846108fb565b95602085013595506040909401359392505050565b60006020828403121561096957600080fd5b6108f4826108fb565b6000828210156109ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50039056fea164736f6c634300080f000a496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", +} + +// ProtocolVersionsABI is the input ABI used to generate the binding from. +// Deprecated: Use ProtocolVersionsMetaData.ABI instead. +var ProtocolVersionsABI = ProtocolVersionsMetaData.ABI + +// ProtocolVersionsBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ProtocolVersionsMetaData.Bin instead. +var ProtocolVersionsBin = ProtocolVersionsMetaData.Bin + +// DeployProtocolVersions deploys a new Ethereum contract, binding an instance of ProtocolVersions to it. +func DeployProtocolVersions(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ProtocolVersions, error) { + parsed, err := ProtocolVersionsMetaData.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(ProtocolVersionsBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ProtocolVersions{ProtocolVersionsCaller: ProtocolVersionsCaller{contract: contract}, ProtocolVersionsTransactor: ProtocolVersionsTransactor{contract: contract}, ProtocolVersionsFilterer: ProtocolVersionsFilterer{contract: contract}}, nil +} + +// ProtocolVersions is an auto generated Go binding around an Ethereum contract. +type ProtocolVersions struct { + ProtocolVersionsCaller // Read-only binding to the contract + ProtocolVersionsTransactor // Write-only binding to the contract + ProtocolVersionsFilterer // Log filterer for contract events +} + +// ProtocolVersionsCaller is an auto generated read-only Go binding around an Ethereum contract. +type ProtocolVersionsCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ProtocolVersionsTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ProtocolVersionsTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ProtocolVersionsFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ProtocolVersionsFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ProtocolVersionsSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ProtocolVersionsSession struct { + Contract *ProtocolVersions // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ProtocolVersionsCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ProtocolVersionsCallerSession struct { + Contract *ProtocolVersionsCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ProtocolVersionsTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ProtocolVersionsTransactorSession struct { + Contract *ProtocolVersionsTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ProtocolVersionsRaw is an auto generated low-level Go binding around an Ethereum contract. +type ProtocolVersionsRaw struct { + Contract *ProtocolVersions // Generic contract binding to access the raw methods on +} + +// ProtocolVersionsCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ProtocolVersionsCallerRaw struct { + Contract *ProtocolVersionsCaller // Generic read-only contract binding to access the raw methods on +} + +// ProtocolVersionsTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ProtocolVersionsTransactorRaw struct { + Contract *ProtocolVersionsTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewProtocolVersions creates a new instance of ProtocolVersions, bound to a specific deployed contract. +func NewProtocolVersions(address common.Address, backend bind.ContractBackend) (*ProtocolVersions, error) { + contract, err := bindProtocolVersions(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ProtocolVersions{ProtocolVersionsCaller: ProtocolVersionsCaller{contract: contract}, ProtocolVersionsTransactor: ProtocolVersionsTransactor{contract: contract}, ProtocolVersionsFilterer: ProtocolVersionsFilterer{contract: contract}}, nil +} + +// NewProtocolVersionsCaller creates a new read-only instance of ProtocolVersions, bound to a specific deployed contract. +func NewProtocolVersionsCaller(address common.Address, caller bind.ContractCaller) (*ProtocolVersionsCaller, error) { + contract, err := bindProtocolVersions(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ProtocolVersionsCaller{contract: contract}, nil +} + +// NewProtocolVersionsTransactor creates a new write-only instance of ProtocolVersions, bound to a specific deployed contract. +func NewProtocolVersionsTransactor(address common.Address, transactor bind.ContractTransactor) (*ProtocolVersionsTransactor, error) { + contract, err := bindProtocolVersions(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ProtocolVersionsTransactor{contract: contract}, nil +} + +// NewProtocolVersionsFilterer creates a new log filterer instance of ProtocolVersions, bound to a specific deployed contract. +func NewProtocolVersionsFilterer(address common.Address, filterer bind.ContractFilterer) (*ProtocolVersionsFilterer, error) { + contract, err := bindProtocolVersions(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ProtocolVersionsFilterer{contract: contract}, nil +} + +// bindProtocolVersions binds a generic wrapper to an already deployed contract. +func bindProtocolVersions(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(ProtocolVersionsABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ProtocolVersions *ProtocolVersionsRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ProtocolVersions.Contract.ProtocolVersionsCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ProtocolVersions *ProtocolVersionsRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ProtocolVersions.Contract.ProtocolVersionsTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ProtocolVersions *ProtocolVersionsRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ProtocolVersions.Contract.ProtocolVersionsTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ProtocolVersions *ProtocolVersionsCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ProtocolVersions.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ProtocolVersions *ProtocolVersionsTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ProtocolVersions.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ProtocolVersions *ProtocolVersionsTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ProtocolVersions.Contract.contract.Transact(opts, method, params...) +} + +// RECOMMENDEDSLOT is a free data retrieval call binding the contract method 0xf7d12760. +// +// Solidity: function RECOMMENDED_SLOT() view returns(bytes32) +func (_ProtocolVersions *ProtocolVersionsCaller) RECOMMENDEDSLOT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ProtocolVersions.contract.Call(opts, &out, "RECOMMENDED_SLOT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// RECOMMENDEDSLOT is a free data retrieval call binding the contract method 0xf7d12760. +// +// Solidity: function RECOMMENDED_SLOT() view returns(bytes32) +func (_ProtocolVersions *ProtocolVersionsSession) RECOMMENDEDSLOT() ([32]byte, error) { + return _ProtocolVersions.Contract.RECOMMENDEDSLOT(&_ProtocolVersions.CallOpts) +} + +// RECOMMENDEDSLOT is a free data retrieval call binding the contract method 0xf7d12760. +// +// Solidity: function RECOMMENDED_SLOT() view returns(bytes32) +func (_ProtocolVersions *ProtocolVersionsCallerSession) RECOMMENDEDSLOT() ([32]byte, error) { + return _ProtocolVersions.Contract.RECOMMENDEDSLOT(&_ProtocolVersions.CallOpts) +} + +// REQUIREDSLOT is a free data retrieval call binding the contract method 0x206a8300. +// +// Solidity: function REQUIRED_SLOT() view returns(bytes32) +func (_ProtocolVersions *ProtocolVersionsCaller) REQUIREDSLOT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ProtocolVersions.contract.Call(opts, &out, "REQUIRED_SLOT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// REQUIREDSLOT is a free data retrieval call binding the contract method 0x206a8300. +// +// Solidity: function REQUIRED_SLOT() view returns(bytes32) +func (_ProtocolVersions *ProtocolVersionsSession) REQUIREDSLOT() ([32]byte, error) { + return _ProtocolVersions.Contract.REQUIREDSLOT(&_ProtocolVersions.CallOpts) +} + +// REQUIREDSLOT is a free data retrieval call binding the contract method 0x206a8300. +// +// Solidity: function REQUIRED_SLOT() view returns(bytes32) +func (_ProtocolVersions *ProtocolVersionsCallerSession) REQUIREDSLOT() ([32]byte, error) { + return _ProtocolVersions.Contract.REQUIREDSLOT(&_ProtocolVersions.CallOpts) +} + +// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. +// +// Solidity: function VERSION() view returns(uint256) +func (_ProtocolVersions *ProtocolVersionsCaller) VERSION(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ProtocolVersions.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 + +} + +// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. +// +// Solidity: function VERSION() view returns(uint256) +func (_ProtocolVersions *ProtocolVersionsSession) VERSION() (*big.Int, error) { + return _ProtocolVersions.Contract.VERSION(&_ProtocolVersions.CallOpts) +} + +// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. +// +// Solidity: function VERSION() view returns(uint256) +func (_ProtocolVersions *ProtocolVersionsCallerSession) VERSION() (*big.Int, error) { + return _ProtocolVersions.Contract.VERSION(&_ProtocolVersions.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ProtocolVersions *ProtocolVersionsCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ProtocolVersions.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 + +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ProtocolVersions *ProtocolVersionsSession) Owner() (common.Address, error) { + return _ProtocolVersions.Contract.Owner(&_ProtocolVersions.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ProtocolVersions *ProtocolVersionsCallerSession) Owner() (common.Address, error) { + return _ProtocolVersions.Contract.Owner(&_ProtocolVersions.CallOpts) +} + +// Recommended is a free data retrieval call binding the contract method 0xd798b1ac. +// +// Solidity: function recommended() view returns(uint256 out_) +func (_ProtocolVersions *ProtocolVersionsCaller) Recommended(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ProtocolVersions.contract.Call(opts, &out, "recommended") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Recommended is a free data retrieval call binding the contract method 0xd798b1ac. +// +// Solidity: function recommended() view returns(uint256 out_) +func (_ProtocolVersions *ProtocolVersionsSession) Recommended() (*big.Int, error) { + return _ProtocolVersions.Contract.Recommended(&_ProtocolVersions.CallOpts) +} + +// Recommended is a free data retrieval call binding the contract method 0xd798b1ac. +// +// Solidity: function recommended() view returns(uint256 out_) +func (_ProtocolVersions *ProtocolVersionsCallerSession) Recommended() (*big.Int, error) { + return _ProtocolVersions.Contract.Recommended(&_ProtocolVersions.CallOpts) +} + +// Required is a free data retrieval call binding the contract method 0xdc8452cd. +// +// Solidity: function required() view returns(uint256 out_) +func (_ProtocolVersions *ProtocolVersionsCaller) Required(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ProtocolVersions.contract.Call(opts, &out, "required") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Required is a free data retrieval call binding the contract method 0xdc8452cd. +// +// Solidity: function required() view returns(uint256 out_) +func (_ProtocolVersions *ProtocolVersionsSession) Required() (*big.Int, error) { + return _ProtocolVersions.Contract.Required(&_ProtocolVersions.CallOpts) +} + +// Required is a free data retrieval call binding the contract method 0xdc8452cd. +// +// Solidity: function required() view returns(uint256 out_) +func (_ProtocolVersions *ProtocolVersionsCallerSession) Required() (*big.Int, error) { + return _ProtocolVersions.Contract.Required(&_ProtocolVersions.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_ProtocolVersions *ProtocolVersionsCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ProtocolVersions.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_ProtocolVersions *ProtocolVersionsSession) Version() (string, error) { + return _ProtocolVersions.Contract.Version(&_ProtocolVersions.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_ProtocolVersions *ProtocolVersionsCallerSession) Version() (string, error) { + return _ProtocolVersions.Contract.Version(&_ProtocolVersions.CallOpts) +} + +// Initialize is a paid mutator transaction binding the contract method 0x7a1ac61e. +// +// Solidity: function initialize(address _owner, uint256 _required, uint256 _recommended) returns() +func (_ProtocolVersions *ProtocolVersionsTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address, _required *big.Int, _recommended *big.Int) (*types.Transaction, error) { + return _ProtocolVersions.contract.Transact(opts, "initialize", _owner, _required, _recommended) +} + +// Initialize is a paid mutator transaction binding the contract method 0x7a1ac61e. +// +// Solidity: function initialize(address _owner, uint256 _required, uint256 _recommended) returns() +func (_ProtocolVersions *ProtocolVersionsSession) Initialize(_owner common.Address, _required *big.Int, _recommended *big.Int) (*types.Transaction, error) { + return _ProtocolVersions.Contract.Initialize(&_ProtocolVersions.TransactOpts, _owner, _required, _recommended) +} + +// Initialize is a paid mutator transaction binding the contract method 0x7a1ac61e. +// +// Solidity: function initialize(address _owner, uint256 _required, uint256 _recommended) returns() +func (_ProtocolVersions *ProtocolVersionsTransactorSession) Initialize(_owner common.Address, _required *big.Int, _recommended *big.Int) (*types.Transaction, error) { + return _ProtocolVersions.Contract.Initialize(&_ProtocolVersions.TransactOpts, _owner, _required, _recommended) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ProtocolVersions *ProtocolVersionsTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ProtocolVersions.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ProtocolVersions *ProtocolVersionsSession) RenounceOwnership() (*types.Transaction, error) { + return _ProtocolVersions.Contract.RenounceOwnership(&_ProtocolVersions.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ProtocolVersions *ProtocolVersionsTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _ProtocolVersions.Contract.RenounceOwnership(&_ProtocolVersions.TransactOpts) +} + +// SetRecommended is a paid mutator transaction binding the contract method 0x5fd579af. +// +// Solidity: function setRecommended(uint256 _recommended) returns() +func (_ProtocolVersions *ProtocolVersionsTransactor) SetRecommended(opts *bind.TransactOpts, _recommended *big.Int) (*types.Transaction, error) { + return _ProtocolVersions.contract.Transact(opts, "setRecommended", _recommended) +} + +// SetRecommended is a paid mutator transaction binding the contract method 0x5fd579af. +// +// Solidity: function setRecommended(uint256 _recommended) returns() +func (_ProtocolVersions *ProtocolVersionsSession) SetRecommended(_recommended *big.Int) (*types.Transaction, error) { + return _ProtocolVersions.Contract.SetRecommended(&_ProtocolVersions.TransactOpts, _recommended) +} + +// SetRecommended is a paid mutator transaction binding the contract method 0x5fd579af. +// +// Solidity: function setRecommended(uint256 _recommended) returns() +func (_ProtocolVersions *ProtocolVersionsTransactorSession) SetRecommended(_recommended *big.Int) (*types.Transaction, error) { + return _ProtocolVersions.Contract.SetRecommended(&_ProtocolVersions.TransactOpts, _recommended) +} + +// SetRequired is a paid mutator transaction binding the contract method 0x0457d6f2. +// +// Solidity: function setRequired(uint256 _required) returns() +func (_ProtocolVersions *ProtocolVersionsTransactor) SetRequired(opts *bind.TransactOpts, _required *big.Int) (*types.Transaction, error) { + return _ProtocolVersions.contract.Transact(opts, "setRequired", _required) +} + +// SetRequired is a paid mutator transaction binding the contract method 0x0457d6f2. +// +// Solidity: function setRequired(uint256 _required) returns() +func (_ProtocolVersions *ProtocolVersionsSession) SetRequired(_required *big.Int) (*types.Transaction, error) { + return _ProtocolVersions.Contract.SetRequired(&_ProtocolVersions.TransactOpts, _required) +} + +// SetRequired is a paid mutator transaction binding the contract method 0x0457d6f2. +// +// Solidity: function setRequired(uint256 _required) returns() +func (_ProtocolVersions *ProtocolVersionsTransactorSession) SetRequired(_required *big.Int) (*types.Transaction, error) { + return _ProtocolVersions.Contract.SetRequired(&_ProtocolVersions.TransactOpts, _required) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ProtocolVersions *ProtocolVersionsTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _ProtocolVersions.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ProtocolVersions *ProtocolVersionsSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _ProtocolVersions.Contract.TransferOwnership(&_ProtocolVersions.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ProtocolVersions *ProtocolVersionsTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _ProtocolVersions.Contract.TransferOwnership(&_ProtocolVersions.TransactOpts, newOwner) +} + +// ProtocolVersionsConfigUpdateIterator is returned from FilterConfigUpdate and is used to iterate over the raw logs and unpacked data for ConfigUpdate events raised by the ProtocolVersions contract. +type ProtocolVersionsConfigUpdateIterator struct { + Event *ProtocolVersionsConfigUpdate // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ProtocolVersionsConfigUpdateIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ProtocolVersionsConfigUpdate) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ProtocolVersionsConfigUpdate) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ProtocolVersionsConfigUpdateIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ProtocolVersionsConfigUpdateIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ProtocolVersionsConfigUpdate represents a ConfigUpdate event raised by the ProtocolVersions contract. +type ProtocolVersionsConfigUpdate struct { + Version *big.Int + UpdateType uint8 + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterConfigUpdate is a free log retrieval operation binding the contract event 0x1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be. +// +// Solidity: event ConfigUpdate(uint256 indexed version, uint8 indexed updateType, bytes data) +func (_ProtocolVersions *ProtocolVersionsFilterer) FilterConfigUpdate(opts *bind.FilterOpts, version []*big.Int, updateType []uint8) (*ProtocolVersionsConfigUpdateIterator, error) { + + var versionRule []interface{} + for _, versionItem := range version { + versionRule = append(versionRule, versionItem) + } + var updateTypeRule []interface{} + for _, updateTypeItem := range updateType { + updateTypeRule = append(updateTypeRule, updateTypeItem) + } + + logs, sub, err := _ProtocolVersions.contract.FilterLogs(opts, "ConfigUpdate", versionRule, updateTypeRule) + if err != nil { + return nil, err + } + return &ProtocolVersionsConfigUpdateIterator{contract: _ProtocolVersions.contract, event: "ConfigUpdate", logs: logs, sub: sub}, nil +} + +// WatchConfigUpdate is a free log subscription operation binding the contract event 0x1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be. +// +// Solidity: event ConfigUpdate(uint256 indexed version, uint8 indexed updateType, bytes data) +func (_ProtocolVersions *ProtocolVersionsFilterer) WatchConfigUpdate(opts *bind.WatchOpts, sink chan<- *ProtocolVersionsConfigUpdate, version []*big.Int, updateType []uint8) (event.Subscription, error) { + + var versionRule []interface{} + for _, versionItem := range version { + versionRule = append(versionRule, versionItem) + } + var updateTypeRule []interface{} + for _, updateTypeItem := range updateType { + updateTypeRule = append(updateTypeRule, updateTypeItem) + } + + logs, sub, err := _ProtocolVersions.contract.WatchLogs(opts, "ConfigUpdate", versionRule, updateTypeRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ProtocolVersionsConfigUpdate) + if err := _ProtocolVersions.contract.UnpackLog(event, "ConfigUpdate", 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 +} + +// ParseConfigUpdate is a log parse operation binding the contract event 0x1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be. +// +// Solidity: event ConfigUpdate(uint256 indexed version, uint8 indexed updateType, bytes data) +func (_ProtocolVersions *ProtocolVersionsFilterer) ParseConfigUpdate(log types.Log) (*ProtocolVersionsConfigUpdate, error) { + event := new(ProtocolVersionsConfigUpdate) + if err := _ProtocolVersions.contract.UnpackLog(event, "ConfigUpdate", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ProtocolVersionsInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ProtocolVersions contract. +type ProtocolVersionsInitializedIterator struct { + Event *ProtocolVersionsInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ProtocolVersionsInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ProtocolVersionsInitialized) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ProtocolVersionsInitialized) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ProtocolVersionsInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ProtocolVersionsInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ProtocolVersionsInitialized represents a Initialized event raised by the ProtocolVersions contract. +type ProtocolVersionsInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ProtocolVersions *ProtocolVersionsFilterer) FilterInitialized(opts *bind.FilterOpts) (*ProtocolVersionsInitializedIterator, error) { + + logs, sub, err := _ProtocolVersions.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &ProtocolVersionsInitializedIterator{contract: _ProtocolVersions.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ProtocolVersions *ProtocolVersionsFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ProtocolVersionsInitialized) (event.Subscription, error) { + + logs, sub, err := _ProtocolVersions.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: + // New log arrived, parse the event and forward to the user + event := new(ProtocolVersionsInitialized) + if err := _ProtocolVersions.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 +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ProtocolVersions *ProtocolVersionsFilterer) ParseInitialized(log types.Log) (*ProtocolVersionsInitialized, error) { + event := new(ProtocolVersionsInitialized) + if err := _ProtocolVersions.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ProtocolVersionsOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the ProtocolVersions contract. +type ProtocolVersionsOwnershipTransferredIterator struct { + Event *ProtocolVersionsOwnershipTransferred // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ProtocolVersionsOwnershipTransferredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ProtocolVersionsOwnershipTransferred) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ProtocolVersionsOwnershipTransferred) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ProtocolVersionsOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ProtocolVersionsOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ProtocolVersionsOwnershipTransferred represents a OwnershipTransferred event raised by the ProtocolVersions contract. +type ProtocolVersionsOwnershipTransferred struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ProtocolVersions *ProtocolVersionsFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*ProtocolVersionsOwnershipTransferredIterator, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _ProtocolVersions.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &ProtocolVersionsOwnershipTransferredIterator{contract: _ProtocolVersions.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ProtocolVersions *ProtocolVersionsFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ProtocolVersionsOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _ProtocolVersions.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ProtocolVersionsOwnershipTransferred) + if err := _ProtocolVersions.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 +} + +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ProtocolVersions *ProtocolVersionsFilterer) ParseOwnershipTransferred(log types.Log) (*ProtocolVersionsOwnershipTransferred, error) { + event := new(ProtocolVersionsOwnershipTransferred) + if err := _ProtocolVersions.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-bindings/bindings/protocolversions_more.go b/op-bindings/bindings/protocolversions_more.go new file mode 100644 index 000000000..d1e40edc5 --- /dev/null +++ b/op-bindings/bindings/protocolversions_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const ProtocolVersionsStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/L1/ProtocolVersions.sol:ProtocolVersions\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"src/L1/ProtocolVersions.sol:ProtocolVersions\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"src/L1/ProtocolVersions.sol:ProtocolVersions\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)50_storage\"},{\"astId\":1003,\"contract\":\"src/L1/ProtocolVersions.sol:ProtocolVersions\",\"label\":\"_owner\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_address\"},{\"astId\":1004,\"contract\":\"src/L1/ProtocolVersions.sol:ProtocolVersions\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_array(t_uint256)49_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)49_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\",\"base\":\"t_uint256\"},\"t_array(t_uint256)50_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\",\"base\":\"t_uint256\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" + +var ProtocolVersionsStorageLayout = new(solc.StorageLayout) + +var ProtocolVersionsDeployedBin = "0x608060405234801561001057600080fd5b50600436106100d45760003560e01c80638da5cb5b11610081578063f2fde38b1161005b578063f2fde38b146101b8578063f7d12760146101cb578063ffa1ad74146101d357600080fd5b80638da5cb5b14610180578063d798b1ac146101a8578063dc8452cd146101b057600080fd5b80635fd579af116100b25780635fd579af14610152578063715018a6146101655780637a1ac61e1461016d57600080fd5b80630457d6f2146100d9578063206a8300146100ee57806354fd4d5014610109575b600080fd5b6100ec6100e736600461085d565b6101db565b005b6100f66101ef565b6040519081526020015b60405180910390f35b6101456040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161010091906108e1565b6100ec61016036600461085d565b61021d565b6100ec61022e565b6100ec61017b366004610924565b610242565b60335460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610100565b6100f66103ad565b6100f66103e6565b6100ec6101c6366004610957565b610416565b6100f66104ca565b6100f6600081565b6101e36104f9565b6101ec8161057a565b50565b61021a60017f4aaefe95bd84fd3f32700cf3b7566bc944b73138e41958b5785826df2aecace1610972565b81565b6102256104f9565b6101ec81610632565b6102366104f9565b61024060006106ac565b565b600054600390610100900460ff16158015610264575060005460ff8083169116105b6102f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff83161761010017905561032e610723565b61033784610416565b6103408361057a565b61034982610632565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b60006103e16103dd60017fe314dfc40f0025322aacc0ba8ef420b62fb3b702cf01e0cdf3d829117ac2ff1b610972565b5490565b905090565b60006103e16103dd60017f4aaefe95bd84fd3f32700cf3b7566bc944b73138e41958b5785826df2aecace1610972565b61041e6104f9565b73ffffffffffffffffffffffffffffffffffffffff81166104c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102ec565b6101ec816106ac565b61021a60017fe314dfc40f0025322aacc0ba8ef420b62fb3b702cf01e0cdf3d829117ac2ff1b610972565b9055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102ec565b6105ad6105a860017f4aaefe95bd84fd3f32700cf3b7566bc944b73138e41958b5785826df2aecace1610972565b829055565b6000816040516020016105c291815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060005b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161062691906108e1565b60405180910390a35050565b6106606105a860017fe314dfc40f0025322aacc0ba8ef420b62fb3b702cf01e0cdf3d829117ac2ff1b610972565b60008160405160200161067591815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060016105f5565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166107ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016102ec565b610240600054610100900460ff16610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016102ec565b610240336106ac565b60006020828403121561086f57600080fd5b5035919050565b6000815180845260005b8181101561089c57602081850181015186830182015201610880565b818111156108ae576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006108f46020830184610876565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091f57600080fd5b919050565b60008060006060848603121561093957600080fd5b610942846108fb565b95602085013595506040909401359392505050565b60006020828403121561096957600080fd5b6108f4826108fb565b6000828210156109ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50039056fea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(ProtocolVersionsStorageLayoutJSON), ProtocolVersionsStorageLayout); err != nil { + panic(err) + } + + layouts["ProtocolVersions"] = ProtocolVersionsStorageLayout + deployedBytecodes["ProtocolVersions"] = ProtocolVersionsDeployedBin +} diff --git a/op-bindings/bindings/proxy.go b/op-bindings/bindings/proxy.go index 2dc21b70d..346a4a33c 100644 --- a/op-bindings/bindings/proxy.go +++ b/op-bindings/bindings/proxy.go @@ -26,13 +26,12 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription - _ = abi.ConvertType ) // ProxyMetaData contains all meta data concerning the Proxy contract. var ProxyMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x608060405234801561001057600080fd5b5060405161091838038061091883398101604081905261002f916100b2565b6100388161003e565b506100e2565b60006100566000805160206108f88339815191525490565b6000805160206108f8833981519152839055604080516001600160a01b038084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b6000602082840312156100c457600080fd5b81516001600160a01b03811681146100db57600080fd5b9392505050565b610807806100f16000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106d9565b610224565b6100a86100a33660046106f4565b610296565b6040516100b59190610777565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106d9565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ea565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060b565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006106357fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038390556040805173ffffffffffffffffffffffffffffffffffffffff8084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d457600080fd5b919050565b6000602082840312156106eb57600080fd5b610412826106b0565b60008060006040848603121561070957600080fd5b610712846106b0565b9250602084013567ffffffffffffffff8082111561072f57600080fd5b818601915086601f83011261074357600080fd5b81358181111561075257600080fd5b87602082850101111561076457600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a457858101830151858201604001528201610788565b818111156107b6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", + Bin: "0x608060405234801561001057600080fd5b5060405161091f38038061091f83398101604081905261002f916100b5565b6100388161003e565b506100e5565b60006100566000805160206108ff8339815191525490565b6000805160206108ff833981519152838155604080516001600160a01b0380851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b6000602082840312156100c757600080fd5b81516001600160a01b03811681146100de57600080fd5b9392505050565b61080b806100f46000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", } // ProxyABI is the input ABI used to generate the binding from. @@ -157,11 +156,11 @@ func NewProxyFilterer(address common.Address, filterer bind.ContractFilterer) (* // bindProxy binds a generic wrapper to an already deployed contract. func bindProxy(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := ProxyMetaData.GetAbi() + parsed, err := abi.JSON(strings.NewReader(ProxyABI)) if err != nil { return nil, err } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and diff --git a/op-bindings/bindings/proxy_more.go b/op-bindings/bindings/proxy_more.go index bd1df18dc..914f84348 100644 --- a/op-bindings/bindings/proxy_more.go +++ b/op-bindings/bindings/proxy_more.go @@ -13,7 +13,7 @@ const ProxyStorageLayoutJSON = "{\"storage\":null,\"types\":{}}" var ProxyStorageLayout = new(solc.StorageLayout) -var ProxyDeployedBin = "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106d9565b610224565b6100a86100a33660046106f4565b610296565b6040516100b59190610777565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106d9565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ea565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060b565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006106357fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038390556040805173ffffffffffffffffffffffffffffffffffffffff8084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d457600080fd5b919050565b6000602082840312156106eb57600080fd5b610412826106b0565b60008060006040848603121561070957600080fd5b610712846106b0565b9250602084013567ffffffffffffffff8082111561072f57600080fd5b818601915086601f83011261074357600080fd5b81358181111561075257600080fd5b87602082850101111561076457600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a457858101830151858201604001528201610788565b818111156107b6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a" +var ProxyDeployedBin = "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a" func init() { if err := json.Unmarshal([]byte(ProxyStorageLayoutJSON), ProxyStorageLayout); err != nil { diff --git a/op-bindings/bindings/proxyadmin.go b/op-bindings/bindings/proxyadmin.go index 30516ac55..100a6490b 100644 --- a/op-bindings/bindings/proxyadmin.go +++ b/op-bindings/bindings/proxyadmin.go @@ -26,13 +26,12 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription - _ = abi.ConvertType ) // ProxyAdminMetaData contains all meta data concerning the ProxyAdmin contract. var ProxyAdminMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b506040516109d43803806109d483398101604081905261002f91610097565b61003833610047565b61004181610047565b506100c7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a957600080fd5b81516001600160a01b03811681146100c057600080fd5b9392505050565b6108fe806100d66000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046105fd565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610215565b005b3480156100ec57600080fd5b506100de6100fb366004610621565b610229565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de61013936600461071e565b6102b7565b34801561014a57600080fd5b506100de610159366004610621565b610380565b34801561016a57600080fd5b506100de6101793660046105fd565b6103dc565b34801561018a57600080fd5b506100a06101993660046105fd565b610498565b60008173ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020f91906107c3565b92915050565b61021d6104e5565b6102276000610566565b565b6102316104e5565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b15801561029b57600080fd5b505af11580156102af573d6000803e3d6000fd5b505050505050565b6102bf6104e5565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef286903490610315908690869060040161080c565b60006040518083038185885af1158015610333573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261037a919081019061087a565b50505050565b6103886104e5565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe690602401610281565b6103e46104e5565b73ffffffffffffffffffffffffffffffffffffffff811661048c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61049581610566565b50565b60008173ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101eb573d6000803e3d6000fd5b60005473ffffffffffffffffffffffffffffffffffffffff163314610227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610483565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff8116811461049557600080fd5b60006020828403121561060f57600080fd5b813561061a816105db565b9392505050565b6000806040838503121561063457600080fd5b823561063f816105db565b9150602083013561064f816105db565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156106d0576106d061065a565b604052919050565b600067ffffffffffffffff8211156106f2576106f261065a565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60008060006060848603121561073357600080fd5b833561073e816105db565b9250602084013561074e816105db565b9150604084013567ffffffffffffffff81111561076a57600080fd5b8401601f8101861361077b57600080fd5b803561078e610789826106d8565b610689565b8181528760208385010111156107a357600080fd5b816020840160208301376000602083830101528093505050509250925092565b6000602082840312156107d557600080fd5b815161061a816105db565b60005b838110156107fb5781810151838201526020016107e3565b8381111561037a5750506000910152565b73ffffffffffffffffffffffffffffffffffffffff8316815260406020820152600082518060408401526108478160608501602087016107e0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016060019392505050565b60006020828403121561088c57600080fd5b815167ffffffffffffffff8111156108a357600080fd5b8201601f810184136108b457600080fd5b80516108c2610789826106d8565b8181528560208385010111156108d757600080fd5b6108e88260208301602086016107e0565b9594505050505056fea164736f6c634300080f000a", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"addressManager\",\"outputs\":[{\"internalType\":\"contractAddressManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"implementationName\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUpgrading\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"proxyType\",\"outputs\":[{\"internalType\":\"enumProxyAdmin.ProxyType\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractAddressManager\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAddressManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"setImplementationName\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"internalType\":\"enumProxyAdmin.ProxyType\",\"name\":\"_type\",\"type\":\"uint8\"}],\"name\":\"setProxyType\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_upgrading\",\"type\":\"bool\"}],\"name\":\"setUpgrading\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", + Bin: "0x60806040523480156200001157600080fd5b5060405162001a5f38038062001a5f8339810160408190526200003491620000a1565b6200003f3362000051565b6200004a8162000051565b50620000d3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215620000b457600080fd5b81516001600160a01b0381168114620000cc57600080fd5b9392505050565b61197c80620000e36000396000f3fe60806040526004361061010e5760003560e01c8063860f7cda116100a557806399a88ec411610074578063b794726211610059578063b794726214610329578063f2fde38b14610364578063f3b7dead1461038457600080fd5b806399a88ec4146102e95780639b2ea4bd1461030957600080fd5b8063860f7cda1461026b5780638d52d4a01461028b5780638da5cb5b146102ab5780639623609d146102d657600080fd5b80633ab76e9f116100e15780633ab76e9f146101cc5780636bd9f516146101f9578063715018a6146102365780637eff275e1461024b57600080fd5b80630652b57a1461011357806307c8f7b014610135578063204e1c7a14610155578063238181ae1461019f575b600080fd5b34801561011f57600080fd5b5061013361012e3660046111f9565b6103a4565b005b34801561014157600080fd5b50610133610150366004611216565b6103f3565b34801561016157600080fd5b506101756101703660046111f9565b610445565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101ab57600080fd5b506101bf6101ba3660046111f9565b61066b565b60405161019691906112ae565b3480156101d857600080fd5b506003546101759073ffffffffffffffffffffffffffffffffffffffff1681565b34801561020557600080fd5b506102296102143660046111f9565b60016020526000908152604090205460ff1681565b60405161019691906112f0565b34801561024257600080fd5b50610133610705565b34801561025757600080fd5b50610133610266366004611331565b610719565b34801561027757600080fd5b5061013361028636600461148c565b6108cc565b34801561029757600080fd5b506101336102a63660046114dc565b610903565b3480156102b757600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610175565b6101336102e436600461150e565b610977565b3480156102f557600080fd5b50610133610304366004611331565b610b8e565b34801561031557600080fd5b50610133610324366004611584565b610e1e565b34801561033557600080fd5b5060035474010000000000000000000000000000000000000000900460ff166040519015158152602001610196565b34801561037057600080fd5b5061013361037f3660046111f9565b610eb4565b34801561039057600080fd5b5061017561039f3660046111f9565b610f6b565b6103ac6110e1565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6103fb6110e1565b6003805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604081205460ff1681816002811115610481576104816112c1565b036104fc578273ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f591906115cb565b9392505050565b6001816002811115610510576105106112c1565b03610560578273ffffffffffffffffffffffffffffffffffffffff1663aaf10f426040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d1573d6000803e3d6000fd5b6002816002811115610574576105746112c1565b036105fe5760035473ffffffffffffffffffffffffffffffffffffffff8481166000908152600260205260409081902090517fbf40fac1000000000000000000000000000000000000000000000000000000008152919092169163bf40fac1916105e19190600401611635565b602060405180830381865afa1580156104d1573d6000803e3d6000fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f50726f787941646d696e3a20756e6b6e6f776e2070726f78792074797065000060448201526064015b60405180910390fd5b50919050565b60026020526000908152604090208054610684906115e8565b80601f01602080910402602001604051908101604052809291908181526020018280546106b0906115e8565b80156106fd5780601f106106d2576101008083540402835291602001916106fd565b820191906000526020600020905b8154815290600101906020018083116106e057829003601f168201915b505050505081565b61070d6110e1565b6107176000611162565b565b6107216110e1565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604081205460ff169081600281111561075d5761075d6112c1565b036107e9576040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690638f283970906024015b600060405180830381600087803b1580156107cc57600080fd5b505af11580156107e0573d6000803e3d6000fd5b50505050505050565b60018160028111156107fd576107fd6112c1565b03610856576040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528416906313af4035906024016107b2565b600281600281111561086a5761086a6112c1565b036105fe576003546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529091169063f2fde38b906024016107b2565b505050565b6108d46110e1565b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604090206108c78282611724565b61090b6110e1565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160208190526040909120805483927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009091169083600281111561096e5761096e6112c1565b02179055505050565b61097f6110e1565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604081205460ff16908160028111156109bb576109bb6112c1565b03610a81576040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690634f1ef286903490610a16908790879060040161183e565b60006040518083038185885af1158015610a34573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a7b9190810190611875565b50610b88565b610a8b8484610b8e565b60008473ffffffffffffffffffffffffffffffffffffffff163484604051610ab391906118ec565b60006040518083038185875af1925050503d8060008114610af0576040519150601f19603f3d011682016040523d82523d6000602084013e610af5565b606091505b5050905080610b86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f50726f787941646d696e3a2063616c6c20746f2070726f78792061667465722060448201527f75706772616465206661696c6564000000000000000000000000000000000000606482015260840161065c565b505b50505050565b610b966110e1565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604081205460ff1690816002811115610bd257610bd26112c1565b03610c2b576040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690633659cfe6906024016107b2565b6001816002811115610c3f57610c3f6112c1565b03610cbe576040517f9b0b0fda0000000000000000000000000000000000000000000000000000000081527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152841690639b0b0fda906044016107b2565b6002816002811115610cd257610cd26112c1565b03610e165773ffffffffffffffffffffffffffffffffffffffff831660009081526002602052604081208054610d07906115e8565b80601f0160208091040260200160405190810160405280929190818152602001828054610d33906115e8565b8015610d805780601f10610d5557610100808354040283529160200191610d80565b820191906000526020600020905b815481529060010190602001808311610d6357829003601f168201915b50506003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815294955073ffffffffffffffffffffffffffffffffffffffff1693639b2ea4bd9350610dde92508591508790600401611908565b600060405180830381600087803b158015610df857600080fd5b505af1158015610e0c573d6000803e3d6000fd5b5050505050505050565b6108c7611940565b610e266110e1565b6003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690639b2ea4bd90610e7e9085908590600401611908565b600060405180830381600087803b158015610e9857600080fd5b505af1158015610eac573d6000803e3d6000fd5b505050505050565b610ebc6110e1565b73ffffffffffffffffffffffffffffffffffffffff8116610f5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161065c565b610f6881611162565b50565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604081205460ff1681816002811115610fa757610fa76112c1565b03610ff7578273ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d1573d6000803e3d6000fd5b600181600281111561100b5761100b6112c1565b0361105b578273ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d1573d6000803e3d6000fd5b600281600281111561106f5761106f6112c1565b036105fe57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d1573d6000803e3d6000fd5b60005473ffffffffffffffffffffffffffffffffffffffff163314610717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161065c565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff81168114610f6857600080fd5b60006020828403121561120b57600080fd5b81356104f5816111d7565b60006020828403121561122857600080fd5b813580151581146104f557600080fd5b60005b8381101561125357818101518382015260200161123b565b83811115610b885750506000910152565b6000815180845261127c816020860160208601611238565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006104f56020830184611264565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061132b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806040838503121561134457600080fd5b823561134f816111d7565b9150602083013561135f816111d7565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156113e0576113e061136a565b604052919050565b600067ffffffffffffffff8211156114025761140261136a565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600061144161143c846113e8565b611399565b905082815283838301111561145557600080fd5b828260208301376000602084830101529392505050565b600082601f83011261147d57600080fd5b6104f58383356020850161142e565b6000806040838503121561149f57600080fd5b82356114aa816111d7565b9150602083013567ffffffffffffffff8111156114c657600080fd5b6114d28582860161146c565b9150509250929050565b600080604083850312156114ef57600080fd5b82356114fa816111d7565b915060208301356003811061135f57600080fd5b60008060006060848603121561152357600080fd5b833561152e816111d7565b9250602084013561153e816111d7565b9150604084013567ffffffffffffffff81111561155a57600080fd5b8401601f8101861361156b57600080fd5b61157a8682356020840161142e565b9150509250925092565b6000806040838503121561159757600080fd5b823567ffffffffffffffff8111156115ae57600080fd5b6115ba8582860161146c565b925050602083013561135f816111d7565b6000602082840312156115dd57600080fd5b81516104f5816111d7565b600181811c908216806115fc57607f821691505b602082108103610665577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000602080835260008454611649816115e8565b8084870152604060018084166000811461166a57600181146116a2576116d0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008516838a01528284151560051b8a010195506116d0565b896000528660002060005b858110156116c85781548b82018601529083019088016116ad565b8a0184019650505b509398975050505050505050565b601f8211156108c757600081815260208120601f850160051c810160208610156117055750805b601f850160051c820191505b81811015610eac57828155600101611711565b815167ffffffffffffffff81111561173e5761173e61136a565b6117528161174c84546115e8565b846116de565b602080601f8311600181146117a5576000841561176f5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610eac565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156117f2578886015182559484019460019091019084016117d3565b508582101561182e57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b73ffffffffffffffffffffffffffffffffffffffff8316815260406020820152600061186d6040830184611264565b949350505050565b60006020828403121561188757600080fd5b815167ffffffffffffffff81111561189e57600080fd5b8201601f810184136118af57600080fd5b80516118bd61143c826113e8565b8181528560208385010111156118d257600080fd5b6118e3826020830160208601611238565b95945050505050565b600082516118fe818460208701611238565b9190910192915050565b60408152600061191b6040830185611264565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fdfea164736f6c634300080f000a", } // ProxyAdminABI is the input ABI used to generate the binding from. @@ -157,11 +156,11 @@ func NewProxyAdminFilterer(address common.Address, filterer bind.ContractFiltere // bindProxyAdmin binds a generic wrapper to an already deployed contract. func bindProxyAdmin(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := ProxyAdminMetaData.GetAbi() + parsed, err := abi.JSON(strings.NewReader(ProxyAdminABI)) if err != nil { return nil, err } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and @@ -202,6 +201,37 @@ func (_ProxyAdmin *ProxyAdminTransactorRaw) Transact(opts *bind.TransactOpts, me return _ProxyAdmin.Contract.contract.Transact(opts, method, params...) } +// AddressManager is a free data retrieval call binding the contract method 0x3ab76e9f. +// +// Solidity: function addressManager() view returns(address) +func (_ProxyAdmin *ProxyAdminCaller) AddressManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ProxyAdmin.contract.Call(opts, &out, "addressManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// AddressManager is a free data retrieval call binding the contract method 0x3ab76e9f. +// +// Solidity: function addressManager() view returns(address) +func (_ProxyAdmin *ProxyAdminSession) AddressManager() (common.Address, error) { + return _ProxyAdmin.Contract.AddressManager(&_ProxyAdmin.CallOpts) +} + +// AddressManager is a free data retrieval call binding the contract method 0x3ab76e9f. +// +// Solidity: function addressManager() view returns(address) +func (_ProxyAdmin *ProxyAdminCallerSession) AddressManager() (common.Address, error) { + return _ProxyAdmin.Contract.AddressManager(&_ProxyAdmin.CallOpts) +} + // GetProxyAdmin is a free data retrieval call binding the contract method 0xf3b7dead. // // Solidity: function getProxyAdmin(address _proxy) view returns(address) @@ -264,6 +294,68 @@ func (_ProxyAdmin *ProxyAdminCallerSession) GetProxyImplementation(_proxy common return _ProxyAdmin.Contract.GetProxyImplementation(&_ProxyAdmin.CallOpts, _proxy) } +// ImplementationName is a free data retrieval call binding the contract method 0x238181ae. +// +// Solidity: function implementationName(address ) view returns(string) +func (_ProxyAdmin *ProxyAdminCaller) ImplementationName(opts *bind.CallOpts, arg0 common.Address) (string, error) { + var out []interface{} + err := _ProxyAdmin.contract.Call(opts, &out, "implementationName", arg0) + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// ImplementationName is a free data retrieval call binding the contract method 0x238181ae. +// +// Solidity: function implementationName(address ) view returns(string) +func (_ProxyAdmin *ProxyAdminSession) ImplementationName(arg0 common.Address) (string, error) { + return _ProxyAdmin.Contract.ImplementationName(&_ProxyAdmin.CallOpts, arg0) +} + +// ImplementationName is a free data retrieval call binding the contract method 0x238181ae. +// +// Solidity: function implementationName(address ) view returns(string) +func (_ProxyAdmin *ProxyAdminCallerSession) ImplementationName(arg0 common.Address) (string, error) { + return _ProxyAdmin.Contract.ImplementationName(&_ProxyAdmin.CallOpts, arg0) +} + +// IsUpgrading is a free data retrieval call binding the contract method 0xb7947262. +// +// Solidity: function isUpgrading() view returns(bool) +func (_ProxyAdmin *ProxyAdminCaller) IsUpgrading(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _ProxyAdmin.contract.Call(opts, &out, "isUpgrading") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsUpgrading is a free data retrieval call binding the contract method 0xb7947262. +// +// Solidity: function isUpgrading() view returns(bool) +func (_ProxyAdmin *ProxyAdminSession) IsUpgrading() (bool, error) { + return _ProxyAdmin.Contract.IsUpgrading(&_ProxyAdmin.CallOpts) +} + +// IsUpgrading is a free data retrieval call binding the contract method 0xb7947262. +// +// Solidity: function isUpgrading() view returns(bool) +func (_ProxyAdmin *ProxyAdminCallerSession) IsUpgrading() (bool, error) { + return _ProxyAdmin.Contract.IsUpgrading(&_ProxyAdmin.CallOpts) +} + // Owner is a free data retrieval call binding the contract method 0x8da5cb5b. // // Solidity: function owner() view returns(address) @@ -295,6 +387,37 @@ func (_ProxyAdmin *ProxyAdminCallerSession) Owner() (common.Address, error) { return _ProxyAdmin.Contract.Owner(&_ProxyAdmin.CallOpts) } +// ProxyType is a free data retrieval call binding the contract method 0x6bd9f516. +// +// Solidity: function proxyType(address ) view returns(uint8) +func (_ProxyAdmin *ProxyAdminCaller) ProxyType(opts *bind.CallOpts, arg0 common.Address) (uint8, error) { + var out []interface{} + err := _ProxyAdmin.contract.Call(opts, &out, "proxyType", arg0) + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// ProxyType is a free data retrieval call binding the contract method 0x6bd9f516. +// +// Solidity: function proxyType(address ) view returns(uint8) +func (_ProxyAdmin *ProxyAdminSession) ProxyType(arg0 common.Address) (uint8, error) { + return _ProxyAdmin.Contract.ProxyType(&_ProxyAdmin.CallOpts, arg0) +} + +// ProxyType is a free data retrieval call binding the contract method 0x6bd9f516. +// +// Solidity: function proxyType(address ) view returns(uint8) +func (_ProxyAdmin *ProxyAdminCallerSession) ProxyType(arg0 common.Address) (uint8, error) { + return _ProxyAdmin.Contract.ProxyType(&_ProxyAdmin.CallOpts, arg0) +} + // ChangeProxyAdmin is a paid mutator transaction binding the contract method 0x7eff275e. // // Solidity: function changeProxyAdmin(address _proxy, address _newAdmin) returns() @@ -337,6 +460,111 @@ func (_ProxyAdmin *ProxyAdminTransactorSession) RenounceOwnership() (*types.Tran return _ProxyAdmin.Contract.RenounceOwnership(&_ProxyAdmin.TransactOpts) } +// SetAddress is a paid mutator transaction binding the contract method 0x9b2ea4bd. +// +// Solidity: function setAddress(string _name, address _address) returns() +func (_ProxyAdmin *ProxyAdminTransactor) SetAddress(opts *bind.TransactOpts, _name string, _address common.Address) (*types.Transaction, error) { + return _ProxyAdmin.contract.Transact(opts, "setAddress", _name, _address) +} + +// SetAddress is a paid mutator transaction binding the contract method 0x9b2ea4bd. +// +// Solidity: function setAddress(string _name, address _address) returns() +func (_ProxyAdmin *ProxyAdminSession) SetAddress(_name string, _address common.Address) (*types.Transaction, error) { + return _ProxyAdmin.Contract.SetAddress(&_ProxyAdmin.TransactOpts, _name, _address) +} + +// SetAddress is a paid mutator transaction binding the contract method 0x9b2ea4bd. +// +// Solidity: function setAddress(string _name, address _address) returns() +func (_ProxyAdmin *ProxyAdminTransactorSession) SetAddress(_name string, _address common.Address) (*types.Transaction, error) { + return _ProxyAdmin.Contract.SetAddress(&_ProxyAdmin.TransactOpts, _name, _address) +} + +// SetAddressManager is a paid mutator transaction binding the contract method 0x0652b57a. +// +// Solidity: function setAddressManager(address _address) returns() +func (_ProxyAdmin *ProxyAdminTransactor) SetAddressManager(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) { + return _ProxyAdmin.contract.Transact(opts, "setAddressManager", _address) +} + +// SetAddressManager is a paid mutator transaction binding the contract method 0x0652b57a. +// +// Solidity: function setAddressManager(address _address) returns() +func (_ProxyAdmin *ProxyAdminSession) SetAddressManager(_address common.Address) (*types.Transaction, error) { + return _ProxyAdmin.Contract.SetAddressManager(&_ProxyAdmin.TransactOpts, _address) +} + +// SetAddressManager is a paid mutator transaction binding the contract method 0x0652b57a. +// +// Solidity: function setAddressManager(address _address) returns() +func (_ProxyAdmin *ProxyAdminTransactorSession) SetAddressManager(_address common.Address) (*types.Transaction, error) { + return _ProxyAdmin.Contract.SetAddressManager(&_ProxyAdmin.TransactOpts, _address) +} + +// SetImplementationName is a paid mutator transaction binding the contract method 0x860f7cda. +// +// Solidity: function setImplementationName(address _address, string _name) returns() +func (_ProxyAdmin *ProxyAdminTransactor) SetImplementationName(opts *bind.TransactOpts, _address common.Address, _name string) (*types.Transaction, error) { + return _ProxyAdmin.contract.Transact(opts, "setImplementationName", _address, _name) +} + +// SetImplementationName is a paid mutator transaction binding the contract method 0x860f7cda. +// +// Solidity: function setImplementationName(address _address, string _name) returns() +func (_ProxyAdmin *ProxyAdminSession) SetImplementationName(_address common.Address, _name string) (*types.Transaction, error) { + return _ProxyAdmin.Contract.SetImplementationName(&_ProxyAdmin.TransactOpts, _address, _name) +} + +// SetImplementationName is a paid mutator transaction binding the contract method 0x860f7cda. +// +// Solidity: function setImplementationName(address _address, string _name) returns() +func (_ProxyAdmin *ProxyAdminTransactorSession) SetImplementationName(_address common.Address, _name string) (*types.Transaction, error) { + return _ProxyAdmin.Contract.SetImplementationName(&_ProxyAdmin.TransactOpts, _address, _name) +} + +// SetProxyType is a paid mutator transaction binding the contract method 0x8d52d4a0. +// +// Solidity: function setProxyType(address _address, uint8 _type) returns() +func (_ProxyAdmin *ProxyAdminTransactor) SetProxyType(opts *bind.TransactOpts, _address common.Address, _type uint8) (*types.Transaction, error) { + return _ProxyAdmin.contract.Transact(opts, "setProxyType", _address, _type) +} + +// SetProxyType is a paid mutator transaction binding the contract method 0x8d52d4a0. +// +// Solidity: function setProxyType(address _address, uint8 _type) returns() +func (_ProxyAdmin *ProxyAdminSession) SetProxyType(_address common.Address, _type uint8) (*types.Transaction, error) { + return _ProxyAdmin.Contract.SetProxyType(&_ProxyAdmin.TransactOpts, _address, _type) +} + +// SetProxyType is a paid mutator transaction binding the contract method 0x8d52d4a0. +// +// Solidity: function setProxyType(address _address, uint8 _type) returns() +func (_ProxyAdmin *ProxyAdminTransactorSession) SetProxyType(_address common.Address, _type uint8) (*types.Transaction, error) { + return _ProxyAdmin.Contract.SetProxyType(&_ProxyAdmin.TransactOpts, _address, _type) +} + +// SetUpgrading is a paid mutator transaction binding the contract method 0x07c8f7b0. +// +// Solidity: function setUpgrading(bool _upgrading) returns() +func (_ProxyAdmin *ProxyAdminTransactor) SetUpgrading(opts *bind.TransactOpts, _upgrading bool) (*types.Transaction, error) { + return _ProxyAdmin.contract.Transact(opts, "setUpgrading", _upgrading) +} + +// SetUpgrading is a paid mutator transaction binding the contract method 0x07c8f7b0. +// +// Solidity: function setUpgrading(bool _upgrading) returns() +func (_ProxyAdmin *ProxyAdminSession) SetUpgrading(_upgrading bool) (*types.Transaction, error) { + return _ProxyAdmin.Contract.SetUpgrading(&_ProxyAdmin.TransactOpts, _upgrading) +} + +// SetUpgrading is a paid mutator transaction binding the contract method 0x07c8f7b0. +// +// Solidity: function setUpgrading(bool _upgrading) returns() +func (_ProxyAdmin *ProxyAdminTransactorSession) SetUpgrading(_upgrading bool) (*types.Transaction, error) { + return _ProxyAdmin.Contract.SetUpgrading(&_ProxyAdmin.TransactOpts, _upgrading) +} + // TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. // // Solidity: function transferOwnership(address newOwner) returns() diff --git a/op-bindings/bindings/proxyadmin_more.go b/op-bindings/bindings/proxyadmin_more.go index 6f615228e..198b4c159 100644 --- a/op-bindings/bindings/proxyadmin_more.go +++ b/op-bindings/bindings/proxyadmin_more.go @@ -9,11 +9,11 @@ import ( "github.com/ethereum-optimism/optimism/op-bindings/solc" ) -const ProxyAdminStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/universal/ProxyAdmin.sol:ProxyAdmin\",\"label\":\"_owner\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_address\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"}}}" +const ProxyAdminStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/universal/ProxyAdmin.sol:ProxyAdmin\",\"label\":\"_owner\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_address\"},{\"astId\":1001,\"contract\":\"src/universal/ProxyAdmin.sol:ProxyAdmin\",\"label\":\"proxyType\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_mapping(t_address,t_enum(ProxyType)1006)\"},{\"astId\":1002,\"contract\":\"src/universal/ProxyAdmin.sol:ProxyAdmin\",\"label\":\"implementationName\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_mapping(t_address,t_string_storage)\"},{\"astId\":1003,\"contract\":\"src/universal/ProxyAdmin.sol:ProxyAdmin\",\"label\":\"addressManager\",\"offset\":0,\"slot\":\"3\",\"type\":\"t_contract(AddressManager)1005\"},{\"astId\":1004,\"contract\":\"src/universal/ProxyAdmin.sol:ProxyAdmin\",\"label\":\"upgrading\",\"offset\":20,\"slot\":\"3\",\"type\":\"t_bool\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_contract(AddressManager)1005\":{\"encoding\":\"inplace\",\"label\":\"contract AddressManager\",\"numberOfBytes\":\"20\"},\"t_enum(ProxyType)1006\":{\"encoding\":\"inplace\",\"label\":\"enum ProxyAdmin.ProxyType\",\"numberOfBytes\":\"1\"},\"t_mapping(t_address,t_enum(ProxyType)1006)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e enum ProxyAdmin.ProxyType)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_enum(ProxyType)1006\"},\"t_mapping(t_address,t_string_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e string)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_string_storage\"},\"t_string_storage\":{\"encoding\":\"bytes\",\"label\":\"string\",\"numberOfBytes\":\"32\"}}}" var ProxyAdminStorageLayout = new(solc.StorageLayout) -var ProxyAdminDeployedBin = "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046105fd565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610215565b005b3480156100ec57600080fd5b506100de6100fb366004610621565b610229565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de61013936600461071e565b6102b7565b34801561014a57600080fd5b506100de610159366004610621565b610380565b34801561016a57600080fd5b506100de6101793660046105fd565b6103dc565b34801561018a57600080fd5b506100a06101993660046105fd565b610498565b60008173ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020f91906107c3565b92915050565b61021d6104e5565b6102276000610566565b565b6102316104e5565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b15801561029b57600080fd5b505af11580156102af573d6000803e3d6000fd5b505050505050565b6102bf6104e5565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef286903490610315908690869060040161080c565b60006040518083038185885af1158015610333573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261037a919081019061087a565b50505050565b6103886104e5565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe690602401610281565b6103e46104e5565b73ffffffffffffffffffffffffffffffffffffffff811661048c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61049581610566565b50565b60008173ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101eb573d6000803e3d6000fd5b60005473ffffffffffffffffffffffffffffffffffffffff163314610227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610483565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff8116811461049557600080fd5b60006020828403121561060f57600080fd5b813561061a816105db565b9392505050565b6000806040838503121561063457600080fd5b823561063f816105db565b9150602083013561064f816105db565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156106d0576106d061065a565b604052919050565b600067ffffffffffffffff8211156106f2576106f261065a565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60008060006060848603121561073357600080fd5b833561073e816105db565b9250602084013561074e816105db565b9150604084013567ffffffffffffffff81111561076a57600080fd5b8401601f8101861361077b57600080fd5b803561078e610789826106d8565b610689565b8181528760208385010111156107a357600080fd5b816020840160208301376000602083830101528093505050509250925092565b6000602082840312156107d557600080fd5b815161061a816105db565b60005b838110156107fb5781810151838201526020016107e3565b8381111561037a5750506000910152565b73ffffffffffffffffffffffffffffffffffffffff8316815260406020820152600082518060408401526108478160608501602087016107e0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016060019392505050565b60006020828403121561088c57600080fd5b815167ffffffffffffffff8111156108a357600080fd5b8201601f810184136108b457600080fd5b80516108c2610789826106d8565b8181528560208385010111156108d757600080fd5b6108e88260208301602086016107e0565b9594505050505056fea164736f6c634300080f000a" +var ProxyAdminDeployedBin = "0x60806040526004361061010e5760003560e01c8063860f7cda116100a557806399a88ec411610074578063b794726211610059578063b794726214610329578063f2fde38b14610364578063f3b7dead1461038457600080fd5b806399a88ec4146102e95780639b2ea4bd1461030957600080fd5b8063860f7cda1461026b5780638d52d4a01461028b5780638da5cb5b146102ab5780639623609d146102d657600080fd5b80633ab76e9f116100e15780633ab76e9f146101cc5780636bd9f516146101f9578063715018a6146102365780637eff275e1461024b57600080fd5b80630652b57a1461011357806307c8f7b014610135578063204e1c7a14610155578063238181ae1461019f575b600080fd5b34801561011f57600080fd5b5061013361012e3660046111f9565b6103a4565b005b34801561014157600080fd5b50610133610150366004611216565b6103f3565b34801561016157600080fd5b506101756101703660046111f9565b610445565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101ab57600080fd5b506101bf6101ba3660046111f9565b61066b565b60405161019691906112ae565b3480156101d857600080fd5b506003546101759073ffffffffffffffffffffffffffffffffffffffff1681565b34801561020557600080fd5b506102296102143660046111f9565b60016020526000908152604090205460ff1681565b60405161019691906112f0565b34801561024257600080fd5b50610133610705565b34801561025757600080fd5b50610133610266366004611331565b610719565b34801561027757600080fd5b5061013361028636600461148c565b6108cc565b34801561029757600080fd5b506101336102a63660046114dc565b610903565b3480156102b757600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610175565b6101336102e436600461150e565b610977565b3480156102f557600080fd5b50610133610304366004611331565b610b8e565b34801561031557600080fd5b50610133610324366004611584565b610e1e565b34801561033557600080fd5b5060035474010000000000000000000000000000000000000000900460ff166040519015158152602001610196565b34801561037057600080fd5b5061013361037f3660046111f9565b610eb4565b34801561039057600080fd5b5061017561039f3660046111f9565b610f6b565b6103ac6110e1565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6103fb6110e1565b6003805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604081205460ff1681816002811115610481576104816112c1565b036104fc578273ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f591906115cb565b9392505050565b6001816002811115610510576105106112c1565b03610560578273ffffffffffffffffffffffffffffffffffffffff1663aaf10f426040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d1573d6000803e3d6000fd5b6002816002811115610574576105746112c1565b036105fe5760035473ffffffffffffffffffffffffffffffffffffffff8481166000908152600260205260409081902090517fbf40fac1000000000000000000000000000000000000000000000000000000008152919092169163bf40fac1916105e19190600401611635565b602060405180830381865afa1580156104d1573d6000803e3d6000fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f50726f787941646d696e3a20756e6b6e6f776e2070726f78792074797065000060448201526064015b60405180910390fd5b50919050565b60026020526000908152604090208054610684906115e8565b80601f01602080910402602001604051908101604052809291908181526020018280546106b0906115e8565b80156106fd5780601f106106d2576101008083540402835291602001916106fd565b820191906000526020600020905b8154815290600101906020018083116106e057829003601f168201915b505050505081565b61070d6110e1565b6107176000611162565b565b6107216110e1565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604081205460ff169081600281111561075d5761075d6112c1565b036107e9576040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690638f283970906024015b600060405180830381600087803b1580156107cc57600080fd5b505af11580156107e0573d6000803e3d6000fd5b50505050505050565b60018160028111156107fd576107fd6112c1565b03610856576040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528416906313af4035906024016107b2565b600281600281111561086a5761086a6112c1565b036105fe576003546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529091169063f2fde38b906024016107b2565b505050565b6108d46110e1565b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604090206108c78282611724565b61090b6110e1565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160208190526040909120805483927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009091169083600281111561096e5761096e6112c1565b02179055505050565b61097f6110e1565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604081205460ff16908160028111156109bb576109bb6112c1565b03610a81576040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690634f1ef286903490610a16908790879060040161183e565b60006040518083038185885af1158015610a34573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a7b9190810190611875565b50610b88565b610a8b8484610b8e565b60008473ffffffffffffffffffffffffffffffffffffffff163484604051610ab391906118ec565b60006040518083038185875af1925050503d8060008114610af0576040519150601f19603f3d011682016040523d82523d6000602084013e610af5565b606091505b5050905080610b86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f50726f787941646d696e3a2063616c6c20746f2070726f78792061667465722060448201527f75706772616465206661696c6564000000000000000000000000000000000000606482015260840161065c565b505b50505050565b610b966110e1565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604081205460ff1690816002811115610bd257610bd26112c1565b03610c2b576040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152841690633659cfe6906024016107b2565b6001816002811115610c3f57610c3f6112c1565b03610cbe576040517f9b0b0fda0000000000000000000000000000000000000000000000000000000081527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152841690639b0b0fda906044016107b2565b6002816002811115610cd257610cd26112c1565b03610e165773ffffffffffffffffffffffffffffffffffffffff831660009081526002602052604081208054610d07906115e8565b80601f0160208091040260200160405190810160405280929190818152602001828054610d33906115e8565b8015610d805780601f10610d5557610100808354040283529160200191610d80565b820191906000526020600020905b815481529060010190602001808311610d6357829003601f168201915b50506003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815294955073ffffffffffffffffffffffffffffffffffffffff1693639b2ea4bd9350610dde92508591508790600401611908565b600060405180830381600087803b158015610df857600080fd5b505af1158015610e0c573d6000803e3d6000fd5b5050505050505050565b6108c7611940565b610e266110e1565b6003546040517f9b2ea4bd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690639b2ea4bd90610e7e9085908590600401611908565b600060405180830381600087803b158015610e9857600080fd5b505af1158015610eac573d6000803e3d6000fd5b505050505050565b610ebc6110e1565b73ffffffffffffffffffffffffffffffffffffffff8116610f5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161065c565b610f6881611162565b50565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604081205460ff1681816002811115610fa757610fa76112c1565b03610ff7578273ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d1573d6000803e3d6000fd5b600181600281111561100b5761100b6112c1565b0361105b578273ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d1573d6000803e3d6000fd5b600281600281111561106f5761106f6112c1565b036105fe57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d1573d6000803e3d6000fd5b60005473ffffffffffffffffffffffffffffffffffffffff163314610717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161065c565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff81168114610f6857600080fd5b60006020828403121561120b57600080fd5b81356104f5816111d7565b60006020828403121561122857600080fd5b813580151581146104f557600080fd5b60005b8381101561125357818101518382015260200161123b565b83811115610b885750506000910152565b6000815180845261127c816020860160208601611238565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006104f56020830184611264565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061132b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806040838503121561134457600080fd5b823561134f816111d7565b9150602083013561135f816111d7565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156113e0576113e061136a565b604052919050565b600067ffffffffffffffff8211156114025761140261136a565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600061144161143c846113e8565b611399565b905082815283838301111561145557600080fd5b828260208301376000602084830101529392505050565b600082601f83011261147d57600080fd5b6104f58383356020850161142e565b6000806040838503121561149f57600080fd5b82356114aa816111d7565b9150602083013567ffffffffffffffff8111156114c657600080fd5b6114d28582860161146c565b9150509250929050565b600080604083850312156114ef57600080fd5b82356114fa816111d7565b915060208301356003811061135f57600080fd5b60008060006060848603121561152357600080fd5b833561152e816111d7565b9250602084013561153e816111d7565b9150604084013567ffffffffffffffff81111561155a57600080fd5b8401601f8101861361156b57600080fd5b61157a8682356020840161142e565b9150509250925092565b6000806040838503121561159757600080fd5b823567ffffffffffffffff8111156115ae57600080fd5b6115ba8582860161146c565b925050602083013561135f816111d7565b6000602082840312156115dd57600080fd5b81516104f5816111d7565b600181811c908216806115fc57607f821691505b602082108103610665577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000602080835260008454611649816115e8565b8084870152604060018084166000811461166a57600181146116a2576116d0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008516838a01528284151560051b8a010195506116d0565b896000528660002060005b858110156116c85781548b82018601529083019088016116ad565b8a0184019650505b509398975050505050505050565b601f8211156108c757600081815260208120601f850160051c810160208610156117055750805b601f850160051c820191505b81811015610eac57828155600101611711565b815167ffffffffffffffff81111561173e5761173e61136a565b6117528161174c84546115e8565b846116de565b602080601f8311600181146117a5576000841561176f5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610eac565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156117f2578886015182559484019460019091019084016117d3565b508582101561182e57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b73ffffffffffffffffffffffffffffffffffffffff8316815260406020820152600061186d6040830184611264565b949350505050565b60006020828403121561188757600080fd5b815167ffffffffffffffff81111561189e57600080fd5b8201601f810184136118af57600080fd5b80516118bd61143c826113e8565b8181528560208385010111156118d257600080fd5b6118e3826020830160208601611238565b95945050505050565b600082516118fe818460208701611238565b9190910192915050565b60408152600061191b6040830185611264565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fdfea164736f6c634300080f000a" func init() { if err := json.Unmarshal([]byte(ProxyAdminStorageLayoutJSON), ProxyAdminStorageLayout); err != nil { diff --git a/op-bindings/bindings/registry.go b/op-bindings/bindings/registry.go index 850aa48bb..56977ce52 100644 --- a/op-bindings/bindings/registry.go +++ b/op-bindings/bindings/registry.go @@ -1,7 +1,6 @@ package bindings import ( - "errors" "fmt" "strings" @@ -20,7 +19,7 @@ var deployedBytecodes = make(map[string]string) func GetStorageLayout(name string) (*solc.StorageLayout, error) { layout := layouts[name] if layout == nil { - return nil, errors.New("storage layout not found") + return nil, fmt.Errorf("%s: storage layout not found", name) } return layout, nil } @@ -29,7 +28,7 @@ func GetStorageLayout(name string) (*solc.StorageLayout, error) { func GetDeployedBytecode(name string) ([]byte, error) { bc := deployedBytecodes[name] if bc == "" { - return nil, fmt.Errorf("deployed bytecode %s not found", name) + return nil, fmt.Errorf("%s: deployed bytecode not found", name) } if !isHex(bc) { diff --git a/op-bindings/bindings/safe.go b/op-bindings/bindings/safe.go new file mode 100644 index 000000000..725223954 --- /dev/null +++ b/op-bindings/bindings/safe.go @@ -0,0 +1,3210 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// SafeMetaData contains all meta data concerning the Safe contract. +var SafeMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"AddedOwner\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"approvedHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ApproveHash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"handler\",\"type\":\"address\"}],\"name\":\"ChangedFallbackHandler\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"guard\",\"type\":\"address\"}],\"name\":\"ChangedGuard\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"name\":\"ChangedThreshold\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"DisabledModule\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"EnabledModule\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"payment\",\"type\":\"uint256\"}],\"name\":\"ExecutionFailure\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ExecutionFromModuleFailure\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ExecutionFromModuleSuccess\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"payment\",\"type\":\"uint256\"}],\"name\":\"ExecutionSuccess\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"RemovedOwner\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"owners\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"initializer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"fallbackHandler\",\"type\":\"address\"}],\"name\":\"SafeSetup\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"SignMsg\",\"type\":\"event\"},{\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"}],\"name\":\"addOwnerWithThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashToApprove\",\"type\":\"bytes32\"}],\"name\":\"approveHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"approvedHashes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"}],\"name\":\"changeThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"requiredSignatures\",\"type\":\"uint256\"}],\"name\":\"checkNSignatures\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"}],\"name\":\"checkSignatures\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"prevModule\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"disableModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"enableModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enumEnum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"safeTxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"gasToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundReceiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"encodeTransactionData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enumEnum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"safeTxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"gasToken\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"refundReceiver\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"}],\"name\":\"execTransaction\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enumEnum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"}],\"name\":\"execTransactionFromModule\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enumEnum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"}],\"name\":\"execTransactionFromModuleReturnData\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getChainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"start\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"pageSize\",\"type\":\"uint256\"}],\"name\":\"getModulesPaginated\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"array\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"next\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOwners\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"getStorageAt\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enumEnum.Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"safeTxGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"gasToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"refundReceiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"getTransactionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"isModuleEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"prevOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"}],\"name\":\"removeOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"handler\",\"type\":\"address\"}],\"name\":\"setFallbackHandler\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"guard\",\"type\":\"address\"}],\"name\":\"setGuard\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_owners\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"fallbackHandler\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"payment\",\"type\":\"uint256\"},{\"internalType\":\"addresspayable\",\"name\":\"paymentReceiver\",\"type\":\"address\"}],\"name\":\"setup\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"signedMessages\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"targetContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"calldataPayload\",\"type\":\"bytes\"}],\"name\":\"simulateAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"prevOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oldOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"swapOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x608060405234801561001057600080fd5b506001600455614201806100256000396000f3fe6080604052600436106101d15760003560e01c8063affed0e0116100f7578063e19a9dd911610095578063f08a032311610064578063f08a0323146105f5578063f698da2514610615578063f8dc5dd91461067c578063ffa1ad741461069c5761020d565b8063e19a9dd914610580578063e318b52b146105a0578063e75235b8146105c0578063e86637db146105d55761020d565b8063cc2f8452116100d1578063cc2f8452146104f2578063d4d9bdcd14610520578063d8d11f7814610540578063e009cfde146105605761020d565b8063affed0e01461049c578063b4faba09146104b2578063b63e800d146104d25761020d565b80635624b25b1161016f5780636a7612021161013e5780636a7612021461040f5780637d83297414610422578063934f3a111461045a578063a0e67e2b1461047a5761020d565b80635624b25b146103755780635ae6bd37146103a2578063610b5925146103cf578063694e80c3146103ef5761020d565b80632f54bf6e116101ab5780632f54bf6e146102ea5780633408e4701461030a578063468721a7146103275780635229073f146103475761020d565b80630d582f131461027357806312fb68e0146102955780632d9ad53d146102b55761020d565b3661020d5760405134815233907f3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d9060200160405180910390a2005b34801561021957600080fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d580548061024457005b36600080373360601b365260008060143601600080855af190503d6000803e8061026d573d6000fd5b503d6000f35b34801561027f57600080fd5b5061029361028e366004613568565b6106e5565b005b3480156102a157600080fd5b506102936102b036600461366e565b610933565b3480156102c157600080fd5b506102d56102d03660046136e3565b610ff7565b60405190151581526020015b60405180910390f35b3480156102f657600080fd5b506102d56103053660046136e3565b61104c565b34801561031657600080fd5b50465b6040519081526020016102e1565b34801561033357600080fd5b506102d561034236600461370f565b61109e565b34801561035357600080fd5b5061036761036236600461370f565b6111d4565b6040516102e19291906137e4565b34801561038157600080fd5b506103956103903660046137ff565b61120a565b6040516102e19190613821565b3480156103ae57600080fd5b506103196103bd366004613834565b60076020526000908152604090205481565b3480156103db57600080fd5b506102936103ea3660046136e3565b611290565b3480156103fb57600080fd5b5061029361040a366004613834565b611479565b6102d561041d366004613896565b611593565b34801561042e57600080fd5b5061031961043d366004613568565b600860209081526000928352604080842090915290825290205481565b34801561046657600080fd5b5061029361047536600461396f565b61198f565b34801561048657600080fd5b5061048f611a0b565b6040516102e19190613a2d565b3480156104a857600080fd5b5061031960055481565b3480156104be57600080fd5b506102936104cd366004613a40565b611b23565b3480156104de57600080fd5b506102936104ed366004613a90565b611b46565b3480156104fe57600080fd5b5061051261050d366004613568565b611c62565b6040516102e1929190613b85565b34801561052c57600080fd5b5061029361053b366004613834565b611ed0565b34801561054c57600080fd5b5061031961055b366004613bbd565b611fa4565b34801561056c57600080fd5b5061029361057b366004613c7e565b611fd1565b34801561058c57600080fd5b5061029361059b3660046136e3565b6121a3565b3480156105ac57600080fd5b506102936105bb366004613cb7565b612344565b3480156105cc57600080fd5b50600454610319565b3480156105e157600080fd5b506103956105f0366004613bbd565b6126bc565b34801561060157600080fd5b506102936106103660046136e3565b612855565b34801561062157600080fd5b5061031960007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692184660408051602081019390935282015230606082015260800160405160208183030381529060405280519060200120905090565b34801561068857600080fd5b50610293610697366004613d02565b6128aa565b3480156106a857600080fd5b506103956040518060400160405280600581526020017f312e342e3000000000000000000000000000000000000000000000000000000081525081565b6106ed612b34565b73ffffffffffffffffffffffffffffffffffffffff821615801590610729575073ffffffffffffffffffffffffffffffffffffffff8216600114155b801561074b575073ffffffffffffffffffffffffffffffffffffffff82163014155b6107b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303300000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615610845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303400000000000000000000000000000000000000000000000000000060448201526064016107ad565b60026020527fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0805473ffffffffffffffffffffffffffffffffffffffff8481166000818152604081208054939094167fffffffffffffffffffffffff0000000000000000000000000000000000000000938416179093556001835283549091161790915560038054916108d783613d72565b909155505060405173ffffffffffffffffffffffffffffffffffffffff8316907f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2690600090a2806004541461092f5761092f81611479565b5050565b61093e816041612b9f565b825110156109a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330323000000000000000000000000000000000000000000000000000000060448201526064016107ad565b6000808060008060005b86811015610feb576041818102890160208101516040820151919092015160ff16955090935091506000849003610cf857885160208a01208a14610a52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330323700000000000000000000000000000000000000000000000000000060448201526064016107ad565b9193508391610a62876041612b9f565b821015610acb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330323100000000000000000000000000000000000000000000000000000060448201526064016107ad565b8751610ad8836020612bdb565b1115610b40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330323200000000000000000000000000000000000000000000000000000060448201526064016107ad565b602082890181015189519091610b63908390610b5d908790612bdb565b90612bdb565b1115610bcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330323300000000000000000000000000000000000000000000000000000060448201526064016107ad565b6040517f20c13b0b000000000000000000000000000000000000000000000000000000008082528a85016020019173ffffffffffffffffffffffffffffffffffffffff8916906320c13b0b90610c27908f908690600401613daa565b602060405180830381865afa158015610c44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c689190613dcf565b7fffffffff000000000000000000000000000000000000000000000000000000001614610cf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330323400000000000000000000000000000000000000000000000000000060448201526064016107ad565b5050610eeb565b8360ff16600103610dc65791935083913373ffffffffffffffffffffffffffffffffffffffff84161480610d5b575073ffffffffffffffffffffffffffffffffffffffff851660009081526008602090815260408083208d845290915290205415155b610dc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330323500000000000000000000000000000000000000000000000000000060448201526064016107ad565b610eeb565b601e8460ff161115610e8b576040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018b9052600190605c0160405160208183030381529060405280519060200120600486610e2b9190613e11565b6040805160008152602081018083529390935260ff90911690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610e7a573d6000803e3d6000fd5b505050602060405103519450610eeb565b6040805160008152602081018083528c905260ff861691810191909152606081018490526080810183905260019060a0016020604051602081039080840390855afa158015610ede573d6000803e3d6000fd5b5050506020604051035194505b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16118015610f4c575073ffffffffffffffffffffffffffffffffffffffff8581166000908152600260205260409020541615155b8015610f6f575073ffffffffffffffffffffffffffffffffffffffff8516600114155b610fd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330323600000000000000000000000000000000000000000000000000000060448201526064016107ad565b8495508080610fe390613d72565b9150506109b2565b50505050505050505050565b6000600173ffffffffffffffffffffffffffffffffffffffff831614801590611046575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600160205260409020541615155b92915050565b600073ffffffffffffffffffffffffffffffffffffffff821660011480159061104657505073ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416151590565b6000336001148015906110d557503360009081526001602052604090205473ffffffffffffffffffffffffffffffffffffffff1615155b61113b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475331303400000000000000000000000000000000000000000000000000000060448201526064016107ad565b611168858585857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612bf7565b905080156111a05760405133907f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb890600090a26111cc565b60405133907facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37590600090a25b949350505050565b600060606111e48686868661109e565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b60606000611219836020613e34565b67ffffffffffffffff81111561123157611231613594565b6040519080825280601f01601f19166020018201604052801561125b576020820181803683370190505b50905060005b8381101561128857848101546020808302840101528061128081613d72565b915050611261565b509392505050565b611298612b34565b73ffffffffffffffffffffffffffffffffffffffff8116158015906112d4575073ffffffffffffffffffffffffffffffffffffffff8116600114155b61133a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475331303100000000000000000000000000000000000000000000000000000060448201526064016107ad565b73ffffffffffffffffffffffffffffffffffffffff81811660009081526001602052604090205416156113c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475331303200000000000000000000000000000000000000000000000000000060448201526064016107ad565b600160208190527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f805473ffffffffffffffffffffffffffffffffffffffff848116600081815260408082208054949095167fffffffffffffffffffffffff000000000000000000000000000000000000000094851617909455948552835490911681179092555190917fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844091a250565b611481612b34565b6003548111156114ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303100000000000000000000000000000000000000000000000000000060448201526064016107ad565b6001811015611558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303200000000000000000000000000000000000000000000000000000060448201526064016107ad565b60048190556040518181527f610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c939060200160405180910390a150565b60008060006115ad8e8e8e8e8e8e8e8e8e8e6005546126bc565b6005805491925060006115bf83613d72565b90915550508051602082012091506115d882828661198f565b5060006116037f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c85490565b905073ffffffffffffffffffffffffffffffffffffffff8116156116a3578073ffffffffffffffffffffffffffffffffffffffff166375f0bb528f8f8f8f8f8f8f8f8f8f8f336040518d63ffffffff1660e01b81526004016116709c9b9a99989796959493929190613edb565b600060405180830381600087803b15801561168a57600080fd5b505af115801561169e573d6000803e3d6000fd5b505050505b6116cf6116b28a6109c4613ff1565b603f6116bf8c6040613e34565b6116c99190614009565b90612c3e565b6116db906101f4613ff1565b5a1015611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330313000000000000000000000000000000000000000000000000000000060448201526064016107ad565b60005a90506117b58f8f8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e8c6000146117a2578e612bf7565b6109c45a6117b09190614044565b612bf7565b93506117c25a8290612c55565b905083806117cf57508915155b806117d957508715155b61183f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330313300000000000000000000000000000000000000000000000000000060448201526064016107ad565b6000881561185757611854828b8b8b8b612c70565b90505b841561189c57837f442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e8260405161188f91815260200190565b60405180910390a26118d7565b837f23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d23826040516118ce91815260200190565b60405180910390a25b505073ffffffffffffffffffffffffffffffffffffffff81161561197e576040517f9327136800000000000000000000000000000000000000000000000000000000815260048101839052831515602482015273ffffffffffffffffffffffffffffffffffffffff821690639327136890604401600060405180830381600087803b15801561196557600080fd5b505af1158015611979573d6000803e3d6000fd5b505050505b50509b9a5050505050505050505050565b600454806119f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330303100000000000000000000000000000000000000000000000000000060448201526064016107ad565b611a0584848484610933565b50505050565b6060600060035467ffffffffffffffff811115611a2a57611a2a613594565b604051908082528060200260200182016040528015611a53578160200160208202803683370190505b506001600090815260026020527fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0549192509073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff8116600114611b1b5780838381518110611ace57611ace61405b565b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201810191909152918116600090815260029092526040909120541681611b1381613d72565b925050611a9d565b509092915050565b600080825160208401855af480600052503d6020523d600060403e60403d016000fd5b611b848a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508c9250612e01915050565b73ffffffffffffffffffffffffffffffffffffffff841615611ba957611ba9846131ce565b611be98787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061327192505050565b8115611c0057611bfe82600060018685612c70565b505b3373ffffffffffffffffffffffffffffffffffffffff167f141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a88b8b8b8b89604051611c4e95949392919061408a565b60405180910390a250505050505050505050565b6060600073ffffffffffffffffffffffffffffffffffffffff841660011480611c8f5750611c8f84610ff7565b611cf5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475331303500000000000000000000000000000000000000000000000000000060448201526064016107ad565b60008311611d5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475331303600000000000000000000000000000000000000000000000000000060448201526064016107ad565b8267ffffffffffffffff811115611d7857611d78613594565b604051908082528060200260200182016040528015611da1578160200160208202803683370190505b5073ffffffffffffffffffffffffffffffffffffffff808616600090815260016020526040812054929450911691505b73ffffffffffffffffffffffffffffffffffffffff821615801590611e0d575073ffffffffffffffffffffffffffffffffffffffff8216600114155b8015611e1857508381105b15611e805781838281518110611e3057611e3061405b565b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201810191909152928116600090815260019093526040909220549091169080611e7881613d72565b915050611dd1565b73ffffffffffffffffffffffffffffffffffffffff8216600114611ec55782611eaa600183614044565b81518110611eba57611eba61405b565b602002602001015191505b808352509250929050565b3360009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16611f5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330333000000000000000000000000000000000000000000000000000000060448201526064016107ad565b336000818152600860209081526040808320858452909152808220600190555183917ff2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c91a350565b6000611fb98c8c8c8c8c8c8c8c8c8c8c6126bc565b8051906020012090509b9a5050505050505050505050565b611fd9612b34565b73ffffffffffffffffffffffffffffffffffffffff811615801590612015575073ffffffffffffffffffffffffffffffffffffffff8116600114155b61207b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475331303100000000000000000000000000000000000000000000000000000060448201526064016107ad565b73ffffffffffffffffffffffffffffffffffffffff82811660009081526001602052604090205481169082161461210e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475331303300000000000000000000000000000000000000000000000000000060448201526064016107ad565b73ffffffffffffffffffffffffffffffffffffffff818116600081815260016020526040808220805487861684528284208054919096167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179095558383528054909416909355915190917faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace405427691a25050565b6121ab612b34565b73ffffffffffffffffffffffffffffffffffffffff8116156122db576040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527fe6d7a83a00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff8216906301ffc9a790602401602060405180830381865afa158015612251573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122759190614110565b6122db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475333303000000000000000000000000000000000000000000000000000000060448201526064016107ad565b7f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c881815560405173ffffffffffffffffffffffffffffffffffffffff8316907f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa290600090a25050565b61234c612b34565b73ffffffffffffffffffffffffffffffffffffffff811615801590612388575073ffffffffffffffffffffffffffffffffffffffff8116600114155b80156123aa575073ffffffffffffffffffffffffffffffffffffffff81163014155b612410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303300000000000000000000000000000000000000000000000000000060448201526064016107ad565b73ffffffffffffffffffffffffffffffffffffffff818116600090815260026020526040902054161561249f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303400000000000000000000000000000000000000000000000000000060448201526064016107ad565b73ffffffffffffffffffffffffffffffffffffffff8216158015906124db575073ffffffffffffffffffffffffffffffffffffffff8216600114155b612541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303300000000000000000000000000000000000000000000000000000060448201526064016107ad565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600260205260409020548116908316146125d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303500000000000000000000000000000000000000000000000000000060448201526064016107ad565b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805486861680855283852080549288167fffffffffffffffffffffffff00000000000000000000000000000000000000009384161790559589168452828420805482169096179095558383528054909416909355915190917ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf91a260405173ffffffffffffffffffffffffffffffffffffffff8216907f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2690600090a2505050565b606060007fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d860001b8d8d8d8d6040516126f6929190614132565b60405190819003812061271c949392918e908e908e908e908e908e908e90602001614142565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012090507f19000000000000000000000000000000000000000000000000000000000000007f01000000000000000000000000000000000000000000000000000000000000006127f060007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692184660408051602081019390935282015230606082015260800160405160208183030381529060405280519060200120905090565b6040517fff0000000000000000000000000000000000000000000000000000000000000093841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529150509b9a5050505050505050505050565b61285d612b34565b612866816131ce565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b090600090a250565b6128b2612b34565b8060016003546128c29190614044565b101561292a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303100000000000000000000000000000000000000000000000000000060448201526064016107ad565b73ffffffffffffffffffffffffffffffffffffffff821615801590612966575073ffffffffffffffffffffffffffffffffffffffff8216600114155b6129cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303300000000000000000000000000000000000000000000000000000060448201526064016107ad565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020526040902054811690831614612a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303500000000000000000000000000000000000000000000000000000060448201526064016107ad565b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790945591815282549091169091556003805491612ad7836141bf565b909155505060405173ffffffffffffffffffffffffffffffffffffffff8316907ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf90600090a28060045414612b2f57612b2f81611479565b505050565b333014612b9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330333100000000000000000000000000000000000000000000000000000060448201526064016107ad565b565b600082600003612bb157506000611046565b6000612bbd8385613e34565b905082612bca8583614009565b14612bd457600080fd5b9392505050565b600080612be88385613ff1565b905083811015612bd457600080fd5b60006001836001811115612c0d57612c0d613e71565b03612c25576000808551602087018986f49050612c35565b600080855160208701888a87f190505b95945050505050565b600081831015612c4e5781612bd4565b5090919050565b600082821115612c6457600080fd5b60006111cc8385614044565b60008073ffffffffffffffffffffffffffffffffffffffff831615612c955782612c97565b325b905073ffffffffffffffffffffffffffffffffffffffff8416612d7657612cd63a8610612cc4573a612cc6565b855b612cd08989612bdb565b90612b9f565b60405190925073ffffffffffffffffffffffffffffffffffffffff82169083156108fc029084906000818181858888f19350505050612d71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330313100000000000000000000000000000000000000000000000000000060448201526064016107ad565b612df7565b612d8485612cd08989612bdb565b9150612d91848284613469565b612df7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330313200000000000000000000000000000000000000000000000000000060448201526064016107ad565b5095945050505050565b60045415612e6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303000000000000000000000000000000000000000000000000000000060448201526064016107ad565b8151811115612ed6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303100000000000000000000000000000000000000000000000000000060448201526064016107ad565b6001811015612f41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303200000000000000000000000000000000000000000000000000000060448201526064016107ad565b600160005b8351811015613176576000848281518110612f6357612f6361405b565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015612fc1575073ffffffffffffffffffffffffffffffffffffffff8116600114155b8015612fe3575073ffffffffffffffffffffffffffffffffffffffff81163014155b801561301b57508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b613081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303300000000000000000000000000000000000000000000000000000060448201526064016107ad565b73ffffffffffffffffffffffffffffffffffffffff8181166000908152600260205260409020541615613110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303400000000000000000000000000000000000000000000000000000060448201526064016107ad565b73ffffffffffffffffffffffffffffffffffffffff928316600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016938216939093179092558061316e81613d72565b915050612f46565b5073ffffffffffffffffffffffffffffffffffffffff16600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001660011790559051600355600455565b3073ffffffffffffffffffffffffffffffffffffffff82160361324d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475334303000000000000000000000000000000000000000000000000000000060448201526064016107ad565b7f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d555565b600160008190526020527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f5473ffffffffffffffffffffffffffffffffffffffff161561331a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475331303000000000000000000000000000000000000000000000000000000060448201526064016107ad565b6001600081905260208190527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f80547fffffffffffffffffffffffff000000000000000000000000000000000000000016909117905573ffffffffffffffffffffffffffffffffffffffff82161561092f57813b6133f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330303200000000000000000000000000000000000000000000000000000060448201526064016107ad565b6134038260008360015a612bf7565b61092f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330303000000000000000000000000000000000000000000000000000000060448201526064016107ad565b6040805173ffffffffffffffffffffffffffffffffffffffff841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781528251600093929184919082896127105a03f13d8015613516576020811461351e5760009350613529565b819350613529565b600051158215171593505b5050509392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461355557600080fd5b50565b803561356381613533565b919050565b6000806040838503121561357b57600080fd5b823561358681613533565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126135d457600080fd5b813567ffffffffffffffff808211156135ef576135ef613594565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561363557613635613594565b8160405283815286602085880101111561364e57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806080858703121561368457600080fd5b84359350602085013567ffffffffffffffff808211156136a357600080fd5b6136af888389016135c3565b945060408701359150808211156136c557600080fd5b506136d2878288016135c3565b949793965093946060013593505050565b6000602082840312156136f557600080fd5b8135612bd481613533565b80356002811061356357600080fd5b6000806000806080858703121561372557600080fd5b843561373081613533565b935060208501359250604085013567ffffffffffffffff81111561375357600080fd5b61375f878288016135c3565b92505061376e60608601613700565b905092959194509250565b6000815180845260005b8181101561379f57602081850181015186830182015201613783565b818111156137b1576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b82151581526040602082015260006111cc6040830184613779565b6000806040838503121561381257600080fd5b50508035926020909101359150565b602081526000612bd46020830184613779565b60006020828403121561384657600080fd5b5035919050565b60008083601f84011261385f57600080fd5b50813567ffffffffffffffff81111561387757600080fd5b60208301915083602082850101111561388f57600080fd5b9250929050565b60008060008060008060008060008060006101408c8e0312156138b857600080fd5b6138c18c613558565b9a5060208c0135995067ffffffffffffffff8060408e013511156138e457600080fd5b6138f48e60408f01358f0161384d565b909a50985061390560608e01613700565b975060808d0135965060a08d0135955060c08d0135945061392860e08e01613558565b93506139376101008e01613558565b9250806101208e0135111561394b57600080fd5b5061395d8d6101208e01358e016135c3565b90509295989b509295989b9093969950565b60008060006060848603121561398457600080fd5b83359250602084013567ffffffffffffffff808211156139a357600080fd5b6139af878388016135c3565b935060408601359150808211156139c557600080fd5b506139d2868287016135c3565b9150509250925092565b600081518084526020808501945080840160005b83811015613a2257815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016139f0565b509495945050505050565b602081526000612bd460208301846139dc565b60008060408385031215613a5357600080fd5b8235613a5e81613533565b9150602083013567ffffffffffffffff811115613a7a57600080fd5b613a86858286016135c3565b9150509250929050565b6000806000806000806000806000806101008b8d031215613ab057600080fd5b8a3567ffffffffffffffff80821115613ac857600080fd5b818d0191508d601f830112613adc57600080fd5b813581811115613aeb57600080fd5b8e60208260051b8501011115613b0057600080fd5b60208381019d50909b508d01359950613b1b60408e01613558565b985060608d0135915080821115613b3157600080fd5b50613b3e8d828e0161384d565b9097509550613b51905060808c01613558565b9350613b5f60a08c01613558565b925060c08b01359150613b7460e08c01613558565b90509295989b9194979a5092959850565b604081526000613b9860408301856139dc565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b60008060008060008060008060008060006101408c8e031215613bdf57600080fd5b8b35613bea81613533565b9a5060208c0135995060408c013567ffffffffffffffff811115613c0d57600080fd5b613c198e828f0161384d565b909a509850613c2c905060608d01613700565b965060808c0135955060a08c0135945060c08c0135935060e08c0135613c5181613533565b92506101008c0135613c6281613533565b809250506101208c013590509295989b509295989b9093969950565b60008060408385031215613c9157600080fd5b8235613c9c81613533565b91506020830135613cac81613533565b809150509250929050565b600080600060608486031215613ccc57600080fd5b8335613cd781613533565b92506020840135613ce781613533565b91506040840135613cf781613533565b809150509250925092565b600080600060608486031215613d1757600080fd5b8335613d2281613533565b92506020840135613d3281613533565b929592945050506040919091013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613da357613da3613d43565b5060010190565b604081526000613dbd6040830185613779565b8281036020840152612c358185613779565b600060208284031215613de157600080fd5b81517fffffffff0000000000000000000000000000000000000000000000000000000081168114612bd457600080fd5b600060ff821660ff841680821015613e2b57613e2b613d43565b90039392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e6c57613e6c613d43565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60028110613ed7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b600061016073ffffffffffffffffffffffffffffffffffffffff8f1683528d60208401528060408401528b81840152506101808b8d828501376000818d850101527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8d01168301613f51606085018d613ea0565b8a60808501528960a08501528860c0850152613f8560e085018973ffffffffffffffffffffffffffffffffffffffff169052565b73ffffffffffffffffffffffffffffffffffffffff87166101008501528184820301610120850152613fb982820187613779565b92505050613fe061014083018473ffffffffffffffffffffffffffffffffffffffff169052565b9d9c50505050505050505050505050565b6000821982111561400457614004613d43565b500190565b60008261403f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008282101561405657614056613d43565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6080808252810185905260008660a08301825b888110156140da5782356140b081613533565b73ffffffffffffffffffffffffffffffffffffffff1682526020928301929091019060010161409d565b506020840196909652505073ffffffffffffffffffffffffffffffffffffffff9283166040820152911660609091015292915050565b60006020828403121561412257600080fd5b81518015158114612bd457600080fd5b8183823760009101908152919050565b6000610160820190508c825273ffffffffffffffffffffffffffffffffffffffff808d1660208401528b60408401528a6060840152614184608084018b613ea0565b60a083019890985260c082019690965260e0810194909452918516610100840152909316610120820152610140019190915295945050505050565b6000816141ce576141ce613d43565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea164736f6c634300080f000a", +} + +// SafeABI is the input ABI used to generate the binding from. +// Deprecated: Use SafeMetaData.ABI instead. +var SafeABI = SafeMetaData.ABI + +// SafeBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use SafeMetaData.Bin instead. +var SafeBin = SafeMetaData.Bin + +// DeploySafe deploys a new Ethereum contract, binding an instance of Safe to it. +func DeploySafe(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Safe, error) { + parsed, err := SafeMetaData.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(SafeBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &Safe{SafeCaller: SafeCaller{contract: contract}, SafeTransactor: SafeTransactor{contract: contract}, SafeFilterer: SafeFilterer{contract: contract}}, nil +} + +// Safe is an auto generated Go binding around an Ethereum contract. +type Safe struct { + SafeCaller // Read-only binding to the contract + SafeTransactor // Write-only binding to the contract + SafeFilterer // Log filterer for contract events +} + +// SafeCaller is an auto generated read-only Go binding around an Ethereum contract. +type SafeCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SafeTransactor is an auto generated write-only Go binding around an Ethereum contract. +type SafeTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SafeFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type SafeFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SafeSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type SafeSession struct { + Contract *Safe // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SafeCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type SafeCallerSession struct { + Contract *SafeCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// SafeTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type SafeTransactorSession struct { + Contract *SafeTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SafeRaw is an auto generated low-level Go binding around an Ethereum contract. +type SafeRaw struct { + Contract *Safe // Generic contract binding to access the raw methods on +} + +// SafeCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type SafeCallerRaw struct { + Contract *SafeCaller // Generic read-only contract binding to access the raw methods on +} + +// SafeTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type SafeTransactorRaw struct { + Contract *SafeTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewSafe creates a new instance of Safe, bound to a specific deployed contract. +func NewSafe(address common.Address, backend bind.ContractBackend) (*Safe, error) { + contract, err := bindSafe(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &Safe{SafeCaller: SafeCaller{contract: contract}, SafeTransactor: SafeTransactor{contract: contract}, SafeFilterer: SafeFilterer{contract: contract}}, nil +} + +// NewSafeCaller creates a new read-only instance of Safe, bound to a specific deployed contract. +func NewSafeCaller(address common.Address, caller bind.ContractCaller) (*SafeCaller, error) { + contract, err := bindSafe(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &SafeCaller{contract: contract}, nil +} + +// NewSafeTransactor creates a new write-only instance of Safe, bound to a specific deployed contract. +func NewSafeTransactor(address common.Address, transactor bind.ContractTransactor) (*SafeTransactor, error) { + contract, err := bindSafe(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &SafeTransactor{contract: contract}, nil +} + +// NewSafeFilterer creates a new log filterer instance of Safe, bound to a specific deployed contract. +func NewSafeFilterer(address common.Address, filterer bind.ContractFilterer) (*SafeFilterer, error) { + contract, err := bindSafe(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &SafeFilterer{contract: contract}, nil +} + +// bindSafe binds a generic wrapper to an already deployed contract. +func bindSafe(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(SafeABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_Safe *SafeRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Safe.Contract.SafeCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_Safe *SafeRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Safe.Contract.SafeTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Safe *SafeRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Safe.Contract.SafeTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_Safe *SafeCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Safe.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_Safe *SafeTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Safe.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Safe *SafeTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Safe.Contract.contract.Transact(opts, method, params...) +} + +// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. +// +// Solidity: function VERSION() view returns(string) +func (_Safe *SafeCaller) VERSION(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _Safe.contract.Call(opts, &out, "VERSION") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. +// +// Solidity: function VERSION() view returns(string) +func (_Safe *SafeSession) VERSION() (string, error) { + return _Safe.Contract.VERSION(&_Safe.CallOpts) +} + +// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. +// +// Solidity: function VERSION() view returns(string) +func (_Safe *SafeCallerSession) VERSION() (string, error) { + return _Safe.Contract.VERSION(&_Safe.CallOpts) +} + +// ApprovedHashes is a free data retrieval call binding the contract method 0x7d832974. +// +// Solidity: function approvedHashes(address , bytes32 ) view returns(uint256) +func (_Safe *SafeCaller) ApprovedHashes(opts *bind.CallOpts, arg0 common.Address, arg1 [32]byte) (*big.Int, error) { + var out []interface{} + err := _Safe.contract.Call(opts, &out, "approvedHashes", arg0, arg1) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ApprovedHashes is a free data retrieval call binding the contract method 0x7d832974. +// +// Solidity: function approvedHashes(address , bytes32 ) view returns(uint256) +func (_Safe *SafeSession) ApprovedHashes(arg0 common.Address, arg1 [32]byte) (*big.Int, error) { + return _Safe.Contract.ApprovedHashes(&_Safe.CallOpts, arg0, arg1) +} + +// ApprovedHashes is a free data retrieval call binding the contract method 0x7d832974. +// +// Solidity: function approvedHashes(address , bytes32 ) view returns(uint256) +func (_Safe *SafeCallerSession) ApprovedHashes(arg0 common.Address, arg1 [32]byte) (*big.Int, error) { + return _Safe.Contract.ApprovedHashes(&_Safe.CallOpts, arg0, arg1) +} + +// CheckNSignatures is a free data retrieval call binding the contract method 0x12fb68e0. +// +// Solidity: function checkNSignatures(bytes32 dataHash, bytes data, bytes signatures, uint256 requiredSignatures) view returns() +func (_Safe *SafeCaller) CheckNSignatures(opts *bind.CallOpts, dataHash [32]byte, data []byte, signatures []byte, requiredSignatures *big.Int) error { + var out []interface{} + err := _Safe.contract.Call(opts, &out, "checkNSignatures", dataHash, data, signatures, requiredSignatures) + + if err != nil { + return err + } + + return err + +} + +// CheckNSignatures is a free data retrieval call binding the contract method 0x12fb68e0. +// +// Solidity: function checkNSignatures(bytes32 dataHash, bytes data, bytes signatures, uint256 requiredSignatures) view returns() +func (_Safe *SafeSession) CheckNSignatures(dataHash [32]byte, data []byte, signatures []byte, requiredSignatures *big.Int) error { + return _Safe.Contract.CheckNSignatures(&_Safe.CallOpts, dataHash, data, signatures, requiredSignatures) +} + +// CheckNSignatures is a free data retrieval call binding the contract method 0x12fb68e0. +// +// Solidity: function checkNSignatures(bytes32 dataHash, bytes data, bytes signatures, uint256 requiredSignatures) view returns() +func (_Safe *SafeCallerSession) CheckNSignatures(dataHash [32]byte, data []byte, signatures []byte, requiredSignatures *big.Int) error { + return _Safe.Contract.CheckNSignatures(&_Safe.CallOpts, dataHash, data, signatures, requiredSignatures) +} + +// CheckSignatures is a free data retrieval call binding the contract method 0x934f3a11. +// +// Solidity: function checkSignatures(bytes32 dataHash, bytes data, bytes signatures) view returns() +func (_Safe *SafeCaller) CheckSignatures(opts *bind.CallOpts, dataHash [32]byte, data []byte, signatures []byte) error { + var out []interface{} + err := _Safe.contract.Call(opts, &out, "checkSignatures", dataHash, data, signatures) + + if err != nil { + return err + } + + return err + +} + +// CheckSignatures is a free data retrieval call binding the contract method 0x934f3a11. +// +// Solidity: function checkSignatures(bytes32 dataHash, bytes data, bytes signatures) view returns() +func (_Safe *SafeSession) CheckSignatures(dataHash [32]byte, data []byte, signatures []byte) error { + return _Safe.Contract.CheckSignatures(&_Safe.CallOpts, dataHash, data, signatures) +} + +// CheckSignatures is a free data retrieval call binding the contract method 0x934f3a11. +// +// Solidity: function checkSignatures(bytes32 dataHash, bytes data, bytes signatures) view returns() +func (_Safe *SafeCallerSession) CheckSignatures(dataHash [32]byte, data []byte, signatures []byte) error { + return _Safe.Contract.CheckSignatures(&_Safe.CallOpts, dataHash, data, signatures) +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_Safe *SafeCaller) DomainSeparator(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _Safe.contract.Call(opts, &out, "domainSeparator") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_Safe *SafeSession) DomainSeparator() ([32]byte, error) { + return _Safe.Contract.DomainSeparator(&_Safe.CallOpts) +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_Safe *SafeCallerSession) DomainSeparator() ([32]byte, error) { + return _Safe.Contract.DomainSeparator(&_Safe.CallOpts) +} + +// EncodeTransactionData is a free data retrieval call binding the contract method 0xe86637db. +// +// Solidity: function encodeTransactionData(address to, uint256 value, bytes data, uint8 operation, uint256 safeTxGas, uint256 baseGas, uint256 gasPrice, address gasToken, address refundReceiver, uint256 _nonce) view returns(bytes) +func (_Safe *SafeCaller) EncodeTransactionData(opts *bind.CallOpts, to common.Address, value *big.Int, data []byte, operation uint8, safeTxGas *big.Int, baseGas *big.Int, gasPrice *big.Int, gasToken common.Address, refundReceiver common.Address, _nonce *big.Int) ([]byte, error) { + var out []interface{} + err := _Safe.contract.Call(opts, &out, "encodeTransactionData", to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, _nonce) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// EncodeTransactionData is a free data retrieval call binding the contract method 0xe86637db. +// +// Solidity: function encodeTransactionData(address to, uint256 value, bytes data, uint8 operation, uint256 safeTxGas, uint256 baseGas, uint256 gasPrice, address gasToken, address refundReceiver, uint256 _nonce) view returns(bytes) +func (_Safe *SafeSession) EncodeTransactionData(to common.Address, value *big.Int, data []byte, operation uint8, safeTxGas *big.Int, baseGas *big.Int, gasPrice *big.Int, gasToken common.Address, refundReceiver common.Address, _nonce *big.Int) ([]byte, error) { + return _Safe.Contract.EncodeTransactionData(&_Safe.CallOpts, to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, _nonce) +} + +// EncodeTransactionData is a free data retrieval call binding the contract method 0xe86637db. +// +// Solidity: function encodeTransactionData(address to, uint256 value, bytes data, uint8 operation, uint256 safeTxGas, uint256 baseGas, uint256 gasPrice, address gasToken, address refundReceiver, uint256 _nonce) view returns(bytes) +func (_Safe *SafeCallerSession) EncodeTransactionData(to common.Address, value *big.Int, data []byte, operation uint8, safeTxGas *big.Int, baseGas *big.Int, gasPrice *big.Int, gasToken common.Address, refundReceiver common.Address, _nonce *big.Int) ([]byte, error) { + return _Safe.Contract.EncodeTransactionData(&_Safe.CallOpts, to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, _nonce) +} + +// GetChainId is a free data retrieval call binding the contract method 0x3408e470. +// +// Solidity: function getChainId() view returns(uint256) +func (_Safe *SafeCaller) GetChainId(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _Safe.contract.Call(opts, &out, "getChainId") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetChainId is a free data retrieval call binding the contract method 0x3408e470. +// +// Solidity: function getChainId() view returns(uint256) +func (_Safe *SafeSession) GetChainId() (*big.Int, error) { + return _Safe.Contract.GetChainId(&_Safe.CallOpts) +} + +// GetChainId is a free data retrieval call binding the contract method 0x3408e470. +// +// Solidity: function getChainId() view returns(uint256) +func (_Safe *SafeCallerSession) GetChainId() (*big.Int, error) { + return _Safe.Contract.GetChainId(&_Safe.CallOpts) +} + +// GetModulesPaginated is a free data retrieval call binding the contract method 0xcc2f8452. +// +// Solidity: function getModulesPaginated(address start, uint256 pageSize) view returns(address[] array, address next) +func (_Safe *SafeCaller) GetModulesPaginated(opts *bind.CallOpts, start common.Address, pageSize *big.Int) (struct { + Array []common.Address + Next common.Address +}, error) { + var out []interface{} + err := _Safe.contract.Call(opts, &out, "getModulesPaginated", start, pageSize) + + outstruct := new(struct { + Array []common.Address + Next common.Address + }) + if err != nil { + return *outstruct, err + } + + outstruct.Array = *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + outstruct.Next = *abi.ConvertType(out[1], new(common.Address)).(*common.Address) + + return *outstruct, err + +} + +// GetModulesPaginated is a free data retrieval call binding the contract method 0xcc2f8452. +// +// Solidity: function getModulesPaginated(address start, uint256 pageSize) view returns(address[] array, address next) +func (_Safe *SafeSession) GetModulesPaginated(start common.Address, pageSize *big.Int) (struct { + Array []common.Address + Next common.Address +}, error) { + return _Safe.Contract.GetModulesPaginated(&_Safe.CallOpts, start, pageSize) +} + +// GetModulesPaginated is a free data retrieval call binding the contract method 0xcc2f8452. +// +// Solidity: function getModulesPaginated(address start, uint256 pageSize) view returns(address[] array, address next) +func (_Safe *SafeCallerSession) GetModulesPaginated(start common.Address, pageSize *big.Int) (struct { + Array []common.Address + Next common.Address +}, error) { + return _Safe.Contract.GetModulesPaginated(&_Safe.CallOpts, start, pageSize) +} + +// GetOwners is a free data retrieval call binding the contract method 0xa0e67e2b. +// +// Solidity: function getOwners() view returns(address[]) +func (_Safe *SafeCaller) GetOwners(opts *bind.CallOpts) ([]common.Address, error) { + var out []interface{} + err := _Safe.contract.Call(opts, &out, "getOwners") + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +// GetOwners is a free data retrieval call binding the contract method 0xa0e67e2b. +// +// Solidity: function getOwners() view returns(address[]) +func (_Safe *SafeSession) GetOwners() ([]common.Address, error) { + return _Safe.Contract.GetOwners(&_Safe.CallOpts) +} + +// GetOwners is a free data retrieval call binding the contract method 0xa0e67e2b. +// +// Solidity: function getOwners() view returns(address[]) +func (_Safe *SafeCallerSession) GetOwners() ([]common.Address, error) { + return _Safe.Contract.GetOwners(&_Safe.CallOpts) +} + +// GetStorageAt is a free data retrieval call binding the contract method 0x5624b25b. +// +// Solidity: function getStorageAt(uint256 offset, uint256 length) view returns(bytes) +func (_Safe *SafeCaller) GetStorageAt(opts *bind.CallOpts, offset *big.Int, length *big.Int) ([]byte, error) { + var out []interface{} + err := _Safe.contract.Call(opts, &out, "getStorageAt", offset, length) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// GetStorageAt is a free data retrieval call binding the contract method 0x5624b25b. +// +// Solidity: function getStorageAt(uint256 offset, uint256 length) view returns(bytes) +func (_Safe *SafeSession) GetStorageAt(offset *big.Int, length *big.Int) ([]byte, error) { + return _Safe.Contract.GetStorageAt(&_Safe.CallOpts, offset, length) +} + +// GetStorageAt is a free data retrieval call binding the contract method 0x5624b25b. +// +// Solidity: function getStorageAt(uint256 offset, uint256 length) view returns(bytes) +func (_Safe *SafeCallerSession) GetStorageAt(offset *big.Int, length *big.Int) ([]byte, error) { + return _Safe.Contract.GetStorageAt(&_Safe.CallOpts, offset, length) +} + +// GetThreshold is a free data retrieval call binding the contract method 0xe75235b8. +// +// Solidity: function getThreshold() view returns(uint256) +func (_Safe *SafeCaller) GetThreshold(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _Safe.contract.Call(opts, &out, "getThreshold") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetThreshold is a free data retrieval call binding the contract method 0xe75235b8. +// +// Solidity: function getThreshold() view returns(uint256) +func (_Safe *SafeSession) GetThreshold() (*big.Int, error) { + return _Safe.Contract.GetThreshold(&_Safe.CallOpts) +} + +// GetThreshold is a free data retrieval call binding the contract method 0xe75235b8. +// +// Solidity: function getThreshold() view returns(uint256) +func (_Safe *SafeCallerSession) GetThreshold() (*big.Int, error) { + return _Safe.Contract.GetThreshold(&_Safe.CallOpts) +} + +// GetTransactionHash is a free data retrieval call binding the contract method 0xd8d11f78. +// +// Solidity: function getTransactionHash(address to, uint256 value, bytes data, uint8 operation, uint256 safeTxGas, uint256 baseGas, uint256 gasPrice, address gasToken, address refundReceiver, uint256 _nonce) view returns(bytes32) +func (_Safe *SafeCaller) GetTransactionHash(opts *bind.CallOpts, to common.Address, value *big.Int, data []byte, operation uint8, safeTxGas *big.Int, baseGas *big.Int, gasPrice *big.Int, gasToken common.Address, refundReceiver common.Address, _nonce *big.Int) ([32]byte, error) { + var out []interface{} + err := _Safe.contract.Call(opts, &out, "getTransactionHash", to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, _nonce) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetTransactionHash is a free data retrieval call binding the contract method 0xd8d11f78. +// +// Solidity: function getTransactionHash(address to, uint256 value, bytes data, uint8 operation, uint256 safeTxGas, uint256 baseGas, uint256 gasPrice, address gasToken, address refundReceiver, uint256 _nonce) view returns(bytes32) +func (_Safe *SafeSession) GetTransactionHash(to common.Address, value *big.Int, data []byte, operation uint8, safeTxGas *big.Int, baseGas *big.Int, gasPrice *big.Int, gasToken common.Address, refundReceiver common.Address, _nonce *big.Int) ([32]byte, error) { + return _Safe.Contract.GetTransactionHash(&_Safe.CallOpts, to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, _nonce) +} + +// GetTransactionHash is a free data retrieval call binding the contract method 0xd8d11f78. +// +// Solidity: function getTransactionHash(address to, uint256 value, bytes data, uint8 operation, uint256 safeTxGas, uint256 baseGas, uint256 gasPrice, address gasToken, address refundReceiver, uint256 _nonce) view returns(bytes32) +func (_Safe *SafeCallerSession) GetTransactionHash(to common.Address, value *big.Int, data []byte, operation uint8, safeTxGas *big.Int, baseGas *big.Int, gasPrice *big.Int, gasToken common.Address, refundReceiver common.Address, _nonce *big.Int) ([32]byte, error) { + return _Safe.Contract.GetTransactionHash(&_Safe.CallOpts, to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, _nonce) +} + +// IsModuleEnabled is a free data retrieval call binding the contract method 0x2d9ad53d. +// +// Solidity: function isModuleEnabled(address module) view returns(bool) +func (_Safe *SafeCaller) IsModuleEnabled(opts *bind.CallOpts, module common.Address) (bool, error) { + var out []interface{} + err := _Safe.contract.Call(opts, &out, "isModuleEnabled", module) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsModuleEnabled is a free data retrieval call binding the contract method 0x2d9ad53d. +// +// Solidity: function isModuleEnabled(address module) view returns(bool) +func (_Safe *SafeSession) IsModuleEnabled(module common.Address) (bool, error) { + return _Safe.Contract.IsModuleEnabled(&_Safe.CallOpts, module) +} + +// IsModuleEnabled is a free data retrieval call binding the contract method 0x2d9ad53d. +// +// Solidity: function isModuleEnabled(address module) view returns(bool) +func (_Safe *SafeCallerSession) IsModuleEnabled(module common.Address) (bool, error) { + return _Safe.Contract.IsModuleEnabled(&_Safe.CallOpts, module) +} + +// IsOwner is a free data retrieval call binding the contract method 0x2f54bf6e. +// +// Solidity: function isOwner(address owner) view returns(bool) +func (_Safe *SafeCaller) IsOwner(opts *bind.CallOpts, owner common.Address) (bool, error) { + var out []interface{} + err := _Safe.contract.Call(opts, &out, "isOwner", owner) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsOwner is a free data retrieval call binding the contract method 0x2f54bf6e. +// +// Solidity: function isOwner(address owner) view returns(bool) +func (_Safe *SafeSession) IsOwner(owner common.Address) (bool, error) { + return _Safe.Contract.IsOwner(&_Safe.CallOpts, owner) +} + +// IsOwner is a free data retrieval call binding the contract method 0x2f54bf6e. +// +// Solidity: function isOwner(address owner) view returns(bool) +func (_Safe *SafeCallerSession) IsOwner(owner common.Address) (bool, error) { + return _Safe.Contract.IsOwner(&_Safe.CallOpts, owner) +} + +// Nonce is a free data retrieval call binding the contract method 0xaffed0e0. +// +// Solidity: function nonce() view returns(uint256) +func (_Safe *SafeCaller) Nonce(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _Safe.contract.Call(opts, &out, "nonce") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Nonce is a free data retrieval call binding the contract method 0xaffed0e0. +// +// Solidity: function nonce() view returns(uint256) +func (_Safe *SafeSession) Nonce() (*big.Int, error) { + return _Safe.Contract.Nonce(&_Safe.CallOpts) +} + +// Nonce is a free data retrieval call binding the contract method 0xaffed0e0. +// +// Solidity: function nonce() view returns(uint256) +func (_Safe *SafeCallerSession) Nonce() (*big.Int, error) { + return _Safe.Contract.Nonce(&_Safe.CallOpts) +} + +// SignedMessages is a free data retrieval call binding the contract method 0x5ae6bd37. +// +// Solidity: function signedMessages(bytes32 ) view returns(uint256) +func (_Safe *SafeCaller) SignedMessages(opts *bind.CallOpts, arg0 [32]byte) (*big.Int, error) { + var out []interface{} + err := _Safe.contract.Call(opts, &out, "signedMessages", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// SignedMessages is a free data retrieval call binding the contract method 0x5ae6bd37. +// +// Solidity: function signedMessages(bytes32 ) view returns(uint256) +func (_Safe *SafeSession) SignedMessages(arg0 [32]byte) (*big.Int, error) { + return _Safe.Contract.SignedMessages(&_Safe.CallOpts, arg0) +} + +// SignedMessages is a free data retrieval call binding the contract method 0x5ae6bd37. +// +// Solidity: function signedMessages(bytes32 ) view returns(uint256) +func (_Safe *SafeCallerSession) SignedMessages(arg0 [32]byte) (*big.Int, error) { + return _Safe.Contract.SignedMessages(&_Safe.CallOpts, arg0) +} + +// AddOwnerWithThreshold is a paid mutator transaction binding the contract method 0x0d582f13. +// +// Solidity: function addOwnerWithThreshold(address owner, uint256 _threshold) returns() +func (_Safe *SafeTransactor) AddOwnerWithThreshold(opts *bind.TransactOpts, owner common.Address, _threshold *big.Int) (*types.Transaction, error) { + return _Safe.contract.Transact(opts, "addOwnerWithThreshold", owner, _threshold) +} + +// AddOwnerWithThreshold is a paid mutator transaction binding the contract method 0x0d582f13. +// +// Solidity: function addOwnerWithThreshold(address owner, uint256 _threshold) returns() +func (_Safe *SafeSession) AddOwnerWithThreshold(owner common.Address, _threshold *big.Int) (*types.Transaction, error) { + return _Safe.Contract.AddOwnerWithThreshold(&_Safe.TransactOpts, owner, _threshold) +} + +// AddOwnerWithThreshold is a paid mutator transaction binding the contract method 0x0d582f13. +// +// Solidity: function addOwnerWithThreshold(address owner, uint256 _threshold) returns() +func (_Safe *SafeTransactorSession) AddOwnerWithThreshold(owner common.Address, _threshold *big.Int) (*types.Transaction, error) { + return _Safe.Contract.AddOwnerWithThreshold(&_Safe.TransactOpts, owner, _threshold) +} + +// ApproveHash is a paid mutator transaction binding the contract method 0xd4d9bdcd. +// +// Solidity: function approveHash(bytes32 hashToApprove) returns() +func (_Safe *SafeTransactor) ApproveHash(opts *bind.TransactOpts, hashToApprove [32]byte) (*types.Transaction, error) { + return _Safe.contract.Transact(opts, "approveHash", hashToApprove) +} + +// ApproveHash is a paid mutator transaction binding the contract method 0xd4d9bdcd. +// +// Solidity: function approveHash(bytes32 hashToApprove) returns() +func (_Safe *SafeSession) ApproveHash(hashToApprove [32]byte) (*types.Transaction, error) { + return _Safe.Contract.ApproveHash(&_Safe.TransactOpts, hashToApprove) +} + +// ApproveHash is a paid mutator transaction binding the contract method 0xd4d9bdcd. +// +// Solidity: function approveHash(bytes32 hashToApprove) returns() +func (_Safe *SafeTransactorSession) ApproveHash(hashToApprove [32]byte) (*types.Transaction, error) { + return _Safe.Contract.ApproveHash(&_Safe.TransactOpts, hashToApprove) +} + +// ChangeThreshold is a paid mutator transaction binding the contract method 0x694e80c3. +// +// Solidity: function changeThreshold(uint256 _threshold) returns() +func (_Safe *SafeTransactor) ChangeThreshold(opts *bind.TransactOpts, _threshold *big.Int) (*types.Transaction, error) { + return _Safe.contract.Transact(opts, "changeThreshold", _threshold) +} + +// ChangeThreshold is a paid mutator transaction binding the contract method 0x694e80c3. +// +// Solidity: function changeThreshold(uint256 _threshold) returns() +func (_Safe *SafeSession) ChangeThreshold(_threshold *big.Int) (*types.Transaction, error) { + return _Safe.Contract.ChangeThreshold(&_Safe.TransactOpts, _threshold) +} + +// ChangeThreshold is a paid mutator transaction binding the contract method 0x694e80c3. +// +// Solidity: function changeThreshold(uint256 _threshold) returns() +func (_Safe *SafeTransactorSession) ChangeThreshold(_threshold *big.Int) (*types.Transaction, error) { + return _Safe.Contract.ChangeThreshold(&_Safe.TransactOpts, _threshold) +} + +// DisableModule is a paid mutator transaction binding the contract method 0xe009cfde. +// +// Solidity: function disableModule(address prevModule, address module) returns() +func (_Safe *SafeTransactor) DisableModule(opts *bind.TransactOpts, prevModule common.Address, module common.Address) (*types.Transaction, error) { + return _Safe.contract.Transact(opts, "disableModule", prevModule, module) +} + +// DisableModule is a paid mutator transaction binding the contract method 0xe009cfde. +// +// Solidity: function disableModule(address prevModule, address module) returns() +func (_Safe *SafeSession) DisableModule(prevModule common.Address, module common.Address) (*types.Transaction, error) { + return _Safe.Contract.DisableModule(&_Safe.TransactOpts, prevModule, module) +} + +// DisableModule is a paid mutator transaction binding the contract method 0xe009cfde. +// +// Solidity: function disableModule(address prevModule, address module) returns() +func (_Safe *SafeTransactorSession) DisableModule(prevModule common.Address, module common.Address) (*types.Transaction, error) { + return _Safe.Contract.DisableModule(&_Safe.TransactOpts, prevModule, module) +} + +// EnableModule is a paid mutator transaction binding the contract method 0x610b5925. +// +// Solidity: function enableModule(address module) returns() +func (_Safe *SafeTransactor) EnableModule(opts *bind.TransactOpts, module common.Address) (*types.Transaction, error) { + return _Safe.contract.Transact(opts, "enableModule", module) +} + +// EnableModule is a paid mutator transaction binding the contract method 0x610b5925. +// +// Solidity: function enableModule(address module) returns() +func (_Safe *SafeSession) EnableModule(module common.Address) (*types.Transaction, error) { + return _Safe.Contract.EnableModule(&_Safe.TransactOpts, module) +} + +// EnableModule is a paid mutator transaction binding the contract method 0x610b5925. +// +// Solidity: function enableModule(address module) returns() +func (_Safe *SafeTransactorSession) EnableModule(module common.Address) (*types.Transaction, error) { + return _Safe.Contract.EnableModule(&_Safe.TransactOpts, module) +} + +// ExecTransaction is a paid mutator transaction binding the contract method 0x6a761202. +// +// Solidity: function execTransaction(address to, uint256 value, bytes data, uint8 operation, uint256 safeTxGas, uint256 baseGas, uint256 gasPrice, address gasToken, address refundReceiver, bytes signatures) payable returns(bool success) +func (_Safe *SafeTransactor) ExecTransaction(opts *bind.TransactOpts, to common.Address, value *big.Int, data []byte, operation uint8, safeTxGas *big.Int, baseGas *big.Int, gasPrice *big.Int, gasToken common.Address, refundReceiver common.Address, signatures []byte) (*types.Transaction, error) { + return _Safe.contract.Transact(opts, "execTransaction", to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, signatures) +} + +// ExecTransaction is a paid mutator transaction binding the contract method 0x6a761202. +// +// Solidity: function execTransaction(address to, uint256 value, bytes data, uint8 operation, uint256 safeTxGas, uint256 baseGas, uint256 gasPrice, address gasToken, address refundReceiver, bytes signatures) payable returns(bool success) +func (_Safe *SafeSession) ExecTransaction(to common.Address, value *big.Int, data []byte, operation uint8, safeTxGas *big.Int, baseGas *big.Int, gasPrice *big.Int, gasToken common.Address, refundReceiver common.Address, signatures []byte) (*types.Transaction, error) { + return _Safe.Contract.ExecTransaction(&_Safe.TransactOpts, to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, signatures) +} + +// ExecTransaction is a paid mutator transaction binding the contract method 0x6a761202. +// +// Solidity: function execTransaction(address to, uint256 value, bytes data, uint8 operation, uint256 safeTxGas, uint256 baseGas, uint256 gasPrice, address gasToken, address refundReceiver, bytes signatures) payable returns(bool success) +func (_Safe *SafeTransactorSession) ExecTransaction(to common.Address, value *big.Int, data []byte, operation uint8, safeTxGas *big.Int, baseGas *big.Int, gasPrice *big.Int, gasToken common.Address, refundReceiver common.Address, signatures []byte) (*types.Transaction, error) { + return _Safe.Contract.ExecTransaction(&_Safe.TransactOpts, to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, signatures) +} + +// ExecTransactionFromModule is a paid mutator transaction binding the contract method 0x468721a7. +// +// Solidity: function execTransactionFromModule(address to, uint256 value, bytes data, uint8 operation) returns(bool success) +func (_Safe *SafeTransactor) ExecTransactionFromModule(opts *bind.TransactOpts, to common.Address, value *big.Int, data []byte, operation uint8) (*types.Transaction, error) { + return _Safe.contract.Transact(opts, "execTransactionFromModule", to, value, data, operation) +} + +// ExecTransactionFromModule is a paid mutator transaction binding the contract method 0x468721a7. +// +// Solidity: function execTransactionFromModule(address to, uint256 value, bytes data, uint8 operation) returns(bool success) +func (_Safe *SafeSession) ExecTransactionFromModule(to common.Address, value *big.Int, data []byte, operation uint8) (*types.Transaction, error) { + return _Safe.Contract.ExecTransactionFromModule(&_Safe.TransactOpts, to, value, data, operation) +} + +// ExecTransactionFromModule is a paid mutator transaction binding the contract method 0x468721a7. +// +// Solidity: function execTransactionFromModule(address to, uint256 value, bytes data, uint8 operation) returns(bool success) +func (_Safe *SafeTransactorSession) ExecTransactionFromModule(to common.Address, value *big.Int, data []byte, operation uint8) (*types.Transaction, error) { + return _Safe.Contract.ExecTransactionFromModule(&_Safe.TransactOpts, to, value, data, operation) +} + +// ExecTransactionFromModuleReturnData is a paid mutator transaction binding the contract method 0x5229073f. +// +// Solidity: function execTransactionFromModuleReturnData(address to, uint256 value, bytes data, uint8 operation) returns(bool success, bytes returnData) +func (_Safe *SafeTransactor) ExecTransactionFromModuleReturnData(opts *bind.TransactOpts, to common.Address, value *big.Int, data []byte, operation uint8) (*types.Transaction, error) { + return _Safe.contract.Transact(opts, "execTransactionFromModuleReturnData", to, value, data, operation) +} + +// ExecTransactionFromModuleReturnData is a paid mutator transaction binding the contract method 0x5229073f. +// +// Solidity: function execTransactionFromModuleReturnData(address to, uint256 value, bytes data, uint8 operation) returns(bool success, bytes returnData) +func (_Safe *SafeSession) ExecTransactionFromModuleReturnData(to common.Address, value *big.Int, data []byte, operation uint8) (*types.Transaction, error) { + return _Safe.Contract.ExecTransactionFromModuleReturnData(&_Safe.TransactOpts, to, value, data, operation) +} + +// ExecTransactionFromModuleReturnData is a paid mutator transaction binding the contract method 0x5229073f. +// +// Solidity: function execTransactionFromModuleReturnData(address to, uint256 value, bytes data, uint8 operation) returns(bool success, bytes returnData) +func (_Safe *SafeTransactorSession) ExecTransactionFromModuleReturnData(to common.Address, value *big.Int, data []byte, operation uint8) (*types.Transaction, error) { + return _Safe.Contract.ExecTransactionFromModuleReturnData(&_Safe.TransactOpts, to, value, data, operation) +} + +// RemoveOwner is a paid mutator transaction binding the contract method 0xf8dc5dd9. +// +// Solidity: function removeOwner(address prevOwner, address owner, uint256 _threshold) returns() +func (_Safe *SafeTransactor) RemoveOwner(opts *bind.TransactOpts, prevOwner common.Address, owner common.Address, _threshold *big.Int) (*types.Transaction, error) { + return _Safe.contract.Transact(opts, "removeOwner", prevOwner, owner, _threshold) +} + +// RemoveOwner is a paid mutator transaction binding the contract method 0xf8dc5dd9. +// +// Solidity: function removeOwner(address prevOwner, address owner, uint256 _threshold) returns() +func (_Safe *SafeSession) RemoveOwner(prevOwner common.Address, owner common.Address, _threshold *big.Int) (*types.Transaction, error) { + return _Safe.Contract.RemoveOwner(&_Safe.TransactOpts, prevOwner, owner, _threshold) +} + +// RemoveOwner is a paid mutator transaction binding the contract method 0xf8dc5dd9. +// +// Solidity: function removeOwner(address prevOwner, address owner, uint256 _threshold) returns() +func (_Safe *SafeTransactorSession) RemoveOwner(prevOwner common.Address, owner common.Address, _threshold *big.Int) (*types.Transaction, error) { + return _Safe.Contract.RemoveOwner(&_Safe.TransactOpts, prevOwner, owner, _threshold) +} + +// SetFallbackHandler is a paid mutator transaction binding the contract method 0xf08a0323. +// +// Solidity: function setFallbackHandler(address handler) returns() +func (_Safe *SafeTransactor) SetFallbackHandler(opts *bind.TransactOpts, handler common.Address) (*types.Transaction, error) { + return _Safe.contract.Transact(opts, "setFallbackHandler", handler) +} + +// SetFallbackHandler is a paid mutator transaction binding the contract method 0xf08a0323. +// +// Solidity: function setFallbackHandler(address handler) returns() +func (_Safe *SafeSession) SetFallbackHandler(handler common.Address) (*types.Transaction, error) { + return _Safe.Contract.SetFallbackHandler(&_Safe.TransactOpts, handler) +} + +// SetFallbackHandler is a paid mutator transaction binding the contract method 0xf08a0323. +// +// Solidity: function setFallbackHandler(address handler) returns() +func (_Safe *SafeTransactorSession) SetFallbackHandler(handler common.Address) (*types.Transaction, error) { + return _Safe.Contract.SetFallbackHandler(&_Safe.TransactOpts, handler) +} + +// SetGuard is a paid mutator transaction binding the contract method 0xe19a9dd9. +// +// Solidity: function setGuard(address guard) returns() +func (_Safe *SafeTransactor) SetGuard(opts *bind.TransactOpts, guard common.Address) (*types.Transaction, error) { + return _Safe.contract.Transact(opts, "setGuard", guard) +} + +// SetGuard is a paid mutator transaction binding the contract method 0xe19a9dd9. +// +// Solidity: function setGuard(address guard) returns() +func (_Safe *SafeSession) SetGuard(guard common.Address) (*types.Transaction, error) { + return _Safe.Contract.SetGuard(&_Safe.TransactOpts, guard) +} + +// SetGuard is a paid mutator transaction binding the contract method 0xe19a9dd9. +// +// Solidity: function setGuard(address guard) returns() +func (_Safe *SafeTransactorSession) SetGuard(guard common.Address) (*types.Transaction, error) { + return _Safe.Contract.SetGuard(&_Safe.TransactOpts, guard) +} + +// Setup is a paid mutator transaction binding the contract method 0xb63e800d. +// +// Solidity: function setup(address[] _owners, uint256 _threshold, address to, bytes data, address fallbackHandler, address paymentToken, uint256 payment, address paymentReceiver) returns() +func (_Safe *SafeTransactor) Setup(opts *bind.TransactOpts, _owners []common.Address, _threshold *big.Int, to common.Address, data []byte, fallbackHandler common.Address, paymentToken common.Address, payment *big.Int, paymentReceiver common.Address) (*types.Transaction, error) { + return _Safe.contract.Transact(opts, "setup", _owners, _threshold, to, data, fallbackHandler, paymentToken, payment, paymentReceiver) +} + +// Setup is a paid mutator transaction binding the contract method 0xb63e800d. +// +// Solidity: function setup(address[] _owners, uint256 _threshold, address to, bytes data, address fallbackHandler, address paymentToken, uint256 payment, address paymentReceiver) returns() +func (_Safe *SafeSession) Setup(_owners []common.Address, _threshold *big.Int, to common.Address, data []byte, fallbackHandler common.Address, paymentToken common.Address, payment *big.Int, paymentReceiver common.Address) (*types.Transaction, error) { + return _Safe.Contract.Setup(&_Safe.TransactOpts, _owners, _threshold, to, data, fallbackHandler, paymentToken, payment, paymentReceiver) +} + +// Setup is a paid mutator transaction binding the contract method 0xb63e800d. +// +// Solidity: function setup(address[] _owners, uint256 _threshold, address to, bytes data, address fallbackHandler, address paymentToken, uint256 payment, address paymentReceiver) returns() +func (_Safe *SafeTransactorSession) Setup(_owners []common.Address, _threshold *big.Int, to common.Address, data []byte, fallbackHandler common.Address, paymentToken common.Address, payment *big.Int, paymentReceiver common.Address) (*types.Transaction, error) { + return _Safe.Contract.Setup(&_Safe.TransactOpts, _owners, _threshold, to, data, fallbackHandler, paymentToken, payment, paymentReceiver) +} + +// SimulateAndRevert is a paid mutator transaction binding the contract method 0xb4faba09. +// +// Solidity: function simulateAndRevert(address targetContract, bytes calldataPayload) returns() +func (_Safe *SafeTransactor) SimulateAndRevert(opts *bind.TransactOpts, targetContract common.Address, calldataPayload []byte) (*types.Transaction, error) { + return _Safe.contract.Transact(opts, "simulateAndRevert", targetContract, calldataPayload) +} + +// SimulateAndRevert is a paid mutator transaction binding the contract method 0xb4faba09. +// +// Solidity: function simulateAndRevert(address targetContract, bytes calldataPayload) returns() +func (_Safe *SafeSession) SimulateAndRevert(targetContract common.Address, calldataPayload []byte) (*types.Transaction, error) { + return _Safe.Contract.SimulateAndRevert(&_Safe.TransactOpts, targetContract, calldataPayload) +} + +// SimulateAndRevert is a paid mutator transaction binding the contract method 0xb4faba09. +// +// Solidity: function simulateAndRevert(address targetContract, bytes calldataPayload) returns() +func (_Safe *SafeTransactorSession) SimulateAndRevert(targetContract common.Address, calldataPayload []byte) (*types.Transaction, error) { + return _Safe.Contract.SimulateAndRevert(&_Safe.TransactOpts, targetContract, calldataPayload) +} + +// SwapOwner is a paid mutator transaction binding the contract method 0xe318b52b. +// +// Solidity: function swapOwner(address prevOwner, address oldOwner, address newOwner) returns() +func (_Safe *SafeTransactor) SwapOwner(opts *bind.TransactOpts, prevOwner common.Address, oldOwner common.Address, newOwner common.Address) (*types.Transaction, error) { + return _Safe.contract.Transact(opts, "swapOwner", prevOwner, oldOwner, newOwner) +} + +// SwapOwner is a paid mutator transaction binding the contract method 0xe318b52b. +// +// Solidity: function swapOwner(address prevOwner, address oldOwner, address newOwner) returns() +func (_Safe *SafeSession) SwapOwner(prevOwner common.Address, oldOwner common.Address, newOwner common.Address) (*types.Transaction, error) { + return _Safe.Contract.SwapOwner(&_Safe.TransactOpts, prevOwner, oldOwner, newOwner) +} + +// SwapOwner is a paid mutator transaction binding the contract method 0xe318b52b. +// +// Solidity: function swapOwner(address prevOwner, address oldOwner, address newOwner) returns() +func (_Safe *SafeTransactorSession) SwapOwner(prevOwner common.Address, oldOwner common.Address, newOwner common.Address) (*types.Transaction, error) { + return _Safe.Contract.SwapOwner(&_Safe.TransactOpts, prevOwner, oldOwner, newOwner) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() returns() +func (_Safe *SafeTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { + return _Safe.contract.RawTransact(opts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() returns() +func (_Safe *SafeSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _Safe.Contract.Fallback(&_Safe.TransactOpts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() returns() +func (_Safe *SafeTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _Safe.Contract.Fallback(&_Safe.TransactOpts, calldata) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_Safe *SafeTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Safe.contract.RawTransact(opts, nil) // calldata is disallowed for receive function +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_Safe *SafeSession) Receive() (*types.Transaction, error) { + return _Safe.Contract.Receive(&_Safe.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_Safe *SafeTransactorSession) Receive() (*types.Transaction, error) { + return _Safe.Contract.Receive(&_Safe.TransactOpts) +} + +// SafeAddedOwnerIterator is returned from FilterAddedOwner and is used to iterate over the raw logs and unpacked data for AddedOwner events raised by the Safe contract. +type SafeAddedOwnerIterator struct { + Event *SafeAddedOwner // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *SafeAddedOwnerIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(SafeAddedOwner) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(SafeAddedOwner) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *SafeAddedOwnerIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SafeAddedOwnerIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SafeAddedOwner represents a AddedOwner event raised by the Safe contract. +type SafeAddedOwner struct { + Owner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterAddedOwner is a free log retrieval operation binding the contract event 0x9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea26. +// +// Solidity: event AddedOwner(address indexed owner) +func (_Safe *SafeFilterer) FilterAddedOwner(opts *bind.FilterOpts, owner []common.Address) (*SafeAddedOwnerIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + + logs, sub, err := _Safe.contract.FilterLogs(opts, "AddedOwner", ownerRule) + if err != nil { + return nil, err + } + return &SafeAddedOwnerIterator{contract: _Safe.contract, event: "AddedOwner", logs: logs, sub: sub}, nil +} + +// WatchAddedOwner is a free log subscription operation binding the contract event 0x9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea26. +// +// Solidity: event AddedOwner(address indexed owner) +func (_Safe *SafeFilterer) WatchAddedOwner(opts *bind.WatchOpts, sink chan<- *SafeAddedOwner, owner []common.Address) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + + logs, sub, err := _Safe.contract.WatchLogs(opts, "AddedOwner", ownerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(SafeAddedOwner) + if err := _Safe.contract.UnpackLog(event, "AddedOwner", 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 +} + +// ParseAddedOwner is a log parse operation binding the contract event 0x9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea26. +// +// Solidity: event AddedOwner(address indexed owner) +func (_Safe *SafeFilterer) ParseAddedOwner(log types.Log) (*SafeAddedOwner, error) { + event := new(SafeAddedOwner) + if err := _Safe.contract.UnpackLog(event, "AddedOwner", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SafeApproveHashIterator is returned from FilterApproveHash and is used to iterate over the raw logs and unpacked data for ApproveHash events raised by the Safe contract. +type SafeApproveHashIterator struct { + Event *SafeApproveHash // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *SafeApproveHashIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(SafeApproveHash) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(SafeApproveHash) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *SafeApproveHashIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SafeApproveHashIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SafeApproveHash represents a ApproveHash event raised by the Safe contract. +type SafeApproveHash struct { + ApprovedHash [32]byte + Owner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApproveHash is a free log retrieval operation binding the contract event 0xf2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c. +// +// Solidity: event ApproveHash(bytes32 indexed approvedHash, address indexed owner) +func (_Safe *SafeFilterer) FilterApproveHash(opts *bind.FilterOpts, approvedHash [][32]byte, owner []common.Address) (*SafeApproveHashIterator, error) { + + var approvedHashRule []interface{} + for _, approvedHashItem := range approvedHash { + approvedHashRule = append(approvedHashRule, approvedHashItem) + } + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + + logs, sub, err := _Safe.contract.FilterLogs(opts, "ApproveHash", approvedHashRule, ownerRule) + if err != nil { + return nil, err + } + return &SafeApproveHashIterator{contract: _Safe.contract, event: "ApproveHash", logs: logs, sub: sub}, nil +} + +// WatchApproveHash is a free log subscription operation binding the contract event 0xf2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c. +// +// Solidity: event ApproveHash(bytes32 indexed approvedHash, address indexed owner) +func (_Safe *SafeFilterer) WatchApproveHash(opts *bind.WatchOpts, sink chan<- *SafeApproveHash, approvedHash [][32]byte, owner []common.Address) (event.Subscription, error) { + + var approvedHashRule []interface{} + for _, approvedHashItem := range approvedHash { + approvedHashRule = append(approvedHashRule, approvedHashItem) + } + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + + logs, sub, err := _Safe.contract.WatchLogs(opts, "ApproveHash", approvedHashRule, ownerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(SafeApproveHash) + if err := _Safe.contract.UnpackLog(event, "ApproveHash", 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 +} + +// ParseApproveHash is a log parse operation binding the contract event 0xf2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c. +// +// Solidity: event ApproveHash(bytes32 indexed approvedHash, address indexed owner) +func (_Safe *SafeFilterer) ParseApproveHash(log types.Log) (*SafeApproveHash, error) { + event := new(SafeApproveHash) + if err := _Safe.contract.UnpackLog(event, "ApproveHash", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SafeChangedFallbackHandlerIterator is returned from FilterChangedFallbackHandler and is used to iterate over the raw logs and unpacked data for ChangedFallbackHandler events raised by the Safe contract. +type SafeChangedFallbackHandlerIterator struct { + Event *SafeChangedFallbackHandler // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *SafeChangedFallbackHandlerIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(SafeChangedFallbackHandler) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(SafeChangedFallbackHandler) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *SafeChangedFallbackHandlerIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SafeChangedFallbackHandlerIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SafeChangedFallbackHandler represents a ChangedFallbackHandler event raised by the Safe contract. +type SafeChangedFallbackHandler struct { + Handler common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterChangedFallbackHandler is a free log retrieval operation binding the contract event 0x5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b0. +// +// Solidity: event ChangedFallbackHandler(address indexed handler) +func (_Safe *SafeFilterer) FilterChangedFallbackHandler(opts *bind.FilterOpts, handler []common.Address) (*SafeChangedFallbackHandlerIterator, error) { + + var handlerRule []interface{} + for _, handlerItem := range handler { + handlerRule = append(handlerRule, handlerItem) + } + + logs, sub, err := _Safe.contract.FilterLogs(opts, "ChangedFallbackHandler", handlerRule) + if err != nil { + return nil, err + } + return &SafeChangedFallbackHandlerIterator{contract: _Safe.contract, event: "ChangedFallbackHandler", logs: logs, sub: sub}, nil +} + +// WatchChangedFallbackHandler is a free log subscription operation binding the contract event 0x5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b0. +// +// Solidity: event ChangedFallbackHandler(address indexed handler) +func (_Safe *SafeFilterer) WatchChangedFallbackHandler(opts *bind.WatchOpts, sink chan<- *SafeChangedFallbackHandler, handler []common.Address) (event.Subscription, error) { + + var handlerRule []interface{} + for _, handlerItem := range handler { + handlerRule = append(handlerRule, handlerItem) + } + + logs, sub, err := _Safe.contract.WatchLogs(opts, "ChangedFallbackHandler", handlerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(SafeChangedFallbackHandler) + if err := _Safe.contract.UnpackLog(event, "ChangedFallbackHandler", 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 +} + +// ParseChangedFallbackHandler is a log parse operation binding the contract event 0x5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b0. +// +// Solidity: event ChangedFallbackHandler(address indexed handler) +func (_Safe *SafeFilterer) ParseChangedFallbackHandler(log types.Log) (*SafeChangedFallbackHandler, error) { + event := new(SafeChangedFallbackHandler) + if err := _Safe.contract.UnpackLog(event, "ChangedFallbackHandler", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SafeChangedGuardIterator is returned from FilterChangedGuard and is used to iterate over the raw logs and unpacked data for ChangedGuard events raised by the Safe contract. +type SafeChangedGuardIterator struct { + Event *SafeChangedGuard // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *SafeChangedGuardIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(SafeChangedGuard) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(SafeChangedGuard) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *SafeChangedGuardIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SafeChangedGuardIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SafeChangedGuard represents a ChangedGuard event raised by the Safe contract. +type SafeChangedGuard struct { + Guard common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterChangedGuard is a free log retrieval operation binding the contract event 0x1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa2. +// +// Solidity: event ChangedGuard(address indexed guard) +func (_Safe *SafeFilterer) FilterChangedGuard(opts *bind.FilterOpts, guard []common.Address) (*SafeChangedGuardIterator, error) { + + var guardRule []interface{} + for _, guardItem := range guard { + guardRule = append(guardRule, guardItem) + } + + logs, sub, err := _Safe.contract.FilterLogs(opts, "ChangedGuard", guardRule) + if err != nil { + return nil, err + } + return &SafeChangedGuardIterator{contract: _Safe.contract, event: "ChangedGuard", logs: logs, sub: sub}, nil +} + +// WatchChangedGuard is a free log subscription operation binding the contract event 0x1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa2. +// +// Solidity: event ChangedGuard(address indexed guard) +func (_Safe *SafeFilterer) WatchChangedGuard(opts *bind.WatchOpts, sink chan<- *SafeChangedGuard, guard []common.Address) (event.Subscription, error) { + + var guardRule []interface{} + for _, guardItem := range guard { + guardRule = append(guardRule, guardItem) + } + + logs, sub, err := _Safe.contract.WatchLogs(opts, "ChangedGuard", guardRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(SafeChangedGuard) + if err := _Safe.contract.UnpackLog(event, "ChangedGuard", 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 +} + +// ParseChangedGuard is a log parse operation binding the contract event 0x1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa2. +// +// Solidity: event ChangedGuard(address indexed guard) +func (_Safe *SafeFilterer) ParseChangedGuard(log types.Log) (*SafeChangedGuard, error) { + event := new(SafeChangedGuard) + if err := _Safe.contract.UnpackLog(event, "ChangedGuard", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SafeChangedThresholdIterator is returned from FilterChangedThreshold and is used to iterate over the raw logs and unpacked data for ChangedThreshold events raised by the Safe contract. +type SafeChangedThresholdIterator struct { + Event *SafeChangedThreshold // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *SafeChangedThresholdIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(SafeChangedThreshold) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(SafeChangedThreshold) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *SafeChangedThresholdIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SafeChangedThresholdIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SafeChangedThreshold represents a ChangedThreshold event raised by the Safe contract. +type SafeChangedThreshold struct { + Threshold *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterChangedThreshold is a free log retrieval operation binding the contract event 0x610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c93. +// +// Solidity: event ChangedThreshold(uint256 threshold) +func (_Safe *SafeFilterer) FilterChangedThreshold(opts *bind.FilterOpts) (*SafeChangedThresholdIterator, error) { + + logs, sub, err := _Safe.contract.FilterLogs(opts, "ChangedThreshold") + if err != nil { + return nil, err + } + return &SafeChangedThresholdIterator{contract: _Safe.contract, event: "ChangedThreshold", logs: logs, sub: sub}, nil +} + +// WatchChangedThreshold is a free log subscription operation binding the contract event 0x610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c93. +// +// Solidity: event ChangedThreshold(uint256 threshold) +func (_Safe *SafeFilterer) WatchChangedThreshold(opts *bind.WatchOpts, sink chan<- *SafeChangedThreshold) (event.Subscription, error) { + + logs, sub, err := _Safe.contract.WatchLogs(opts, "ChangedThreshold") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(SafeChangedThreshold) + if err := _Safe.contract.UnpackLog(event, "ChangedThreshold", 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 +} + +// ParseChangedThreshold is a log parse operation binding the contract event 0x610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c93. +// +// Solidity: event ChangedThreshold(uint256 threshold) +func (_Safe *SafeFilterer) ParseChangedThreshold(log types.Log) (*SafeChangedThreshold, error) { + event := new(SafeChangedThreshold) + if err := _Safe.contract.UnpackLog(event, "ChangedThreshold", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SafeDisabledModuleIterator is returned from FilterDisabledModule and is used to iterate over the raw logs and unpacked data for DisabledModule events raised by the Safe contract. +type SafeDisabledModuleIterator struct { + Event *SafeDisabledModule // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *SafeDisabledModuleIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(SafeDisabledModule) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(SafeDisabledModule) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *SafeDisabledModuleIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SafeDisabledModuleIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SafeDisabledModule represents a DisabledModule event raised by the Safe contract. +type SafeDisabledModule struct { + Module common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDisabledModule is a free log retrieval operation binding the contract event 0xaab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276. +// +// Solidity: event DisabledModule(address indexed module) +func (_Safe *SafeFilterer) FilterDisabledModule(opts *bind.FilterOpts, module []common.Address) (*SafeDisabledModuleIterator, error) { + + var moduleRule []interface{} + for _, moduleItem := range module { + moduleRule = append(moduleRule, moduleItem) + } + + logs, sub, err := _Safe.contract.FilterLogs(opts, "DisabledModule", moduleRule) + if err != nil { + return nil, err + } + return &SafeDisabledModuleIterator{contract: _Safe.contract, event: "DisabledModule", logs: logs, sub: sub}, nil +} + +// WatchDisabledModule is a free log subscription operation binding the contract event 0xaab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276. +// +// Solidity: event DisabledModule(address indexed module) +func (_Safe *SafeFilterer) WatchDisabledModule(opts *bind.WatchOpts, sink chan<- *SafeDisabledModule, module []common.Address) (event.Subscription, error) { + + var moduleRule []interface{} + for _, moduleItem := range module { + moduleRule = append(moduleRule, moduleItem) + } + + logs, sub, err := _Safe.contract.WatchLogs(opts, "DisabledModule", moduleRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(SafeDisabledModule) + if err := _Safe.contract.UnpackLog(event, "DisabledModule", 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 +} + +// ParseDisabledModule is a log parse operation binding the contract event 0xaab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276. +// +// Solidity: event DisabledModule(address indexed module) +func (_Safe *SafeFilterer) ParseDisabledModule(log types.Log) (*SafeDisabledModule, error) { + event := new(SafeDisabledModule) + if err := _Safe.contract.UnpackLog(event, "DisabledModule", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SafeEnabledModuleIterator is returned from FilterEnabledModule and is used to iterate over the raw logs and unpacked data for EnabledModule events raised by the Safe contract. +type SafeEnabledModuleIterator struct { + Event *SafeEnabledModule // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *SafeEnabledModuleIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(SafeEnabledModule) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(SafeEnabledModule) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *SafeEnabledModuleIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SafeEnabledModuleIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SafeEnabledModule represents a EnabledModule event raised by the Safe contract. +type SafeEnabledModule struct { + Module common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterEnabledModule is a free log retrieval operation binding the contract event 0xecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f8440. +// +// Solidity: event EnabledModule(address indexed module) +func (_Safe *SafeFilterer) FilterEnabledModule(opts *bind.FilterOpts, module []common.Address) (*SafeEnabledModuleIterator, error) { + + var moduleRule []interface{} + for _, moduleItem := range module { + moduleRule = append(moduleRule, moduleItem) + } + + logs, sub, err := _Safe.contract.FilterLogs(opts, "EnabledModule", moduleRule) + if err != nil { + return nil, err + } + return &SafeEnabledModuleIterator{contract: _Safe.contract, event: "EnabledModule", logs: logs, sub: sub}, nil +} + +// WatchEnabledModule is a free log subscription operation binding the contract event 0xecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f8440. +// +// Solidity: event EnabledModule(address indexed module) +func (_Safe *SafeFilterer) WatchEnabledModule(opts *bind.WatchOpts, sink chan<- *SafeEnabledModule, module []common.Address) (event.Subscription, error) { + + var moduleRule []interface{} + for _, moduleItem := range module { + moduleRule = append(moduleRule, moduleItem) + } + + logs, sub, err := _Safe.contract.WatchLogs(opts, "EnabledModule", moduleRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(SafeEnabledModule) + if err := _Safe.contract.UnpackLog(event, "EnabledModule", 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 +} + +// ParseEnabledModule is a log parse operation binding the contract event 0xecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f8440. +// +// Solidity: event EnabledModule(address indexed module) +func (_Safe *SafeFilterer) ParseEnabledModule(log types.Log) (*SafeEnabledModule, error) { + event := new(SafeEnabledModule) + if err := _Safe.contract.UnpackLog(event, "EnabledModule", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SafeExecutionFailureIterator is returned from FilterExecutionFailure and is used to iterate over the raw logs and unpacked data for ExecutionFailure events raised by the Safe contract. +type SafeExecutionFailureIterator struct { + Event *SafeExecutionFailure // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *SafeExecutionFailureIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(SafeExecutionFailure) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(SafeExecutionFailure) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *SafeExecutionFailureIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SafeExecutionFailureIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SafeExecutionFailure represents a ExecutionFailure event raised by the Safe contract. +type SafeExecutionFailure struct { + TxHash [32]byte + Payment *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterExecutionFailure is a free log retrieval operation binding the contract event 0x23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d23. +// +// Solidity: event ExecutionFailure(bytes32 indexed txHash, uint256 payment) +func (_Safe *SafeFilterer) FilterExecutionFailure(opts *bind.FilterOpts, txHash [][32]byte) (*SafeExecutionFailureIterator, error) { + + var txHashRule []interface{} + for _, txHashItem := range txHash { + txHashRule = append(txHashRule, txHashItem) + } + + logs, sub, err := _Safe.contract.FilterLogs(opts, "ExecutionFailure", txHashRule) + if err != nil { + return nil, err + } + return &SafeExecutionFailureIterator{contract: _Safe.contract, event: "ExecutionFailure", logs: logs, sub: sub}, nil +} + +// WatchExecutionFailure is a free log subscription operation binding the contract event 0x23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d23. +// +// Solidity: event ExecutionFailure(bytes32 indexed txHash, uint256 payment) +func (_Safe *SafeFilterer) WatchExecutionFailure(opts *bind.WatchOpts, sink chan<- *SafeExecutionFailure, txHash [][32]byte) (event.Subscription, error) { + + var txHashRule []interface{} + for _, txHashItem := range txHash { + txHashRule = append(txHashRule, txHashItem) + } + + logs, sub, err := _Safe.contract.WatchLogs(opts, "ExecutionFailure", txHashRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(SafeExecutionFailure) + if err := _Safe.contract.UnpackLog(event, "ExecutionFailure", 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 +} + +// ParseExecutionFailure is a log parse operation binding the contract event 0x23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d23. +// +// Solidity: event ExecutionFailure(bytes32 indexed txHash, uint256 payment) +func (_Safe *SafeFilterer) ParseExecutionFailure(log types.Log) (*SafeExecutionFailure, error) { + event := new(SafeExecutionFailure) + if err := _Safe.contract.UnpackLog(event, "ExecutionFailure", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SafeExecutionFromModuleFailureIterator is returned from FilterExecutionFromModuleFailure and is used to iterate over the raw logs and unpacked data for ExecutionFromModuleFailure events raised by the Safe contract. +type SafeExecutionFromModuleFailureIterator struct { + Event *SafeExecutionFromModuleFailure // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *SafeExecutionFromModuleFailureIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(SafeExecutionFromModuleFailure) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(SafeExecutionFromModuleFailure) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *SafeExecutionFromModuleFailureIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SafeExecutionFromModuleFailureIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SafeExecutionFromModuleFailure represents a ExecutionFromModuleFailure event raised by the Safe contract. +type SafeExecutionFromModuleFailure struct { + Module common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterExecutionFromModuleFailure is a free log retrieval operation binding the contract event 0xacd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd375. +// +// Solidity: event ExecutionFromModuleFailure(address indexed module) +func (_Safe *SafeFilterer) FilterExecutionFromModuleFailure(opts *bind.FilterOpts, module []common.Address) (*SafeExecutionFromModuleFailureIterator, error) { + + var moduleRule []interface{} + for _, moduleItem := range module { + moduleRule = append(moduleRule, moduleItem) + } + + logs, sub, err := _Safe.contract.FilterLogs(opts, "ExecutionFromModuleFailure", moduleRule) + if err != nil { + return nil, err + } + return &SafeExecutionFromModuleFailureIterator{contract: _Safe.contract, event: "ExecutionFromModuleFailure", logs: logs, sub: sub}, nil +} + +// WatchExecutionFromModuleFailure is a free log subscription operation binding the contract event 0xacd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd375. +// +// Solidity: event ExecutionFromModuleFailure(address indexed module) +func (_Safe *SafeFilterer) WatchExecutionFromModuleFailure(opts *bind.WatchOpts, sink chan<- *SafeExecutionFromModuleFailure, module []common.Address) (event.Subscription, error) { + + var moduleRule []interface{} + for _, moduleItem := range module { + moduleRule = append(moduleRule, moduleItem) + } + + logs, sub, err := _Safe.contract.WatchLogs(opts, "ExecutionFromModuleFailure", moduleRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(SafeExecutionFromModuleFailure) + if err := _Safe.contract.UnpackLog(event, "ExecutionFromModuleFailure", 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 +} + +// ParseExecutionFromModuleFailure is a log parse operation binding the contract event 0xacd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd375. +// +// Solidity: event ExecutionFromModuleFailure(address indexed module) +func (_Safe *SafeFilterer) ParseExecutionFromModuleFailure(log types.Log) (*SafeExecutionFromModuleFailure, error) { + event := new(SafeExecutionFromModuleFailure) + if err := _Safe.contract.UnpackLog(event, "ExecutionFromModuleFailure", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SafeExecutionFromModuleSuccessIterator is returned from FilterExecutionFromModuleSuccess and is used to iterate over the raw logs and unpacked data for ExecutionFromModuleSuccess events raised by the Safe contract. +type SafeExecutionFromModuleSuccessIterator struct { + Event *SafeExecutionFromModuleSuccess // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *SafeExecutionFromModuleSuccessIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(SafeExecutionFromModuleSuccess) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(SafeExecutionFromModuleSuccess) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *SafeExecutionFromModuleSuccessIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SafeExecutionFromModuleSuccessIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SafeExecutionFromModuleSuccess represents a ExecutionFromModuleSuccess event raised by the Safe contract. +type SafeExecutionFromModuleSuccess struct { + Module common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterExecutionFromModuleSuccess is a free log retrieval operation binding the contract event 0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8. +// +// Solidity: event ExecutionFromModuleSuccess(address indexed module) +func (_Safe *SafeFilterer) FilterExecutionFromModuleSuccess(opts *bind.FilterOpts, module []common.Address) (*SafeExecutionFromModuleSuccessIterator, error) { + + var moduleRule []interface{} + for _, moduleItem := range module { + moduleRule = append(moduleRule, moduleItem) + } + + logs, sub, err := _Safe.contract.FilterLogs(opts, "ExecutionFromModuleSuccess", moduleRule) + if err != nil { + return nil, err + } + return &SafeExecutionFromModuleSuccessIterator{contract: _Safe.contract, event: "ExecutionFromModuleSuccess", logs: logs, sub: sub}, nil +} + +// WatchExecutionFromModuleSuccess is a free log subscription operation binding the contract event 0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8. +// +// Solidity: event ExecutionFromModuleSuccess(address indexed module) +func (_Safe *SafeFilterer) WatchExecutionFromModuleSuccess(opts *bind.WatchOpts, sink chan<- *SafeExecutionFromModuleSuccess, module []common.Address) (event.Subscription, error) { + + var moduleRule []interface{} + for _, moduleItem := range module { + moduleRule = append(moduleRule, moduleItem) + } + + logs, sub, err := _Safe.contract.WatchLogs(opts, "ExecutionFromModuleSuccess", moduleRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(SafeExecutionFromModuleSuccess) + if err := _Safe.contract.UnpackLog(event, "ExecutionFromModuleSuccess", 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 +} + +// ParseExecutionFromModuleSuccess is a log parse operation binding the contract event 0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8. +// +// Solidity: event ExecutionFromModuleSuccess(address indexed module) +func (_Safe *SafeFilterer) ParseExecutionFromModuleSuccess(log types.Log) (*SafeExecutionFromModuleSuccess, error) { + event := new(SafeExecutionFromModuleSuccess) + if err := _Safe.contract.UnpackLog(event, "ExecutionFromModuleSuccess", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SafeExecutionSuccessIterator is returned from FilterExecutionSuccess and is used to iterate over the raw logs and unpacked data for ExecutionSuccess events raised by the Safe contract. +type SafeExecutionSuccessIterator struct { + Event *SafeExecutionSuccess // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *SafeExecutionSuccessIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(SafeExecutionSuccess) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(SafeExecutionSuccess) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *SafeExecutionSuccessIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SafeExecutionSuccessIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SafeExecutionSuccess represents a ExecutionSuccess event raised by the Safe contract. +type SafeExecutionSuccess struct { + TxHash [32]byte + Payment *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterExecutionSuccess is a free log retrieval operation binding the contract event 0x442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e. +// +// Solidity: event ExecutionSuccess(bytes32 indexed txHash, uint256 payment) +func (_Safe *SafeFilterer) FilterExecutionSuccess(opts *bind.FilterOpts, txHash [][32]byte) (*SafeExecutionSuccessIterator, error) { + + var txHashRule []interface{} + for _, txHashItem := range txHash { + txHashRule = append(txHashRule, txHashItem) + } + + logs, sub, err := _Safe.contract.FilterLogs(opts, "ExecutionSuccess", txHashRule) + if err != nil { + return nil, err + } + return &SafeExecutionSuccessIterator{contract: _Safe.contract, event: "ExecutionSuccess", logs: logs, sub: sub}, nil +} + +// WatchExecutionSuccess is a free log subscription operation binding the contract event 0x442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e. +// +// Solidity: event ExecutionSuccess(bytes32 indexed txHash, uint256 payment) +func (_Safe *SafeFilterer) WatchExecutionSuccess(opts *bind.WatchOpts, sink chan<- *SafeExecutionSuccess, txHash [][32]byte) (event.Subscription, error) { + + var txHashRule []interface{} + for _, txHashItem := range txHash { + txHashRule = append(txHashRule, txHashItem) + } + + logs, sub, err := _Safe.contract.WatchLogs(opts, "ExecutionSuccess", txHashRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(SafeExecutionSuccess) + if err := _Safe.contract.UnpackLog(event, "ExecutionSuccess", 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 +} + +// ParseExecutionSuccess is a log parse operation binding the contract event 0x442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e. +// +// Solidity: event ExecutionSuccess(bytes32 indexed txHash, uint256 payment) +func (_Safe *SafeFilterer) ParseExecutionSuccess(log types.Log) (*SafeExecutionSuccess, error) { + event := new(SafeExecutionSuccess) + if err := _Safe.contract.UnpackLog(event, "ExecutionSuccess", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SafeRemovedOwnerIterator is returned from FilterRemovedOwner and is used to iterate over the raw logs and unpacked data for RemovedOwner events raised by the Safe contract. +type SafeRemovedOwnerIterator struct { + Event *SafeRemovedOwner // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *SafeRemovedOwnerIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(SafeRemovedOwner) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(SafeRemovedOwner) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *SafeRemovedOwnerIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SafeRemovedOwnerIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SafeRemovedOwner represents a RemovedOwner event raised by the Safe contract. +type SafeRemovedOwner struct { + Owner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRemovedOwner is a free log retrieval operation binding the contract event 0xf8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf. +// +// Solidity: event RemovedOwner(address indexed owner) +func (_Safe *SafeFilterer) FilterRemovedOwner(opts *bind.FilterOpts, owner []common.Address) (*SafeRemovedOwnerIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + + logs, sub, err := _Safe.contract.FilterLogs(opts, "RemovedOwner", ownerRule) + if err != nil { + return nil, err + } + return &SafeRemovedOwnerIterator{contract: _Safe.contract, event: "RemovedOwner", logs: logs, sub: sub}, nil +} + +// WatchRemovedOwner is a free log subscription operation binding the contract event 0xf8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf. +// +// Solidity: event RemovedOwner(address indexed owner) +func (_Safe *SafeFilterer) WatchRemovedOwner(opts *bind.WatchOpts, sink chan<- *SafeRemovedOwner, owner []common.Address) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + + logs, sub, err := _Safe.contract.WatchLogs(opts, "RemovedOwner", ownerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(SafeRemovedOwner) + if err := _Safe.contract.UnpackLog(event, "RemovedOwner", 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 +} + +// ParseRemovedOwner is a log parse operation binding the contract event 0xf8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf. +// +// Solidity: event RemovedOwner(address indexed owner) +func (_Safe *SafeFilterer) ParseRemovedOwner(log types.Log) (*SafeRemovedOwner, error) { + event := new(SafeRemovedOwner) + if err := _Safe.contract.UnpackLog(event, "RemovedOwner", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SafeSafeReceivedIterator is returned from FilterSafeReceived and is used to iterate over the raw logs and unpacked data for SafeReceived events raised by the Safe contract. +type SafeSafeReceivedIterator struct { + Event *SafeSafeReceived // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *SafeSafeReceivedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(SafeSafeReceived) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(SafeSafeReceived) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *SafeSafeReceivedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SafeSafeReceivedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SafeSafeReceived represents a SafeReceived event raised by the Safe contract. +type SafeSafeReceived struct { + Sender common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSafeReceived is a free log retrieval operation binding the contract event 0x3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d. +// +// Solidity: event SafeReceived(address indexed sender, uint256 value) +func (_Safe *SafeFilterer) FilterSafeReceived(opts *bind.FilterOpts, sender []common.Address) (*SafeSafeReceivedIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _Safe.contract.FilterLogs(opts, "SafeReceived", senderRule) + if err != nil { + return nil, err + } + return &SafeSafeReceivedIterator{contract: _Safe.contract, event: "SafeReceived", logs: logs, sub: sub}, nil +} + +// WatchSafeReceived is a free log subscription operation binding the contract event 0x3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d. +// +// Solidity: event SafeReceived(address indexed sender, uint256 value) +func (_Safe *SafeFilterer) WatchSafeReceived(opts *bind.WatchOpts, sink chan<- *SafeSafeReceived, sender []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _Safe.contract.WatchLogs(opts, "SafeReceived", senderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(SafeSafeReceived) + if err := _Safe.contract.UnpackLog(event, "SafeReceived", 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 +} + +// ParseSafeReceived is a log parse operation binding the contract event 0x3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d. +// +// Solidity: event SafeReceived(address indexed sender, uint256 value) +func (_Safe *SafeFilterer) ParseSafeReceived(log types.Log) (*SafeSafeReceived, error) { + event := new(SafeSafeReceived) + if err := _Safe.contract.UnpackLog(event, "SafeReceived", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SafeSafeSetupIterator is returned from FilterSafeSetup and is used to iterate over the raw logs and unpacked data for SafeSetup events raised by the Safe contract. +type SafeSafeSetupIterator struct { + Event *SafeSafeSetup // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *SafeSafeSetupIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(SafeSafeSetup) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(SafeSafeSetup) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *SafeSafeSetupIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SafeSafeSetupIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SafeSafeSetup represents a SafeSetup event raised by the Safe contract. +type SafeSafeSetup struct { + Initiator common.Address + Owners []common.Address + Threshold *big.Int + Initializer common.Address + FallbackHandler common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSafeSetup is a free log retrieval operation binding the contract event 0x141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a8. +// +// Solidity: event SafeSetup(address indexed initiator, address[] owners, uint256 threshold, address initializer, address fallbackHandler) +func (_Safe *SafeFilterer) FilterSafeSetup(opts *bind.FilterOpts, initiator []common.Address) (*SafeSafeSetupIterator, error) { + + var initiatorRule []interface{} + for _, initiatorItem := range initiator { + initiatorRule = append(initiatorRule, initiatorItem) + } + + logs, sub, err := _Safe.contract.FilterLogs(opts, "SafeSetup", initiatorRule) + if err != nil { + return nil, err + } + return &SafeSafeSetupIterator{contract: _Safe.contract, event: "SafeSetup", logs: logs, sub: sub}, nil +} + +// WatchSafeSetup is a free log subscription operation binding the contract event 0x141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a8. +// +// Solidity: event SafeSetup(address indexed initiator, address[] owners, uint256 threshold, address initializer, address fallbackHandler) +func (_Safe *SafeFilterer) WatchSafeSetup(opts *bind.WatchOpts, sink chan<- *SafeSafeSetup, initiator []common.Address) (event.Subscription, error) { + + var initiatorRule []interface{} + for _, initiatorItem := range initiator { + initiatorRule = append(initiatorRule, initiatorItem) + } + + logs, sub, err := _Safe.contract.WatchLogs(opts, "SafeSetup", initiatorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(SafeSafeSetup) + if err := _Safe.contract.UnpackLog(event, "SafeSetup", 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 +} + +// ParseSafeSetup is a log parse operation binding the contract event 0x141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a8. +// +// Solidity: event SafeSetup(address indexed initiator, address[] owners, uint256 threshold, address initializer, address fallbackHandler) +func (_Safe *SafeFilterer) ParseSafeSetup(log types.Log) (*SafeSafeSetup, error) { + event := new(SafeSafeSetup) + if err := _Safe.contract.UnpackLog(event, "SafeSetup", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SafeSignMsgIterator is returned from FilterSignMsg and is used to iterate over the raw logs and unpacked data for SignMsg events raised by the Safe contract. +type SafeSignMsgIterator struct { + Event *SafeSignMsg // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *SafeSignMsgIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(SafeSignMsg) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(SafeSignMsg) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *SafeSignMsgIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SafeSignMsgIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SafeSignMsg represents a SignMsg event raised by the Safe contract. +type SafeSignMsg struct { + MsgHash [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSignMsg is a free log retrieval operation binding the contract event 0xe7f4675038f4f6034dfcbbb24c4dc08e4ebf10eb9d257d3d02c0f38d122ac6e4. +// +// Solidity: event SignMsg(bytes32 indexed msgHash) +func (_Safe *SafeFilterer) FilterSignMsg(opts *bind.FilterOpts, msgHash [][32]byte) (*SafeSignMsgIterator, error) { + + var msgHashRule []interface{} + for _, msgHashItem := range msgHash { + msgHashRule = append(msgHashRule, msgHashItem) + } + + logs, sub, err := _Safe.contract.FilterLogs(opts, "SignMsg", msgHashRule) + if err != nil { + return nil, err + } + return &SafeSignMsgIterator{contract: _Safe.contract, event: "SignMsg", logs: logs, sub: sub}, nil +} + +// WatchSignMsg is a free log subscription operation binding the contract event 0xe7f4675038f4f6034dfcbbb24c4dc08e4ebf10eb9d257d3d02c0f38d122ac6e4. +// +// Solidity: event SignMsg(bytes32 indexed msgHash) +func (_Safe *SafeFilterer) WatchSignMsg(opts *bind.WatchOpts, sink chan<- *SafeSignMsg, msgHash [][32]byte) (event.Subscription, error) { + + var msgHashRule []interface{} + for _, msgHashItem := range msgHash { + msgHashRule = append(msgHashRule, msgHashItem) + } + + logs, sub, err := _Safe.contract.WatchLogs(opts, "SignMsg", msgHashRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(SafeSignMsg) + if err := _Safe.contract.UnpackLog(event, "SignMsg", 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 +} + +// ParseSignMsg is a log parse operation binding the contract event 0xe7f4675038f4f6034dfcbbb24c4dc08e4ebf10eb9d257d3d02c0f38d122ac6e4. +// +// Solidity: event SignMsg(bytes32 indexed msgHash) +func (_Safe *SafeFilterer) ParseSignMsg(log types.Log) (*SafeSignMsg, error) { + event := new(SafeSignMsg) + if err := _Safe.contract.UnpackLog(event, "SignMsg", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-bindings/bindings/safe_more.go b/op-bindings/bindings/safe_more.go new file mode 100644 index 000000000..bbdbc7b93 --- /dev/null +++ b/op-bindings/bindings/safe_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const SafeStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"lib/safe-contracts/contracts/Safe.sol:Safe\",\"label\":\"singleton\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_address\"},{\"astId\":1001,\"contract\":\"lib/safe-contracts/contracts/Safe.sol:Safe\",\"label\":\"modules\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_mapping(t_address,t_address)\"},{\"astId\":1002,\"contract\":\"lib/safe-contracts/contracts/Safe.sol:Safe\",\"label\":\"owners\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_mapping(t_address,t_address)\"},{\"astId\":1003,\"contract\":\"lib/safe-contracts/contracts/Safe.sol:Safe\",\"label\":\"ownerCount\",\"offset\":0,\"slot\":\"3\",\"type\":\"t_uint256\"},{\"astId\":1004,\"contract\":\"lib/safe-contracts/contracts/Safe.sol:Safe\",\"label\":\"threshold\",\"offset\":0,\"slot\":\"4\",\"type\":\"t_uint256\"},{\"astId\":1005,\"contract\":\"lib/safe-contracts/contracts/Safe.sol:Safe\",\"label\":\"nonce\",\"offset\":0,\"slot\":\"5\",\"type\":\"t_uint256\"},{\"astId\":1006,\"contract\":\"lib/safe-contracts/contracts/Safe.sol:Safe\",\"label\":\"_deprecatedDomainSeparator\",\"offset\":0,\"slot\":\"6\",\"type\":\"t_bytes32\"},{\"astId\":1007,\"contract\":\"lib/safe-contracts/contracts/Safe.sol:Safe\",\"label\":\"signedMessages\",\"offset\":0,\"slot\":\"7\",\"type\":\"t_mapping(t_bytes32,t_uint256)\"},{\"astId\":1008,\"contract\":\"lib/safe-contracts/contracts/Safe.sol:Safe\",\"label\":\"approvedHashes\",\"offset\":0,\"slot\":\"8\",\"type\":\"t_mapping(t_address,t_mapping(t_bytes32,t_uint256))\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_address,t_address)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e address)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_address\"},\"t_mapping(t_address,t_mapping(t_bytes32,t_uint256))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(bytes32 =\u003e uint256))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_bytes32,t_uint256)\"},\"t_mapping(t_bytes32,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_uint256\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"}}}" + +var SafeStorageLayout = new(solc.StorageLayout) + +var SafeDeployedBin = "0x6080604052600436106101d15760003560e01c8063affed0e0116100f7578063e19a9dd911610095578063f08a032311610064578063f08a0323146105f5578063f698da2514610615578063f8dc5dd91461067c578063ffa1ad741461069c5761020d565b8063e19a9dd914610580578063e318b52b146105a0578063e75235b8146105c0578063e86637db146105d55761020d565b8063cc2f8452116100d1578063cc2f8452146104f2578063d4d9bdcd14610520578063d8d11f7814610540578063e009cfde146105605761020d565b8063affed0e01461049c578063b4faba09146104b2578063b63e800d146104d25761020d565b80635624b25b1161016f5780636a7612021161013e5780636a7612021461040f5780637d83297414610422578063934f3a111461045a578063a0e67e2b1461047a5761020d565b80635624b25b146103755780635ae6bd37146103a2578063610b5925146103cf578063694e80c3146103ef5761020d565b80632f54bf6e116101ab5780632f54bf6e146102ea5780633408e4701461030a578063468721a7146103275780635229073f146103475761020d565b80630d582f131461027357806312fb68e0146102955780632d9ad53d146102b55761020d565b3661020d5760405134815233907f3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d9060200160405180910390a2005b34801561021957600080fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d580548061024457005b36600080373360601b365260008060143601600080855af190503d6000803e8061026d573d6000fd5b503d6000f35b34801561027f57600080fd5b5061029361028e366004613568565b6106e5565b005b3480156102a157600080fd5b506102936102b036600461366e565b610933565b3480156102c157600080fd5b506102d56102d03660046136e3565b610ff7565b60405190151581526020015b60405180910390f35b3480156102f657600080fd5b506102d56103053660046136e3565b61104c565b34801561031657600080fd5b50465b6040519081526020016102e1565b34801561033357600080fd5b506102d561034236600461370f565b61109e565b34801561035357600080fd5b5061036761036236600461370f565b6111d4565b6040516102e19291906137e4565b34801561038157600080fd5b506103956103903660046137ff565b61120a565b6040516102e19190613821565b3480156103ae57600080fd5b506103196103bd366004613834565b60076020526000908152604090205481565b3480156103db57600080fd5b506102936103ea3660046136e3565b611290565b3480156103fb57600080fd5b5061029361040a366004613834565b611479565b6102d561041d366004613896565b611593565b34801561042e57600080fd5b5061031961043d366004613568565b600860209081526000928352604080842090915290825290205481565b34801561046657600080fd5b5061029361047536600461396f565b61198f565b34801561048657600080fd5b5061048f611a0b565b6040516102e19190613a2d565b3480156104a857600080fd5b5061031960055481565b3480156104be57600080fd5b506102936104cd366004613a40565b611b23565b3480156104de57600080fd5b506102936104ed366004613a90565b611b46565b3480156104fe57600080fd5b5061051261050d366004613568565b611c62565b6040516102e1929190613b85565b34801561052c57600080fd5b5061029361053b366004613834565b611ed0565b34801561054c57600080fd5b5061031961055b366004613bbd565b611fa4565b34801561056c57600080fd5b5061029361057b366004613c7e565b611fd1565b34801561058c57600080fd5b5061029361059b3660046136e3565b6121a3565b3480156105ac57600080fd5b506102936105bb366004613cb7565b612344565b3480156105cc57600080fd5b50600454610319565b3480156105e157600080fd5b506103956105f0366004613bbd565b6126bc565b34801561060157600080fd5b506102936106103660046136e3565b612855565b34801561062157600080fd5b5061031960007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692184660408051602081019390935282015230606082015260800160405160208183030381529060405280519060200120905090565b34801561068857600080fd5b50610293610697366004613d02565b6128aa565b3480156106a857600080fd5b506103956040518060400160405280600581526020017f312e342e3000000000000000000000000000000000000000000000000000000081525081565b6106ed612b34565b73ffffffffffffffffffffffffffffffffffffffff821615801590610729575073ffffffffffffffffffffffffffffffffffffffff8216600114155b801561074b575073ffffffffffffffffffffffffffffffffffffffff82163014155b6107b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303300000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615610845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303400000000000000000000000000000000000000000000000000000060448201526064016107ad565b60026020527fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0805473ffffffffffffffffffffffffffffffffffffffff8481166000818152604081208054939094167fffffffffffffffffffffffff0000000000000000000000000000000000000000938416179093556001835283549091161790915560038054916108d783613d72565b909155505060405173ffffffffffffffffffffffffffffffffffffffff8316907f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2690600090a2806004541461092f5761092f81611479565b5050565b61093e816041612b9f565b825110156109a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330323000000000000000000000000000000000000000000000000000000060448201526064016107ad565b6000808060008060005b86811015610feb576041818102890160208101516040820151919092015160ff16955090935091506000849003610cf857885160208a01208a14610a52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330323700000000000000000000000000000000000000000000000000000060448201526064016107ad565b9193508391610a62876041612b9f565b821015610acb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330323100000000000000000000000000000000000000000000000000000060448201526064016107ad565b8751610ad8836020612bdb565b1115610b40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330323200000000000000000000000000000000000000000000000000000060448201526064016107ad565b602082890181015189519091610b63908390610b5d908790612bdb565b90612bdb565b1115610bcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330323300000000000000000000000000000000000000000000000000000060448201526064016107ad565b6040517f20c13b0b000000000000000000000000000000000000000000000000000000008082528a85016020019173ffffffffffffffffffffffffffffffffffffffff8916906320c13b0b90610c27908f908690600401613daa565b602060405180830381865afa158015610c44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c689190613dcf565b7fffffffff000000000000000000000000000000000000000000000000000000001614610cf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330323400000000000000000000000000000000000000000000000000000060448201526064016107ad565b5050610eeb565b8360ff16600103610dc65791935083913373ffffffffffffffffffffffffffffffffffffffff84161480610d5b575073ffffffffffffffffffffffffffffffffffffffff851660009081526008602090815260408083208d845290915290205415155b610dc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330323500000000000000000000000000000000000000000000000000000060448201526064016107ad565b610eeb565b601e8460ff161115610e8b576040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018b9052600190605c0160405160208183030381529060405280519060200120600486610e2b9190613e11565b6040805160008152602081018083529390935260ff90911690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610e7a573d6000803e3d6000fd5b505050602060405103519450610eeb565b6040805160008152602081018083528c905260ff861691810191909152606081018490526080810183905260019060a0016020604051602081039080840390855afa158015610ede573d6000803e3d6000fd5b5050506020604051035194505b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16118015610f4c575073ffffffffffffffffffffffffffffffffffffffff8581166000908152600260205260409020541615155b8015610f6f575073ffffffffffffffffffffffffffffffffffffffff8516600114155b610fd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330323600000000000000000000000000000000000000000000000000000060448201526064016107ad565b8495508080610fe390613d72565b9150506109b2565b50505050505050505050565b6000600173ffffffffffffffffffffffffffffffffffffffff831614801590611046575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600160205260409020541615155b92915050565b600073ffffffffffffffffffffffffffffffffffffffff821660011480159061104657505073ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416151590565b6000336001148015906110d557503360009081526001602052604090205473ffffffffffffffffffffffffffffffffffffffff1615155b61113b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475331303400000000000000000000000000000000000000000000000000000060448201526064016107ad565b611168858585857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612bf7565b905080156111a05760405133907f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb890600090a26111cc565b60405133907facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37590600090a25b949350505050565b600060606111e48686868661109e565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b60606000611219836020613e34565b67ffffffffffffffff81111561123157611231613594565b6040519080825280601f01601f19166020018201604052801561125b576020820181803683370190505b50905060005b8381101561128857848101546020808302840101528061128081613d72565b915050611261565b509392505050565b611298612b34565b73ffffffffffffffffffffffffffffffffffffffff8116158015906112d4575073ffffffffffffffffffffffffffffffffffffffff8116600114155b61133a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475331303100000000000000000000000000000000000000000000000000000060448201526064016107ad565b73ffffffffffffffffffffffffffffffffffffffff81811660009081526001602052604090205416156113c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475331303200000000000000000000000000000000000000000000000000000060448201526064016107ad565b600160208190527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f805473ffffffffffffffffffffffffffffffffffffffff848116600081815260408082208054949095167fffffffffffffffffffffffff000000000000000000000000000000000000000094851617909455948552835490911681179092555190917fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844091a250565b611481612b34565b6003548111156114ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303100000000000000000000000000000000000000000000000000000060448201526064016107ad565b6001811015611558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303200000000000000000000000000000000000000000000000000000060448201526064016107ad565b60048190556040518181527f610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c939060200160405180910390a150565b60008060006115ad8e8e8e8e8e8e8e8e8e8e6005546126bc565b6005805491925060006115bf83613d72565b90915550508051602082012091506115d882828661198f565b5060006116037f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c85490565b905073ffffffffffffffffffffffffffffffffffffffff8116156116a3578073ffffffffffffffffffffffffffffffffffffffff166375f0bb528f8f8f8f8f8f8f8f8f8f8f336040518d63ffffffff1660e01b81526004016116709c9b9a99989796959493929190613edb565b600060405180830381600087803b15801561168a57600080fd5b505af115801561169e573d6000803e3d6000fd5b505050505b6116cf6116b28a6109c4613ff1565b603f6116bf8c6040613e34565b6116c99190614009565b90612c3e565b6116db906101f4613ff1565b5a1015611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330313000000000000000000000000000000000000000000000000000000060448201526064016107ad565b60005a90506117b58f8f8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e8c6000146117a2578e612bf7565b6109c45a6117b09190614044565b612bf7565b93506117c25a8290612c55565b905083806117cf57508915155b806117d957508715155b61183f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330313300000000000000000000000000000000000000000000000000000060448201526064016107ad565b6000881561185757611854828b8b8b8b612c70565b90505b841561189c57837f442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e8260405161188f91815260200190565b60405180910390a26118d7565b837f23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d23826040516118ce91815260200190565b60405180910390a25b505073ffffffffffffffffffffffffffffffffffffffff81161561197e576040517f9327136800000000000000000000000000000000000000000000000000000000815260048101839052831515602482015273ffffffffffffffffffffffffffffffffffffffff821690639327136890604401600060405180830381600087803b15801561196557600080fd5b505af1158015611979573d6000803e3d6000fd5b505050505b50509b9a5050505050505050505050565b600454806119f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330303100000000000000000000000000000000000000000000000000000060448201526064016107ad565b611a0584848484610933565b50505050565b6060600060035467ffffffffffffffff811115611a2a57611a2a613594565b604051908082528060200260200182016040528015611a53578160200160208202803683370190505b506001600090815260026020527fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0549192509073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff8116600114611b1b5780838381518110611ace57611ace61405b565b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201810191909152918116600090815260029092526040909120541681611b1381613d72565b925050611a9d565b509092915050565b600080825160208401855af480600052503d6020523d600060403e60403d016000fd5b611b848a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508c9250612e01915050565b73ffffffffffffffffffffffffffffffffffffffff841615611ba957611ba9846131ce565b611be98787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061327192505050565b8115611c0057611bfe82600060018685612c70565b505b3373ffffffffffffffffffffffffffffffffffffffff167f141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a88b8b8b8b89604051611c4e95949392919061408a565b60405180910390a250505050505050505050565b6060600073ffffffffffffffffffffffffffffffffffffffff841660011480611c8f5750611c8f84610ff7565b611cf5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475331303500000000000000000000000000000000000000000000000000000060448201526064016107ad565b60008311611d5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475331303600000000000000000000000000000000000000000000000000000060448201526064016107ad565b8267ffffffffffffffff811115611d7857611d78613594565b604051908082528060200260200182016040528015611da1578160200160208202803683370190505b5073ffffffffffffffffffffffffffffffffffffffff808616600090815260016020526040812054929450911691505b73ffffffffffffffffffffffffffffffffffffffff821615801590611e0d575073ffffffffffffffffffffffffffffffffffffffff8216600114155b8015611e1857508381105b15611e805781838281518110611e3057611e3061405b565b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201810191909152928116600090815260019093526040909220549091169080611e7881613d72565b915050611dd1565b73ffffffffffffffffffffffffffffffffffffffff8216600114611ec55782611eaa600183614044565b81518110611eba57611eba61405b565b602002602001015191505b808352509250929050565b3360009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16611f5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330333000000000000000000000000000000000000000000000000000000060448201526064016107ad565b336000818152600860209081526040808320858452909152808220600190555183917ff2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c91a350565b6000611fb98c8c8c8c8c8c8c8c8c8c8c6126bc565b8051906020012090509b9a5050505050505050505050565b611fd9612b34565b73ffffffffffffffffffffffffffffffffffffffff811615801590612015575073ffffffffffffffffffffffffffffffffffffffff8116600114155b61207b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475331303100000000000000000000000000000000000000000000000000000060448201526064016107ad565b73ffffffffffffffffffffffffffffffffffffffff82811660009081526001602052604090205481169082161461210e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475331303300000000000000000000000000000000000000000000000000000060448201526064016107ad565b73ffffffffffffffffffffffffffffffffffffffff818116600081815260016020526040808220805487861684528284208054919096167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179095558383528054909416909355915190917faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace405427691a25050565b6121ab612b34565b73ffffffffffffffffffffffffffffffffffffffff8116156122db576040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527fe6d7a83a00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff8216906301ffc9a790602401602060405180830381865afa158015612251573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122759190614110565b6122db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475333303000000000000000000000000000000000000000000000000000000060448201526064016107ad565b7f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c881815560405173ffffffffffffffffffffffffffffffffffffffff8316907f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa290600090a25050565b61234c612b34565b73ffffffffffffffffffffffffffffffffffffffff811615801590612388575073ffffffffffffffffffffffffffffffffffffffff8116600114155b80156123aa575073ffffffffffffffffffffffffffffffffffffffff81163014155b612410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303300000000000000000000000000000000000000000000000000000060448201526064016107ad565b73ffffffffffffffffffffffffffffffffffffffff818116600090815260026020526040902054161561249f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303400000000000000000000000000000000000000000000000000000060448201526064016107ad565b73ffffffffffffffffffffffffffffffffffffffff8216158015906124db575073ffffffffffffffffffffffffffffffffffffffff8216600114155b612541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303300000000000000000000000000000000000000000000000000000060448201526064016107ad565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600260205260409020548116908316146125d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303500000000000000000000000000000000000000000000000000000060448201526064016107ad565b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805486861680855283852080549288167fffffffffffffffffffffffff00000000000000000000000000000000000000009384161790559589168452828420805482169096179095558383528054909416909355915190917ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf91a260405173ffffffffffffffffffffffffffffffffffffffff8216907f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2690600090a2505050565b606060007fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d860001b8d8d8d8d6040516126f6929190614132565b60405190819003812061271c949392918e908e908e908e908e908e908e90602001614142565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012090507f19000000000000000000000000000000000000000000000000000000000000007f01000000000000000000000000000000000000000000000000000000000000006127f060007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692184660408051602081019390935282015230606082015260800160405160208183030381529060405280519060200120905090565b6040517fff0000000000000000000000000000000000000000000000000000000000000093841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529150509b9a5050505050505050505050565b61285d612b34565b612866816131ce565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b090600090a250565b6128b2612b34565b8060016003546128c29190614044565b101561292a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303100000000000000000000000000000000000000000000000000000060448201526064016107ad565b73ffffffffffffffffffffffffffffffffffffffff821615801590612966575073ffffffffffffffffffffffffffffffffffffffff8216600114155b6129cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303300000000000000000000000000000000000000000000000000000060448201526064016107ad565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020526040902054811690831614612a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303500000000000000000000000000000000000000000000000000000060448201526064016107ad565b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790945591815282549091169091556003805491612ad7836141bf565b909155505060405173ffffffffffffffffffffffffffffffffffffffff8316907ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf90600090a28060045414612b2f57612b2f81611479565b505050565b333014612b9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330333100000000000000000000000000000000000000000000000000000060448201526064016107ad565b565b600082600003612bb157506000611046565b6000612bbd8385613e34565b905082612bca8583614009565b14612bd457600080fd5b9392505050565b600080612be88385613ff1565b905083811015612bd457600080fd5b60006001836001811115612c0d57612c0d613e71565b03612c25576000808551602087018986f49050612c35565b600080855160208701888a87f190505b95945050505050565b600081831015612c4e5781612bd4565b5090919050565b600082821115612c6457600080fd5b60006111cc8385614044565b60008073ffffffffffffffffffffffffffffffffffffffff831615612c955782612c97565b325b905073ffffffffffffffffffffffffffffffffffffffff8416612d7657612cd63a8610612cc4573a612cc6565b855b612cd08989612bdb565b90612b9f565b60405190925073ffffffffffffffffffffffffffffffffffffffff82169083156108fc029084906000818181858888f19350505050612d71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330313100000000000000000000000000000000000000000000000000000060448201526064016107ad565b612df7565b612d8485612cd08989612bdb565b9150612d91848284613469565b612df7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330313200000000000000000000000000000000000000000000000000000060448201526064016107ad565b5095945050505050565b60045415612e6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303000000000000000000000000000000000000000000000000000000060448201526064016107ad565b8151811115612ed6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303100000000000000000000000000000000000000000000000000000060448201526064016107ad565b6001811015612f41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303200000000000000000000000000000000000000000000000000000060448201526064016107ad565b600160005b8351811015613176576000848281518110612f6357612f6361405b565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015612fc1575073ffffffffffffffffffffffffffffffffffffffff8116600114155b8015612fe3575073ffffffffffffffffffffffffffffffffffffffff81163014155b801561301b57508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b613081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303300000000000000000000000000000000000000000000000000000060448201526064016107ad565b73ffffffffffffffffffffffffffffffffffffffff8181166000908152600260205260409020541615613110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303400000000000000000000000000000000000000000000000000000060448201526064016107ad565b73ffffffffffffffffffffffffffffffffffffffff928316600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016938216939093179092558061316e81613d72565b915050612f46565b5073ffffffffffffffffffffffffffffffffffffffff16600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001660011790559051600355600455565b3073ffffffffffffffffffffffffffffffffffffffff82160361324d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475334303000000000000000000000000000000000000000000000000000000060448201526064016107ad565b7f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d555565b600160008190526020527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f5473ffffffffffffffffffffffffffffffffffffffff161561331a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475331303000000000000000000000000000000000000000000000000000000060448201526064016107ad565b6001600081905260208190527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f80547fffffffffffffffffffffffff000000000000000000000000000000000000000016909117905573ffffffffffffffffffffffffffffffffffffffff82161561092f57813b6133f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330303200000000000000000000000000000000000000000000000000000060448201526064016107ad565b6134038260008360015a612bf7565b61092f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330303000000000000000000000000000000000000000000000000000000060448201526064016107ad565b6040805173ffffffffffffffffffffffffffffffffffffffff841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781528251600093929184919082896127105a03f13d8015613516576020811461351e5760009350613529565b819350613529565b600051158215171593505b5050509392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461355557600080fd5b50565b803561356381613533565b919050565b6000806040838503121561357b57600080fd5b823561358681613533565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126135d457600080fd5b813567ffffffffffffffff808211156135ef576135ef613594565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561363557613635613594565b8160405283815286602085880101111561364e57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806080858703121561368457600080fd5b84359350602085013567ffffffffffffffff808211156136a357600080fd5b6136af888389016135c3565b945060408701359150808211156136c557600080fd5b506136d2878288016135c3565b949793965093946060013593505050565b6000602082840312156136f557600080fd5b8135612bd481613533565b80356002811061356357600080fd5b6000806000806080858703121561372557600080fd5b843561373081613533565b935060208501359250604085013567ffffffffffffffff81111561375357600080fd5b61375f878288016135c3565b92505061376e60608601613700565b905092959194509250565b6000815180845260005b8181101561379f57602081850181015186830182015201613783565b818111156137b1576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b82151581526040602082015260006111cc6040830184613779565b6000806040838503121561381257600080fd5b50508035926020909101359150565b602081526000612bd46020830184613779565b60006020828403121561384657600080fd5b5035919050565b60008083601f84011261385f57600080fd5b50813567ffffffffffffffff81111561387757600080fd5b60208301915083602082850101111561388f57600080fd5b9250929050565b60008060008060008060008060008060006101408c8e0312156138b857600080fd5b6138c18c613558565b9a5060208c0135995067ffffffffffffffff8060408e013511156138e457600080fd5b6138f48e60408f01358f0161384d565b909a50985061390560608e01613700565b975060808d0135965060a08d0135955060c08d0135945061392860e08e01613558565b93506139376101008e01613558565b9250806101208e0135111561394b57600080fd5b5061395d8d6101208e01358e016135c3565b90509295989b509295989b9093969950565b60008060006060848603121561398457600080fd5b83359250602084013567ffffffffffffffff808211156139a357600080fd5b6139af878388016135c3565b935060408601359150808211156139c557600080fd5b506139d2868287016135c3565b9150509250925092565b600081518084526020808501945080840160005b83811015613a2257815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016139f0565b509495945050505050565b602081526000612bd460208301846139dc565b60008060408385031215613a5357600080fd5b8235613a5e81613533565b9150602083013567ffffffffffffffff811115613a7a57600080fd5b613a86858286016135c3565b9150509250929050565b6000806000806000806000806000806101008b8d031215613ab057600080fd5b8a3567ffffffffffffffff80821115613ac857600080fd5b818d0191508d601f830112613adc57600080fd5b813581811115613aeb57600080fd5b8e60208260051b8501011115613b0057600080fd5b60208381019d50909b508d01359950613b1b60408e01613558565b985060608d0135915080821115613b3157600080fd5b50613b3e8d828e0161384d565b9097509550613b51905060808c01613558565b9350613b5f60a08c01613558565b925060c08b01359150613b7460e08c01613558565b90509295989b9194979a5092959850565b604081526000613b9860408301856139dc565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b60008060008060008060008060008060006101408c8e031215613bdf57600080fd5b8b35613bea81613533565b9a5060208c0135995060408c013567ffffffffffffffff811115613c0d57600080fd5b613c198e828f0161384d565b909a509850613c2c905060608d01613700565b965060808c0135955060a08c0135945060c08c0135935060e08c0135613c5181613533565b92506101008c0135613c6281613533565b809250506101208c013590509295989b509295989b9093969950565b60008060408385031215613c9157600080fd5b8235613c9c81613533565b91506020830135613cac81613533565b809150509250929050565b600080600060608486031215613ccc57600080fd5b8335613cd781613533565b92506020840135613ce781613533565b91506040840135613cf781613533565b809150509250925092565b600080600060608486031215613d1757600080fd5b8335613d2281613533565b92506020840135613d3281613533565b929592945050506040919091013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613da357613da3613d43565b5060010190565b604081526000613dbd6040830185613779565b8281036020840152612c358185613779565b600060208284031215613de157600080fd5b81517fffffffff0000000000000000000000000000000000000000000000000000000081168114612bd457600080fd5b600060ff821660ff841680821015613e2b57613e2b613d43565b90039392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e6c57613e6c613d43565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60028110613ed7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b600061016073ffffffffffffffffffffffffffffffffffffffff8f1683528d60208401528060408401528b81840152506101808b8d828501376000818d850101527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8d01168301613f51606085018d613ea0565b8a60808501528960a08501528860c0850152613f8560e085018973ffffffffffffffffffffffffffffffffffffffff169052565b73ffffffffffffffffffffffffffffffffffffffff87166101008501528184820301610120850152613fb982820187613779565b92505050613fe061014083018473ffffffffffffffffffffffffffffffffffffffff169052565b9d9c50505050505050505050505050565b6000821982111561400457614004613d43565b500190565b60008261403f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008282101561405657614056613d43565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6080808252810185905260008660a08301825b888110156140da5782356140b081613533565b73ffffffffffffffffffffffffffffffffffffffff1682526020928301929091019060010161409d565b506020840196909652505073ffffffffffffffffffffffffffffffffffffffff9283166040820152911660609091015292915050565b60006020828403121561412257600080fd5b81518015158114612bd457600080fd5b8183823760009101908152919050565b6000610160820190508c825273ffffffffffffffffffffffffffffffffffffffff808d1660208401528b60408401528a6060840152614184608084018b613ea0565b60a083019890985260c082019690965260e0810194909452918516610100840152909316610120820152610140019190915295945050505050565b6000816141ce576141ce613d43565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(SafeStorageLayoutJSON), SafeStorageLayout); err != nil { + panic(err) + } + + layouts["Safe"] = SafeStorageLayout + deployedBytecodes["Safe"] = SafeDeployedBin +} diff --git a/op-bindings/bindings/safeproxyfactory.go b/op-bindings/bindings/safeproxyfactory.go new file mode 100644 index 000000000..98f132db2 --- /dev/null +++ b/op-bindings/bindings/safeproxyfactory.go @@ -0,0 +1,472 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// SafeProxyFactoryMetaData contains all meta data concerning the SafeProxyFactory contract. +var SafeProxyFactoryMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contractSafeProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"singleton\",\"type\":\"address\"}],\"name\":\"ProxyCreation\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_singleton\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"saltNonce\",\"type\":\"uint256\"}],\"name\":\"createChainSpecificProxyWithNonce\",\"outputs\":[{\"internalType\":\"contractSafeProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_singleton\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"saltNonce\",\"type\":\"uint256\"},{\"internalType\":\"contractIProxyCreationCallback\",\"name\":\"callback\",\"type\":\"address\"}],\"name\":\"createProxyWithCallback\",\"outputs\":[{\"internalType\":\"contractSafeProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_singleton\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"saltNonce\",\"type\":\"uint256\"}],\"name\":\"createProxyWithNonce\",\"outputs\":[{\"internalType\":\"contractSafeProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getChainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxyCreationCode\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b50610913806100206000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c806353e5d9351161005057806353e5d935146100b7578063d18af54d146100cc578063ec9e80bb146100df57600080fd5b80631688f0b91461006c5780633408e470146100a9575b600080fd5b61007f61007a3660046105d2565b6100f2565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6040514681526020016100a0565b6100bf610194565b6040516100a091906106a5565b61007f6100da3660046106bf565b6101dc565b61007f6100ed3660046105d2565b6102f8565b600080838051906020012083604051602001610118929190918252602082015260400190565b60405160208183030381529060405280519060200120905061013b85858361032a565b60405173ffffffffffffffffffffffffffffffffffffffff8781168252919350908316907f4f51faf6c4561ff95f067657e43439f0f856d97c04d9ec9070a6199ad418e2359060200160405180910390a2509392505050565b6060604051806020016101a6906104c6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f90910116604052919050565b600080838360405160200161022092919091825260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602082015260340190565b6040516020818303038152906040528051906020012060001c90506102468686836100f2565b915073ffffffffffffffffffffffffffffffffffffffff8316156102ef576040517f1e52b51800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690631e52b518906102bc9085908a908a908a9060040161072b565b600060405180830381600087803b1580156102d657600080fd5b505af11580156102ea573d6000803e3d6000fd5b505050505b50949350505050565b60008083805190602001208361030b4690565b6040805160208101949094528301919091526060820152608001610118565b6000833b610399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53696e676c65746f6e20636f6e7472616374206e6f74206465706c6f7965640060448201526064015b60405180910390fd5b6000604051806020016103ab906104c6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f909101166040819052610403919073ffffffffffffffffffffffffffffffffffffffff881690602001610775565b6040516020818303038152906040529050828151826020016000f5915073ffffffffffffffffffffffffffffffffffffffff821661049d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f437265617465322063616c6c206661696c6564000000000000000000000000006044820152606401610390565b8351156104be5760008060008651602088016000875af1036104be57600080fd5b509392505050565b61016f8061079883390190565b73ffffffffffffffffffffffffffffffffffffffff811681146104f557600080fd5b50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261053857600080fd5b813567ffffffffffffffff80821115610553576105536104f8565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610599576105996104f8565b816040528381528660208588010111156105b257600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156105e757600080fd5b83356105f2816104d3565b9250602084013567ffffffffffffffff81111561060e57600080fd5b61061a86828701610527565b925050604084013590509250925092565b60005b8381101561064657818101518382015260200161062e565b83811115610655576000848401525b50505050565b6000815180845261067381602086016020860161062b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106b8602083018461065b565b9392505050565b600080600080608085870312156106d557600080fd5b84356106e0816104d3565b9350602085013567ffffffffffffffff8111156106fc57600080fd5b61070887828801610527565b935050604085013591506060850135610720816104d3565b939692955090935050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152610764608083018561065b565b905082606083015295945050505050565b6000835161078781846020880161062b565b919091019182525060200191905056fe608060405234801561001057600080fd5b5060405161016f38038061016f83398101604081905261002f916100b9565b6001600160a01b0381166100945760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642073696e676c65746f6e20616464726573732070726f766964604482015261195960f21b606482015260840160405180910390fd5b600080546001600160a01b0319166001600160a01b03929092169190911790556100e9565b6000602082840312156100cb57600080fd5b81516001600160a01b03811681146100e257600080fd5b9392505050565b6078806100f76000396000f3fe6080604052600073ffffffffffffffffffffffffffffffffffffffff8154167fa619486e00000000000000000000000000000000000000000000000000000000823503604d57808252602082f35b3682833781823684845af490503d82833e806066573d82fd5b503d81f3fea164736f6c634300080f000aa164736f6c634300080f000a", +} + +// SafeProxyFactoryABI is the input ABI used to generate the binding from. +// Deprecated: Use SafeProxyFactoryMetaData.ABI instead. +var SafeProxyFactoryABI = SafeProxyFactoryMetaData.ABI + +// SafeProxyFactoryBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use SafeProxyFactoryMetaData.Bin instead. +var SafeProxyFactoryBin = SafeProxyFactoryMetaData.Bin + +// DeploySafeProxyFactory deploys a new Ethereum contract, binding an instance of SafeProxyFactory to it. +func DeploySafeProxyFactory(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *SafeProxyFactory, error) { + parsed, err := SafeProxyFactoryMetaData.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(SafeProxyFactoryBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &SafeProxyFactory{SafeProxyFactoryCaller: SafeProxyFactoryCaller{contract: contract}, SafeProxyFactoryTransactor: SafeProxyFactoryTransactor{contract: contract}, SafeProxyFactoryFilterer: SafeProxyFactoryFilterer{contract: contract}}, nil +} + +// SafeProxyFactory is an auto generated Go binding around an Ethereum contract. +type SafeProxyFactory struct { + SafeProxyFactoryCaller // Read-only binding to the contract + SafeProxyFactoryTransactor // Write-only binding to the contract + SafeProxyFactoryFilterer // Log filterer for contract events +} + +// SafeProxyFactoryCaller is an auto generated read-only Go binding around an Ethereum contract. +type SafeProxyFactoryCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SafeProxyFactoryTransactor is an auto generated write-only Go binding around an Ethereum contract. +type SafeProxyFactoryTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SafeProxyFactoryFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type SafeProxyFactoryFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SafeProxyFactorySession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type SafeProxyFactorySession struct { + Contract *SafeProxyFactory // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SafeProxyFactoryCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type SafeProxyFactoryCallerSession struct { + Contract *SafeProxyFactoryCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// SafeProxyFactoryTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type SafeProxyFactoryTransactorSession struct { + Contract *SafeProxyFactoryTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SafeProxyFactoryRaw is an auto generated low-level Go binding around an Ethereum contract. +type SafeProxyFactoryRaw struct { + Contract *SafeProxyFactory // Generic contract binding to access the raw methods on +} + +// SafeProxyFactoryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type SafeProxyFactoryCallerRaw struct { + Contract *SafeProxyFactoryCaller // Generic read-only contract binding to access the raw methods on +} + +// SafeProxyFactoryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type SafeProxyFactoryTransactorRaw struct { + Contract *SafeProxyFactoryTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewSafeProxyFactory creates a new instance of SafeProxyFactory, bound to a specific deployed contract. +func NewSafeProxyFactory(address common.Address, backend bind.ContractBackend) (*SafeProxyFactory, error) { + contract, err := bindSafeProxyFactory(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &SafeProxyFactory{SafeProxyFactoryCaller: SafeProxyFactoryCaller{contract: contract}, SafeProxyFactoryTransactor: SafeProxyFactoryTransactor{contract: contract}, SafeProxyFactoryFilterer: SafeProxyFactoryFilterer{contract: contract}}, nil +} + +// NewSafeProxyFactoryCaller creates a new read-only instance of SafeProxyFactory, bound to a specific deployed contract. +func NewSafeProxyFactoryCaller(address common.Address, caller bind.ContractCaller) (*SafeProxyFactoryCaller, error) { + contract, err := bindSafeProxyFactory(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &SafeProxyFactoryCaller{contract: contract}, nil +} + +// NewSafeProxyFactoryTransactor creates a new write-only instance of SafeProxyFactory, bound to a specific deployed contract. +func NewSafeProxyFactoryTransactor(address common.Address, transactor bind.ContractTransactor) (*SafeProxyFactoryTransactor, error) { + contract, err := bindSafeProxyFactory(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &SafeProxyFactoryTransactor{contract: contract}, nil +} + +// NewSafeProxyFactoryFilterer creates a new log filterer instance of SafeProxyFactory, bound to a specific deployed contract. +func NewSafeProxyFactoryFilterer(address common.Address, filterer bind.ContractFilterer) (*SafeProxyFactoryFilterer, error) { + contract, err := bindSafeProxyFactory(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &SafeProxyFactoryFilterer{contract: contract}, nil +} + +// bindSafeProxyFactory binds a generic wrapper to an already deployed contract. +func bindSafeProxyFactory(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(SafeProxyFactoryABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_SafeProxyFactory *SafeProxyFactoryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SafeProxyFactory.Contract.SafeProxyFactoryCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_SafeProxyFactory *SafeProxyFactoryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SafeProxyFactory.Contract.SafeProxyFactoryTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SafeProxyFactory *SafeProxyFactoryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SafeProxyFactory.Contract.SafeProxyFactoryTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_SafeProxyFactory *SafeProxyFactoryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SafeProxyFactory.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_SafeProxyFactory *SafeProxyFactoryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SafeProxyFactory.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SafeProxyFactory *SafeProxyFactoryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SafeProxyFactory.Contract.contract.Transact(opts, method, params...) +} + +// GetChainId is a free data retrieval call binding the contract method 0x3408e470. +// +// Solidity: function getChainId() view returns(uint256) +func (_SafeProxyFactory *SafeProxyFactoryCaller) GetChainId(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _SafeProxyFactory.contract.Call(opts, &out, "getChainId") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetChainId is a free data retrieval call binding the contract method 0x3408e470. +// +// Solidity: function getChainId() view returns(uint256) +func (_SafeProxyFactory *SafeProxyFactorySession) GetChainId() (*big.Int, error) { + return _SafeProxyFactory.Contract.GetChainId(&_SafeProxyFactory.CallOpts) +} + +// GetChainId is a free data retrieval call binding the contract method 0x3408e470. +// +// Solidity: function getChainId() view returns(uint256) +func (_SafeProxyFactory *SafeProxyFactoryCallerSession) GetChainId() (*big.Int, error) { + return _SafeProxyFactory.Contract.GetChainId(&_SafeProxyFactory.CallOpts) +} + +// ProxyCreationCode is a free data retrieval call binding the contract method 0x53e5d935. +// +// Solidity: function proxyCreationCode() pure returns(bytes) +func (_SafeProxyFactory *SafeProxyFactoryCaller) ProxyCreationCode(opts *bind.CallOpts) ([]byte, error) { + var out []interface{} + err := _SafeProxyFactory.contract.Call(opts, &out, "proxyCreationCode") + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// ProxyCreationCode is a free data retrieval call binding the contract method 0x53e5d935. +// +// Solidity: function proxyCreationCode() pure returns(bytes) +func (_SafeProxyFactory *SafeProxyFactorySession) ProxyCreationCode() ([]byte, error) { + return _SafeProxyFactory.Contract.ProxyCreationCode(&_SafeProxyFactory.CallOpts) +} + +// ProxyCreationCode is a free data retrieval call binding the contract method 0x53e5d935. +// +// Solidity: function proxyCreationCode() pure returns(bytes) +func (_SafeProxyFactory *SafeProxyFactoryCallerSession) ProxyCreationCode() ([]byte, error) { + return _SafeProxyFactory.Contract.ProxyCreationCode(&_SafeProxyFactory.CallOpts) +} + +// CreateChainSpecificProxyWithNonce is a paid mutator transaction binding the contract method 0xec9e80bb. +// +// Solidity: function createChainSpecificProxyWithNonce(address _singleton, bytes initializer, uint256 saltNonce) returns(address proxy) +func (_SafeProxyFactory *SafeProxyFactoryTransactor) CreateChainSpecificProxyWithNonce(opts *bind.TransactOpts, _singleton common.Address, initializer []byte, saltNonce *big.Int) (*types.Transaction, error) { + return _SafeProxyFactory.contract.Transact(opts, "createChainSpecificProxyWithNonce", _singleton, initializer, saltNonce) +} + +// CreateChainSpecificProxyWithNonce is a paid mutator transaction binding the contract method 0xec9e80bb. +// +// Solidity: function createChainSpecificProxyWithNonce(address _singleton, bytes initializer, uint256 saltNonce) returns(address proxy) +func (_SafeProxyFactory *SafeProxyFactorySession) CreateChainSpecificProxyWithNonce(_singleton common.Address, initializer []byte, saltNonce *big.Int) (*types.Transaction, error) { + return _SafeProxyFactory.Contract.CreateChainSpecificProxyWithNonce(&_SafeProxyFactory.TransactOpts, _singleton, initializer, saltNonce) +} + +// CreateChainSpecificProxyWithNonce is a paid mutator transaction binding the contract method 0xec9e80bb. +// +// Solidity: function createChainSpecificProxyWithNonce(address _singleton, bytes initializer, uint256 saltNonce) returns(address proxy) +func (_SafeProxyFactory *SafeProxyFactoryTransactorSession) CreateChainSpecificProxyWithNonce(_singleton common.Address, initializer []byte, saltNonce *big.Int) (*types.Transaction, error) { + return _SafeProxyFactory.Contract.CreateChainSpecificProxyWithNonce(&_SafeProxyFactory.TransactOpts, _singleton, initializer, saltNonce) +} + +// CreateProxyWithCallback is a paid mutator transaction binding the contract method 0xd18af54d. +// +// Solidity: function createProxyWithCallback(address _singleton, bytes initializer, uint256 saltNonce, address callback) returns(address proxy) +func (_SafeProxyFactory *SafeProxyFactoryTransactor) CreateProxyWithCallback(opts *bind.TransactOpts, _singleton common.Address, initializer []byte, saltNonce *big.Int, callback common.Address) (*types.Transaction, error) { + return _SafeProxyFactory.contract.Transact(opts, "createProxyWithCallback", _singleton, initializer, saltNonce, callback) +} + +// CreateProxyWithCallback is a paid mutator transaction binding the contract method 0xd18af54d. +// +// Solidity: function createProxyWithCallback(address _singleton, bytes initializer, uint256 saltNonce, address callback) returns(address proxy) +func (_SafeProxyFactory *SafeProxyFactorySession) CreateProxyWithCallback(_singleton common.Address, initializer []byte, saltNonce *big.Int, callback common.Address) (*types.Transaction, error) { + return _SafeProxyFactory.Contract.CreateProxyWithCallback(&_SafeProxyFactory.TransactOpts, _singleton, initializer, saltNonce, callback) +} + +// CreateProxyWithCallback is a paid mutator transaction binding the contract method 0xd18af54d. +// +// Solidity: function createProxyWithCallback(address _singleton, bytes initializer, uint256 saltNonce, address callback) returns(address proxy) +func (_SafeProxyFactory *SafeProxyFactoryTransactorSession) CreateProxyWithCallback(_singleton common.Address, initializer []byte, saltNonce *big.Int, callback common.Address) (*types.Transaction, error) { + return _SafeProxyFactory.Contract.CreateProxyWithCallback(&_SafeProxyFactory.TransactOpts, _singleton, initializer, saltNonce, callback) +} + +// CreateProxyWithNonce is a paid mutator transaction binding the contract method 0x1688f0b9. +// +// Solidity: function createProxyWithNonce(address _singleton, bytes initializer, uint256 saltNonce) returns(address proxy) +func (_SafeProxyFactory *SafeProxyFactoryTransactor) CreateProxyWithNonce(opts *bind.TransactOpts, _singleton common.Address, initializer []byte, saltNonce *big.Int) (*types.Transaction, error) { + return _SafeProxyFactory.contract.Transact(opts, "createProxyWithNonce", _singleton, initializer, saltNonce) +} + +// CreateProxyWithNonce is a paid mutator transaction binding the contract method 0x1688f0b9. +// +// Solidity: function createProxyWithNonce(address _singleton, bytes initializer, uint256 saltNonce) returns(address proxy) +func (_SafeProxyFactory *SafeProxyFactorySession) CreateProxyWithNonce(_singleton common.Address, initializer []byte, saltNonce *big.Int) (*types.Transaction, error) { + return _SafeProxyFactory.Contract.CreateProxyWithNonce(&_SafeProxyFactory.TransactOpts, _singleton, initializer, saltNonce) +} + +// CreateProxyWithNonce is a paid mutator transaction binding the contract method 0x1688f0b9. +// +// Solidity: function createProxyWithNonce(address _singleton, bytes initializer, uint256 saltNonce) returns(address proxy) +func (_SafeProxyFactory *SafeProxyFactoryTransactorSession) CreateProxyWithNonce(_singleton common.Address, initializer []byte, saltNonce *big.Int) (*types.Transaction, error) { + return _SafeProxyFactory.Contract.CreateProxyWithNonce(&_SafeProxyFactory.TransactOpts, _singleton, initializer, saltNonce) +} + +// SafeProxyFactoryProxyCreationIterator is returned from FilterProxyCreation and is used to iterate over the raw logs and unpacked data for ProxyCreation events raised by the SafeProxyFactory contract. +type SafeProxyFactoryProxyCreationIterator struct { + Event *SafeProxyFactoryProxyCreation // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *SafeProxyFactoryProxyCreationIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(SafeProxyFactoryProxyCreation) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(SafeProxyFactoryProxyCreation) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *SafeProxyFactoryProxyCreationIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SafeProxyFactoryProxyCreationIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SafeProxyFactoryProxyCreation represents a ProxyCreation event raised by the SafeProxyFactory contract. +type SafeProxyFactoryProxyCreation struct { + Proxy common.Address + Singleton common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterProxyCreation is a free log retrieval operation binding the contract event 0x4f51faf6c4561ff95f067657e43439f0f856d97c04d9ec9070a6199ad418e235. +// +// Solidity: event ProxyCreation(address indexed proxy, address singleton) +func (_SafeProxyFactory *SafeProxyFactoryFilterer) FilterProxyCreation(opts *bind.FilterOpts, proxy []common.Address) (*SafeProxyFactoryProxyCreationIterator, error) { + + var proxyRule []interface{} + for _, proxyItem := range proxy { + proxyRule = append(proxyRule, proxyItem) + } + + logs, sub, err := _SafeProxyFactory.contract.FilterLogs(opts, "ProxyCreation", proxyRule) + if err != nil { + return nil, err + } + return &SafeProxyFactoryProxyCreationIterator{contract: _SafeProxyFactory.contract, event: "ProxyCreation", logs: logs, sub: sub}, nil +} + +// WatchProxyCreation is a free log subscription operation binding the contract event 0x4f51faf6c4561ff95f067657e43439f0f856d97c04d9ec9070a6199ad418e235. +// +// Solidity: event ProxyCreation(address indexed proxy, address singleton) +func (_SafeProxyFactory *SafeProxyFactoryFilterer) WatchProxyCreation(opts *bind.WatchOpts, sink chan<- *SafeProxyFactoryProxyCreation, proxy []common.Address) (event.Subscription, error) { + + var proxyRule []interface{} + for _, proxyItem := range proxy { + proxyRule = append(proxyRule, proxyItem) + } + + logs, sub, err := _SafeProxyFactory.contract.WatchLogs(opts, "ProxyCreation", proxyRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(SafeProxyFactoryProxyCreation) + if err := _SafeProxyFactory.contract.UnpackLog(event, "ProxyCreation", 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 +} + +// ParseProxyCreation is a log parse operation binding the contract event 0x4f51faf6c4561ff95f067657e43439f0f856d97c04d9ec9070a6199ad418e235. +// +// Solidity: event ProxyCreation(address indexed proxy, address singleton) +func (_SafeProxyFactory *SafeProxyFactoryFilterer) ParseProxyCreation(log types.Log) (*SafeProxyFactoryProxyCreation, error) { + event := new(SafeProxyFactoryProxyCreation) + if err := _SafeProxyFactory.contract.UnpackLog(event, "ProxyCreation", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-bindings/bindings/safeproxyfactory_more.go b/op-bindings/bindings/safeproxyfactory_more.go new file mode 100644 index 000000000..dbc455aa9 --- /dev/null +++ b/op-bindings/bindings/safeproxyfactory_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const SafeProxyFactoryStorageLayoutJSON = "{\"storage\":null,\"types\":{}}" + +var SafeProxyFactoryStorageLayout = new(solc.StorageLayout) + +var SafeProxyFactoryDeployedBin = "0x608060405234801561001057600080fd5b50600436106100675760003560e01c806353e5d9351161005057806353e5d935146100b7578063d18af54d146100cc578063ec9e80bb146100df57600080fd5b80631688f0b91461006c5780633408e470146100a9575b600080fd5b61007f61007a3660046105d2565b6100f2565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6040514681526020016100a0565b6100bf610194565b6040516100a091906106a5565b61007f6100da3660046106bf565b6101dc565b61007f6100ed3660046105d2565b6102f8565b600080838051906020012083604051602001610118929190918252602082015260400190565b60405160208183030381529060405280519060200120905061013b85858361032a565b60405173ffffffffffffffffffffffffffffffffffffffff8781168252919350908316907f4f51faf6c4561ff95f067657e43439f0f856d97c04d9ec9070a6199ad418e2359060200160405180910390a2509392505050565b6060604051806020016101a6906104c6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f90910116604052919050565b600080838360405160200161022092919091825260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602082015260340190565b6040516020818303038152906040528051906020012060001c90506102468686836100f2565b915073ffffffffffffffffffffffffffffffffffffffff8316156102ef576040517f1e52b51800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690631e52b518906102bc9085908a908a908a9060040161072b565b600060405180830381600087803b1580156102d657600080fd5b505af11580156102ea573d6000803e3d6000fd5b505050505b50949350505050565b60008083805190602001208361030b4690565b6040805160208101949094528301919091526060820152608001610118565b6000833b610399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53696e676c65746f6e20636f6e7472616374206e6f74206465706c6f7965640060448201526064015b60405180910390fd5b6000604051806020016103ab906104c6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f909101166040819052610403919073ffffffffffffffffffffffffffffffffffffffff881690602001610775565b6040516020818303038152906040529050828151826020016000f5915073ffffffffffffffffffffffffffffffffffffffff821661049d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f437265617465322063616c6c206661696c6564000000000000000000000000006044820152606401610390565b8351156104be5760008060008651602088016000875af1036104be57600080fd5b509392505050565b61016f8061079883390190565b73ffffffffffffffffffffffffffffffffffffffff811681146104f557600080fd5b50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261053857600080fd5b813567ffffffffffffffff80821115610553576105536104f8565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610599576105996104f8565b816040528381528660208588010111156105b257600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156105e757600080fd5b83356105f2816104d3565b9250602084013567ffffffffffffffff81111561060e57600080fd5b61061a86828701610527565b925050604084013590509250925092565b60005b8381101561064657818101518382015260200161062e565b83811115610655576000848401525b50505050565b6000815180845261067381602086016020860161062b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106b8602083018461065b565b9392505050565b600080600080608085870312156106d557600080fd5b84356106e0816104d3565b9350602085013567ffffffffffffffff8111156106fc57600080fd5b61070887828801610527565b935050604085013591506060850135610720816104d3565b939692955090935050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152610764608083018561065b565b905082606083015295945050505050565b6000835161078781846020880161062b565b919091019182525060200191905056fe608060405234801561001057600080fd5b5060405161016f38038061016f83398101604081905261002f916100b9565b6001600160a01b0381166100945760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642073696e676c65746f6e20616464726573732070726f766964604482015261195960f21b606482015260840160405180910390fd5b600080546001600160a01b0319166001600160a01b03929092169190911790556100e9565b6000602082840312156100cb57600080fd5b81516001600160a01b03811681146100e257600080fd5b9392505050565b6078806100f76000396000f3fe6080604052600073ffffffffffffffffffffffffffffffffffffffff8154167fa619486e00000000000000000000000000000000000000000000000000000000823503604d57808252602082f35b3682833781823684845af490503d82833e806066573d82fd5b503d81f3fea164736f6c634300080f000aa164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(SafeProxyFactoryStorageLayoutJSON), SafeProxyFactoryStorageLayout); err != nil { + panic(err) + } + + layouts["SafeProxyFactory"] = SafeProxyFactoryStorageLayout + deployedBytecodes["SafeProxyFactory"] = SafeProxyFactoryDeployedBin +} diff --git a/op-bindings/bindings/schemaregistry.go b/op-bindings/bindings/schemaregistry.go new file mode 100644 index 000000000..984bcf2c5 --- /dev/null +++ b/op-bindings/bindings/schemaregistry.go @@ -0,0 +1,447 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// SchemaRecord is an auto generated low-level Go binding around an user-defined struct. +type SchemaRecord struct { + Uid [32]byte + Resolver common.Address + Revocable bool + Schema string +} + +// SchemaRegistryMetaData contains all meta data concerning the SchemaRegistry contract. +var SchemaRegistryMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"name\":\"AlreadyExists\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"uid\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"registerer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"uid\",\"type\":\"bytes32\"},{\"internalType\":\"contractISchemaResolver\",\"name\":\"resolver\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"revocable\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"schema\",\"type\":\"string\"}],\"indexed\":false,\"internalType\":\"structSchemaRecord\",\"name\":\"schema\",\"type\":\"tuple\"}],\"name\":\"Registered\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uid\",\"type\":\"bytes32\"}],\"name\":\"getSchema\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"uid\",\"type\":\"bytes32\"},{\"internalType\":\"contractISchemaResolver\",\"name\":\"resolver\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"revocable\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"schema\",\"type\":\"string\"}],\"internalType\":\"structSchemaRecord\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"schema\",\"type\":\"string\"},{\"internalType\":\"contractISchemaResolver\",\"name\":\"resolver\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"revocable\",\"type\":\"bool\"}],\"name\":\"register\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b506107fe806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610098578063a2ea7c6e146100b9575b600080fd5b6100826040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b60405161008f9190610473565b60405180910390f35b6100ab6100a636600461048d565b6100d9565b60405190815260200161008f565b6100cc6100c736600461053f565b61029d565b60405161008f9190610558565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250929350915061015b9050826103c5565b600081815260208190526040902054909150156101a4576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102409082610682565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e8460405161028b9190610558565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff1615159282019290925260028201805491929160608401919061033c906105e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610368906105e0565b80156103b55780601f1061038a576101008083540402835291602001916103b5565b820191906000526020600020905b81548152906001019060200180831161039857829003601f168201915b5050505050815250509050919050565b60008160600151826020015183604001516040516020016103e89392919061079c565b604051602081830303815290604052805190602001209050919050565b60005b83811015610420578181015183820152602001610408565b50506000910152565b60008151808452610441816020860160208601610405565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006104866020830184610429565b9392505050565b600080600080606085870312156104a357600080fd5b843567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b6020928301965094505085013573ffffffffffffffffffffffffffffffffffffffff8116811461051f57600080fd5b91506040850135801515811461053457600080fd5b939692955090935050565b60006020828403121561055157600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526105a960a0840182610429565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c908216806105f457607f821691505b60208210810361062d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561067d57600081815260208120601f850160051c8101602086101561065a5750805b601f850160051c820191505b8181101561067957828155600101610666565b5050505b505050565b815167ffffffffffffffff81111561069c5761069c6105b1565b6106b0816106aa84546105e0565b84610633565b602080601f83116001811461070357600084156106cd5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610679565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561075057888601518255948401946001909101908401610731565b508582101561078c57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600084516107ae818460208901610405565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c6343000813000a", +} + +// SchemaRegistryABI is the input ABI used to generate the binding from. +// Deprecated: Use SchemaRegistryMetaData.ABI instead. +var SchemaRegistryABI = SchemaRegistryMetaData.ABI + +// SchemaRegistryBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use SchemaRegistryMetaData.Bin instead. +var SchemaRegistryBin = SchemaRegistryMetaData.Bin + +// DeploySchemaRegistry deploys a new Ethereum contract, binding an instance of SchemaRegistry to it. +func DeploySchemaRegistry(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *SchemaRegistry, error) { + parsed, err := SchemaRegistryMetaData.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(SchemaRegistryBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &SchemaRegistry{SchemaRegistryCaller: SchemaRegistryCaller{contract: contract}, SchemaRegistryTransactor: SchemaRegistryTransactor{contract: contract}, SchemaRegistryFilterer: SchemaRegistryFilterer{contract: contract}}, nil +} + +// SchemaRegistry is an auto generated Go binding around an Ethereum contract. +type SchemaRegistry struct { + SchemaRegistryCaller // Read-only binding to the contract + SchemaRegistryTransactor // Write-only binding to the contract + SchemaRegistryFilterer // Log filterer for contract events +} + +// SchemaRegistryCaller is an auto generated read-only Go binding around an Ethereum contract. +type SchemaRegistryCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SchemaRegistryTransactor is an auto generated write-only Go binding around an Ethereum contract. +type SchemaRegistryTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SchemaRegistryFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type SchemaRegistryFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SchemaRegistrySession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type SchemaRegistrySession struct { + Contract *SchemaRegistry // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SchemaRegistryCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type SchemaRegistryCallerSession struct { + Contract *SchemaRegistryCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// SchemaRegistryTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type SchemaRegistryTransactorSession struct { + Contract *SchemaRegistryTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SchemaRegistryRaw is an auto generated low-level Go binding around an Ethereum contract. +type SchemaRegistryRaw struct { + Contract *SchemaRegistry // Generic contract binding to access the raw methods on +} + +// SchemaRegistryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type SchemaRegistryCallerRaw struct { + Contract *SchemaRegistryCaller // Generic read-only contract binding to access the raw methods on +} + +// SchemaRegistryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type SchemaRegistryTransactorRaw struct { + Contract *SchemaRegistryTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewSchemaRegistry creates a new instance of SchemaRegistry, bound to a specific deployed contract. +func NewSchemaRegistry(address common.Address, backend bind.ContractBackend) (*SchemaRegistry, error) { + contract, err := bindSchemaRegistry(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &SchemaRegistry{SchemaRegistryCaller: SchemaRegistryCaller{contract: contract}, SchemaRegistryTransactor: SchemaRegistryTransactor{contract: contract}, SchemaRegistryFilterer: SchemaRegistryFilterer{contract: contract}}, nil +} + +// NewSchemaRegistryCaller creates a new read-only instance of SchemaRegistry, bound to a specific deployed contract. +func NewSchemaRegistryCaller(address common.Address, caller bind.ContractCaller) (*SchemaRegistryCaller, error) { + contract, err := bindSchemaRegistry(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &SchemaRegistryCaller{contract: contract}, nil +} + +// NewSchemaRegistryTransactor creates a new write-only instance of SchemaRegistry, bound to a specific deployed contract. +func NewSchemaRegistryTransactor(address common.Address, transactor bind.ContractTransactor) (*SchemaRegistryTransactor, error) { + contract, err := bindSchemaRegistry(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &SchemaRegistryTransactor{contract: contract}, nil +} + +// NewSchemaRegistryFilterer creates a new log filterer instance of SchemaRegistry, bound to a specific deployed contract. +func NewSchemaRegistryFilterer(address common.Address, filterer bind.ContractFilterer) (*SchemaRegistryFilterer, error) { + contract, err := bindSchemaRegistry(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &SchemaRegistryFilterer{contract: contract}, nil +} + +// bindSchemaRegistry binds a generic wrapper to an already deployed contract. +func bindSchemaRegistry(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(SchemaRegistryABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_SchemaRegistry *SchemaRegistryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SchemaRegistry.Contract.SchemaRegistryCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_SchemaRegistry *SchemaRegistryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SchemaRegistry.Contract.SchemaRegistryTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SchemaRegistry *SchemaRegistryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SchemaRegistry.Contract.SchemaRegistryTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_SchemaRegistry *SchemaRegistryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SchemaRegistry.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_SchemaRegistry *SchemaRegistryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SchemaRegistry.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SchemaRegistry *SchemaRegistryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SchemaRegistry.Contract.contract.Transact(opts, method, params...) +} + +// GetSchema is a free data retrieval call binding the contract method 0xa2ea7c6e. +// +// Solidity: function getSchema(bytes32 uid) view returns((bytes32,address,bool,string)) +func (_SchemaRegistry *SchemaRegistryCaller) GetSchema(opts *bind.CallOpts, uid [32]byte) (SchemaRecord, error) { + var out []interface{} + err := _SchemaRegistry.contract.Call(opts, &out, "getSchema", uid) + + if err != nil { + return *new(SchemaRecord), err + } + + out0 := *abi.ConvertType(out[0], new(SchemaRecord)).(*SchemaRecord) + + return out0, err + +} + +// GetSchema is a free data retrieval call binding the contract method 0xa2ea7c6e. +// +// Solidity: function getSchema(bytes32 uid) view returns((bytes32,address,bool,string)) +func (_SchemaRegistry *SchemaRegistrySession) GetSchema(uid [32]byte) (SchemaRecord, error) { + return _SchemaRegistry.Contract.GetSchema(&_SchemaRegistry.CallOpts, uid) +} + +// GetSchema is a free data retrieval call binding the contract method 0xa2ea7c6e. +// +// Solidity: function getSchema(bytes32 uid) view returns((bytes32,address,bool,string)) +func (_SchemaRegistry *SchemaRegistryCallerSession) GetSchema(uid [32]byte) (SchemaRecord, error) { + return _SchemaRegistry.Contract.GetSchema(&_SchemaRegistry.CallOpts, uid) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_SchemaRegistry *SchemaRegistryCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _SchemaRegistry.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_SchemaRegistry *SchemaRegistrySession) Version() (string, error) { + return _SchemaRegistry.Contract.Version(&_SchemaRegistry.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_SchemaRegistry *SchemaRegistryCallerSession) Version() (string, error) { + return _SchemaRegistry.Contract.Version(&_SchemaRegistry.CallOpts) +} + +// Register is a paid mutator transaction binding the contract method 0x60d7a278. +// +// Solidity: function register(string schema, address resolver, bool revocable) returns(bytes32) +func (_SchemaRegistry *SchemaRegistryTransactor) Register(opts *bind.TransactOpts, schema string, resolver common.Address, revocable bool) (*types.Transaction, error) { + return _SchemaRegistry.contract.Transact(opts, "register", schema, resolver, revocable) +} + +// Register is a paid mutator transaction binding the contract method 0x60d7a278. +// +// Solidity: function register(string schema, address resolver, bool revocable) returns(bytes32) +func (_SchemaRegistry *SchemaRegistrySession) Register(schema string, resolver common.Address, revocable bool) (*types.Transaction, error) { + return _SchemaRegistry.Contract.Register(&_SchemaRegistry.TransactOpts, schema, resolver, revocable) +} + +// Register is a paid mutator transaction binding the contract method 0x60d7a278. +// +// Solidity: function register(string schema, address resolver, bool revocable) returns(bytes32) +func (_SchemaRegistry *SchemaRegistryTransactorSession) Register(schema string, resolver common.Address, revocable bool) (*types.Transaction, error) { + return _SchemaRegistry.Contract.Register(&_SchemaRegistry.TransactOpts, schema, resolver, revocable) +} + +// SchemaRegistryRegisteredIterator is returned from FilterRegistered and is used to iterate over the raw logs and unpacked data for Registered events raised by the SchemaRegistry contract. +type SchemaRegistryRegisteredIterator struct { + Event *SchemaRegistryRegistered // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *SchemaRegistryRegisteredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(SchemaRegistryRegistered) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(SchemaRegistryRegistered) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *SchemaRegistryRegisteredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SchemaRegistryRegisteredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SchemaRegistryRegistered represents a Registered event raised by the SchemaRegistry contract. +type SchemaRegistryRegistered struct { + Uid [32]byte + Registerer common.Address + Schema SchemaRecord + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRegistered is a free log retrieval operation binding the contract event 0xd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e. +// +// Solidity: event Registered(bytes32 indexed uid, address indexed registerer, (bytes32,address,bool,string) schema) +func (_SchemaRegistry *SchemaRegistryFilterer) FilterRegistered(opts *bind.FilterOpts, uid [][32]byte, registerer []common.Address) (*SchemaRegistryRegisteredIterator, error) { + + var uidRule []interface{} + for _, uidItem := range uid { + uidRule = append(uidRule, uidItem) + } + var registererRule []interface{} + for _, registererItem := range registerer { + registererRule = append(registererRule, registererItem) + } + + logs, sub, err := _SchemaRegistry.contract.FilterLogs(opts, "Registered", uidRule, registererRule) + if err != nil { + return nil, err + } + return &SchemaRegistryRegisteredIterator{contract: _SchemaRegistry.contract, event: "Registered", logs: logs, sub: sub}, nil +} + +// WatchRegistered is a free log subscription operation binding the contract event 0xd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e. +// +// Solidity: event Registered(bytes32 indexed uid, address indexed registerer, (bytes32,address,bool,string) schema) +func (_SchemaRegistry *SchemaRegistryFilterer) WatchRegistered(opts *bind.WatchOpts, sink chan<- *SchemaRegistryRegistered, uid [][32]byte, registerer []common.Address) (event.Subscription, error) { + + var uidRule []interface{} + for _, uidItem := range uid { + uidRule = append(uidRule, uidItem) + } + var registererRule []interface{} + for _, registererItem := range registerer { + registererRule = append(registererRule, registererItem) + } + + logs, sub, err := _SchemaRegistry.contract.WatchLogs(opts, "Registered", uidRule, registererRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(SchemaRegistryRegistered) + if err := _SchemaRegistry.contract.UnpackLog(event, "Registered", 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 +} + +// ParseRegistered is a log parse operation binding the contract event 0xd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e. +// +// Solidity: event Registered(bytes32 indexed uid, address indexed registerer, (bytes32,address,bool,string) schema) +func (_SchemaRegistry *SchemaRegistryFilterer) ParseRegistered(log types.Log) (*SchemaRegistryRegistered, error) { + event := new(SchemaRegistryRegistered) + if err := _SchemaRegistry.contract.UnpackLog(event, "Registered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-bindings/bindings/schemaregistry_more.go b/op-bindings/bindings/schemaregistry_more.go new file mode 100644 index 000000000..f03479795 --- /dev/null +++ b/op-bindings/bindings/schemaregistry_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const SchemaRegistryStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/EAS/SchemaRegistry.sol:SchemaRegistry\",\"label\":\"_registry\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_mapping(t_bytes32,t_struct(SchemaRecord)1003_storage)\"},{\"astId\":1001,\"contract\":\"src/EAS/SchemaRegistry.sol:SchemaRegistry\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)49_storage\"}],\"types\":{\"t_array(t_uint256)49_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\",\"base\":\"t_uint256\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_contract(ISchemaResolver)1002\":{\"encoding\":\"inplace\",\"label\":\"contract ISchemaResolver\",\"numberOfBytes\":\"20\"},\"t_mapping(t_bytes32,t_struct(SchemaRecord)1003_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e struct SchemaRecord)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_struct(SchemaRecord)1003_storage\"},\"t_string_storage\":{\"encoding\":\"bytes\",\"label\":\"string\",\"numberOfBytes\":\"32\"},\"t_struct(SchemaRecord)1003_storage\":{\"encoding\":\"inplace\",\"label\":\"struct SchemaRecord\",\"numberOfBytes\":\"96\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"}}}" + +var SchemaRegistryStorageLayout = new(solc.StorageLayout) + +var SchemaRegistryDeployedBin = "0x608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d501461004657806360d7a27814610098578063a2ea7c6e146100b9575b600080fd5b6100826040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b60405161008f9190610473565b60405180910390f35b6100ab6100a636600461048d565b6100d9565b60405190815260200161008f565b6100cc6100c736600461053f565b61029d565b60405161008f9190610558565b60008060405180608001604052806000801b81526020018573ffffffffffffffffffffffffffffffffffffffff168152602001841515815260200187878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250929350915061015b9050826103c5565b600081815260208190526040902054909150156101a4576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80825260008181526020818152604091829020845181559084015160018201805493860151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9092169190911792909217909155606083015183919060028201906102409082610682565b509050503373ffffffffffffffffffffffffffffffffffffffff16817fd0b86852e21f9e5fa4bc3b0cff9757ffe243d50c4b43968a42202153d651ea5e8460405161028b9190610558565b60405180910390a39695505050505050565b604080516080810182526000808252602082018190529181019190915260608082015260008281526020818152604091829020825160808101845281548152600182015473ffffffffffffffffffffffffffffffffffffffff8116938201939093527401000000000000000000000000000000000000000090920460ff1615159282019290925260028201805491929160608401919061033c906105e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610368906105e0565b80156103b55780601f1061038a576101008083540402835291602001916103b5565b820191906000526020600020905b81548152906001019060200180831161039857829003601f168201915b5050505050815250509050919050565b60008160600151826020015183604001516040516020016103e89392919061079c565b604051602081830303815290604052805190602001209050919050565b60005b83811015610420578181015183820152602001610408565b50506000910152565b60008151808452610441816020860160208601610405565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006104866020830184610429565b9392505050565b600080600080606085870312156104a357600080fd5b843567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b6020928301965094505085013573ffffffffffffffffffffffffffffffffffffffff8116811461051f57600080fd5b91506040850135801515811461053457600080fd5b939692955090935050565b60006020828403121561055157600080fd5b5035919050565b602081528151602082015273ffffffffffffffffffffffffffffffffffffffff6020830151166040820152604082015115156060820152600060608301516080808401526105a960a0840182610429565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c908216806105f457607f821691505b60208210810361062d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561067d57600081815260208120601f850160051c8101602086101561065a5750805b601f850160051c820191505b8181101561067957828155600101610666565b5050505b505050565b815167ffffffffffffffff81111561069c5761069c6105b1565b6106b0816106aa84546105e0565b84610633565b602080601f83116001811461070357600084156106cd5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610679565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561075057888601518255948401946001909101908401610731565b508582101561078c57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600084516107ae818460208901610405565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815290151560f81b60148201526015019291505056fea164736f6c6343000813000a" + +func init() { + if err := json.Unmarshal([]byte(SchemaRegistryStorageLayoutJSON), SchemaRegistryStorageLayout); err != nil { + panic(err) + } + + layouts["SchemaRegistry"] = SchemaRegistryStorageLayout + deployedBytecodes["SchemaRegistry"] = SchemaRegistryDeployedBin +} diff --git a/op-bindings/bindings/sequencerfeevault.go b/op-bindings/bindings/sequencerfeevault.go new file mode 100644 index 000000000..02eb3283f --- /dev/null +++ b/op-bindings/bindings/sequencerfeevault.go @@ -0,0 +1,703 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// SequencerFeeVaultMetaData contains all meta data concerning the SequencerFeeVault contract. +var SequencerFeeVaultMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_minWithdrawalAmount\",\"type\":\"uint256\"},{\"internalType\":\"enumFeeVault.WithdrawalNetwork\",\"name\":\"_withdrawalNetwork\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"enumFeeVault.WithdrawalNetwork\",\"name\":\"withdrawalNetwork\",\"type\":\"uint8\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MIN_WITHDRAWAL_AMOUNT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RECIPIENT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WITHDRAWAL_NETWORK\",\"outputs\":[{\"internalType\":\"enumFeeVault.WithdrawalNetwork\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1FeeWallet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalProcessed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60e060405234801561001057600080fd5b5060405161091638038061091683398101604081905261002f91610079565b6001600160a01b03831660a0526080829052828282806001811115610056576100566100cc565b60c081600181111561006a5761006a6100cc565b815250505050505050506100e2565b60008060006060848603121561008e57600080fd5b83516001600160a01b03811681146100a557600080fd5b602085015160408601519194509250600281106100c157600080fd5b809150509250925092565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c0516107ce61014860003960008181610181015281816103c701526104020152600081816092015281816101f301528181610316015281816103a50152818161043b01526105a20152600081816101c2015261021901526107ce6000f3fe6080604052600436106100745760003560e01c806384411d651161004e57806384411d651461014b578063d0e12f901461016f578063d3e5792b146101b0578063d4ff9218146101e457600080fd5b80630d9019e1146100805780633ccfd60b146100de57806354fd4d50146100f557600080fd5b3661007b57005b600080fd5b34801561008c57600080fd5b506100b47f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156100ea57600080fd5b506100f3610217565b005b34801561010157600080fd5b5061013e6040518060400160405280600581526020017f312e342e3000000000000000000000000000000000000000000000000000000081525081565b6040516100d5919061066e565b34801561015757600080fd5b5061016160005481565b6040519081526020016100d5565b34801561017b57600080fd5b506101a37f000000000000000000000000000000000000000000000000000000000000000081565b6040516100d591906106f2565b3480156101bc57600080fd5b506101617f000000000000000000000000000000000000000000000000000000000000000081565b3480156101f057600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006100b4565b7f00000000000000000000000000000000000000000000000000000000000000004710156102f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4665655661756c743a207769746864726177616c20616d6f756e74206d75737460448201527f2062652067726561746572207468616e206d696e696d756d207769746864726160648201527f77616c20616d6f756e7400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000479050806000808282546103089190610706565b9091555050604080518281527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166020820152338183015290517fc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba9181900360600190a17f38e04cbeb8c10f8f568618aa75be0f10b6729b8b4237743b4de20cbcde2839ee817f0000000000000000000000000000000000000000000000000000000000000000337f00000000000000000000000000000000000000000000000000000000000000006040516103f69493929190610745565b60405180910390a160017f0000000000000000000000000000000000000000000000000000000000000000600181111561043257610432610688565b0361054b5760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146104b1576040519150601f19603f3d011682016040523d82523d6000602084013e6104b6565b606091505b5050905080610547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4665655661756c743a206661696c656420746f2073656e642045544820746f2060448201527f4c322066656520726563697069656e740000000000000000000000000000000060648201526084016102e9565b5050565b604080516020810182526000815290517fe11013dd0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000109163e11013dd9184916105ce917f0000000000000000000000000000000000000000000000000000000000000000916188b891600401610786565b6000604051808303818588803b1580156105e757600080fd5b505af11580156105fb573d6000803e3d6000fd5b505050505050565b6000815180845260005b818110156106295760208185018101518683018201520161060d565b8181111561063b576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106816020830184610603565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600281106106ee577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b6020810161070082846106b7565b92915050565b60008219821115610740577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b84815273ffffffffffffffffffffffffffffffffffffffff8481166020830152831660408201526080810161077d60608301846106b7565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600061077d606083018461060356fea164736f6c634300080f000a", +} + +// SequencerFeeVaultABI is the input ABI used to generate the binding from. +// Deprecated: Use SequencerFeeVaultMetaData.ABI instead. +var SequencerFeeVaultABI = SequencerFeeVaultMetaData.ABI + +// SequencerFeeVaultBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use SequencerFeeVaultMetaData.Bin instead. +var SequencerFeeVaultBin = SequencerFeeVaultMetaData.Bin + +// DeploySequencerFeeVault deploys a new Ethereum contract, binding an instance of SequencerFeeVault to it. +func DeploySequencerFeeVault(auth *bind.TransactOpts, backend bind.ContractBackend, _recipient common.Address, _minWithdrawalAmount *big.Int, _withdrawalNetwork uint8) (common.Address, *types.Transaction, *SequencerFeeVault, error) { + parsed, err := SequencerFeeVaultMetaData.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(SequencerFeeVaultBin), backend, _recipient, _minWithdrawalAmount, _withdrawalNetwork) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &SequencerFeeVault{SequencerFeeVaultCaller: SequencerFeeVaultCaller{contract: contract}, SequencerFeeVaultTransactor: SequencerFeeVaultTransactor{contract: contract}, SequencerFeeVaultFilterer: SequencerFeeVaultFilterer{contract: contract}}, nil +} + +// SequencerFeeVault is an auto generated Go binding around an Ethereum contract. +type SequencerFeeVault struct { + SequencerFeeVaultCaller // Read-only binding to the contract + SequencerFeeVaultTransactor // Write-only binding to the contract + SequencerFeeVaultFilterer // Log filterer for contract events +} + +// SequencerFeeVaultCaller is an auto generated read-only Go binding around an Ethereum contract. +type SequencerFeeVaultCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SequencerFeeVaultTransactor is an auto generated write-only Go binding around an Ethereum contract. +type SequencerFeeVaultTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SequencerFeeVaultFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type SequencerFeeVaultFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SequencerFeeVaultSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type SequencerFeeVaultSession struct { + Contract *SequencerFeeVault // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SequencerFeeVaultCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type SequencerFeeVaultCallerSession struct { + Contract *SequencerFeeVaultCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// SequencerFeeVaultTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type SequencerFeeVaultTransactorSession struct { + Contract *SequencerFeeVaultTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SequencerFeeVaultRaw is an auto generated low-level Go binding around an Ethereum contract. +type SequencerFeeVaultRaw struct { + Contract *SequencerFeeVault // Generic contract binding to access the raw methods on +} + +// SequencerFeeVaultCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type SequencerFeeVaultCallerRaw struct { + Contract *SequencerFeeVaultCaller // Generic read-only contract binding to access the raw methods on +} + +// SequencerFeeVaultTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type SequencerFeeVaultTransactorRaw struct { + Contract *SequencerFeeVaultTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewSequencerFeeVault creates a new instance of SequencerFeeVault, bound to a specific deployed contract. +func NewSequencerFeeVault(address common.Address, backend bind.ContractBackend) (*SequencerFeeVault, error) { + contract, err := bindSequencerFeeVault(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &SequencerFeeVault{SequencerFeeVaultCaller: SequencerFeeVaultCaller{contract: contract}, SequencerFeeVaultTransactor: SequencerFeeVaultTransactor{contract: contract}, SequencerFeeVaultFilterer: SequencerFeeVaultFilterer{contract: contract}}, nil +} + +// NewSequencerFeeVaultCaller creates a new read-only instance of SequencerFeeVault, bound to a specific deployed contract. +func NewSequencerFeeVaultCaller(address common.Address, caller bind.ContractCaller) (*SequencerFeeVaultCaller, error) { + contract, err := bindSequencerFeeVault(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &SequencerFeeVaultCaller{contract: contract}, nil +} + +// NewSequencerFeeVaultTransactor creates a new write-only instance of SequencerFeeVault, bound to a specific deployed contract. +func NewSequencerFeeVaultTransactor(address common.Address, transactor bind.ContractTransactor) (*SequencerFeeVaultTransactor, error) { + contract, err := bindSequencerFeeVault(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &SequencerFeeVaultTransactor{contract: contract}, nil +} + +// NewSequencerFeeVaultFilterer creates a new log filterer instance of SequencerFeeVault, bound to a specific deployed contract. +func NewSequencerFeeVaultFilterer(address common.Address, filterer bind.ContractFilterer) (*SequencerFeeVaultFilterer, error) { + contract, err := bindSequencerFeeVault(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &SequencerFeeVaultFilterer{contract: contract}, nil +} + +// bindSequencerFeeVault binds a generic wrapper to an already deployed contract. +func bindSequencerFeeVault(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(SequencerFeeVaultABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_SequencerFeeVault *SequencerFeeVaultRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SequencerFeeVault.Contract.SequencerFeeVaultCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_SequencerFeeVault *SequencerFeeVaultRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SequencerFeeVault.Contract.SequencerFeeVaultTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SequencerFeeVault *SequencerFeeVaultRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SequencerFeeVault.Contract.SequencerFeeVaultTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_SequencerFeeVault *SequencerFeeVaultCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SequencerFeeVault.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_SequencerFeeVault *SequencerFeeVaultTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SequencerFeeVault.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SequencerFeeVault *SequencerFeeVaultTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SequencerFeeVault.Contract.contract.Transact(opts, method, params...) +} + +// MINWITHDRAWALAMOUNT is a free data retrieval call binding the contract method 0xd3e5792b. +// +// Solidity: function MIN_WITHDRAWAL_AMOUNT() view returns(uint256) +func (_SequencerFeeVault *SequencerFeeVaultCaller) MINWITHDRAWALAMOUNT(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _SequencerFeeVault.contract.Call(opts, &out, "MIN_WITHDRAWAL_AMOUNT") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MINWITHDRAWALAMOUNT is a free data retrieval call binding the contract method 0xd3e5792b. +// +// Solidity: function MIN_WITHDRAWAL_AMOUNT() view returns(uint256) +func (_SequencerFeeVault *SequencerFeeVaultSession) MINWITHDRAWALAMOUNT() (*big.Int, error) { + return _SequencerFeeVault.Contract.MINWITHDRAWALAMOUNT(&_SequencerFeeVault.CallOpts) +} + +// MINWITHDRAWALAMOUNT is a free data retrieval call binding the contract method 0xd3e5792b. +// +// Solidity: function MIN_WITHDRAWAL_AMOUNT() view returns(uint256) +func (_SequencerFeeVault *SequencerFeeVaultCallerSession) MINWITHDRAWALAMOUNT() (*big.Int, error) { + return _SequencerFeeVault.Contract.MINWITHDRAWALAMOUNT(&_SequencerFeeVault.CallOpts) +} + +// RECIPIENT is a free data retrieval call binding the contract method 0x0d9019e1. +// +// Solidity: function RECIPIENT() view returns(address) +func (_SequencerFeeVault *SequencerFeeVaultCaller) RECIPIENT(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SequencerFeeVault.contract.Call(opts, &out, "RECIPIENT") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// RECIPIENT is a free data retrieval call binding the contract method 0x0d9019e1. +// +// Solidity: function RECIPIENT() view returns(address) +func (_SequencerFeeVault *SequencerFeeVaultSession) RECIPIENT() (common.Address, error) { + return _SequencerFeeVault.Contract.RECIPIENT(&_SequencerFeeVault.CallOpts) +} + +// RECIPIENT is a free data retrieval call binding the contract method 0x0d9019e1. +// +// Solidity: function RECIPIENT() view returns(address) +func (_SequencerFeeVault *SequencerFeeVaultCallerSession) RECIPIENT() (common.Address, error) { + return _SequencerFeeVault.Contract.RECIPIENT(&_SequencerFeeVault.CallOpts) +} + +// WITHDRAWALNETWORK is a free data retrieval call binding the contract method 0xd0e12f90. +// +// Solidity: function WITHDRAWAL_NETWORK() view returns(uint8) +func (_SequencerFeeVault *SequencerFeeVaultCaller) WITHDRAWALNETWORK(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _SequencerFeeVault.contract.Call(opts, &out, "WITHDRAWAL_NETWORK") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// WITHDRAWALNETWORK is a free data retrieval call binding the contract method 0xd0e12f90. +// +// Solidity: function WITHDRAWAL_NETWORK() view returns(uint8) +func (_SequencerFeeVault *SequencerFeeVaultSession) WITHDRAWALNETWORK() (uint8, error) { + return _SequencerFeeVault.Contract.WITHDRAWALNETWORK(&_SequencerFeeVault.CallOpts) +} + +// WITHDRAWALNETWORK is a free data retrieval call binding the contract method 0xd0e12f90. +// +// Solidity: function WITHDRAWAL_NETWORK() view returns(uint8) +func (_SequencerFeeVault *SequencerFeeVaultCallerSession) WITHDRAWALNETWORK() (uint8, error) { + return _SequencerFeeVault.Contract.WITHDRAWALNETWORK(&_SequencerFeeVault.CallOpts) +} + +// L1FeeWallet is a free data retrieval call binding the contract method 0xd4ff9218. +// +// Solidity: function l1FeeWallet() view returns(address) +func (_SequencerFeeVault *SequencerFeeVaultCaller) L1FeeWallet(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SequencerFeeVault.contract.Call(opts, &out, "l1FeeWallet") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// L1FeeWallet is a free data retrieval call binding the contract method 0xd4ff9218. +// +// Solidity: function l1FeeWallet() view returns(address) +func (_SequencerFeeVault *SequencerFeeVaultSession) L1FeeWallet() (common.Address, error) { + return _SequencerFeeVault.Contract.L1FeeWallet(&_SequencerFeeVault.CallOpts) +} + +// L1FeeWallet is a free data retrieval call binding the contract method 0xd4ff9218. +// +// Solidity: function l1FeeWallet() view returns(address) +func (_SequencerFeeVault *SequencerFeeVaultCallerSession) L1FeeWallet() (common.Address, error) { + return _SequencerFeeVault.Contract.L1FeeWallet(&_SequencerFeeVault.CallOpts) +} + +// TotalProcessed is a free data retrieval call binding the contract method 0x84411d65. +// +// Solidity: function totalProcessed() view returns(uint256) +func (_SequencerFeeVault *SequencerFeeVaultCaller) TotalProcessed(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _SequencerFeeVault.contract.Call(opts, &out, "totalProcessed") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalProcessed is a free data retrieval call binding the contract method 0x84411d65. +// +// Solidity: function totalProcessed() view returns(uint256) +func (_SequencerFeeVault *SequencerFeeVaultSession) TotalProcessed() (*big.Int, error) { + return _SequencerFeeVault.Contract.TotalProcessed(&_SequencerFeeVault.CallOpts) +} + +// TotalProcessed is a free data retrieval call binding the contract method 0x84411d65. +// +// Solidity: function totalProcessed() view returns(uint256) +func (_SequencerFeeVault *SequencerFeeVaultCallerSession) TotalProcessed() (*big.Int, error) { + return _SequencerFeeVault.Contract.TotalProcessed(&_SequencerFeeVault.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_SequencerFeeVault *SequencerFeeVaultCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _SequencerFeeVault.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_SequencerFeeVault *SequencerFeeVaultSession) Version() (string, error) { + return _SequencerFeeVault.Contract.Version(&_SequencerFeeVault.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_SequencerFeeVault *SequencerFeeVaultCallerSession) Version() (string, error) { + return _SequencerFeeVault.Contract.Version(&_SequencerFeeVault.CallOpts) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x3ccfd60b. +// +// Solidity: function withdraw() returns() +func (_SequencerFeeVault *SequencerFeeVaultTransactor) Withdraw(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SequencerFeeVault.contract.Transact(opts, "withdraw") +} + +// Withdraw is a paid mutator transaction binding the contract method 0x3ccfd60b. +// +// Solidity: function withdraw() returns() +func (_SequencerFeeVault *SequencerFeeVaultSession) Withdraw() (*types.Transaction, error) { + return _SequencerFeeVault.Contract.Withdraw(&_SequencerFeeVault.TransactOpts) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x3ccfd60b. +// +// Solidity: function withdraw() returns() +func (_SequencerFeeVault *SequencerFeeVaultTransactorSession) Withdraw() (*types.Transaction, error) { + return _SequencerFeeVault.Contract.Withdraw(&_SequencerFeeVault.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_SequencerFeeVault *SequencerFeeVaultTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SequencerFeeVault.contract.RawTransact(opts, nil) // calldata is disallowed for receive function +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_SequencerFeeVault *SequencerFeeVaultSession) Receive() (*types.Transaction, error) { + return _SequencerFeeVault.Contract.Receive(&_SequencerFeeVault.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_SequencerFeeVault *SequencerFeeVaultTransactorSession) Receive() (*types.Transaction, error) { + return _SequencerFeeVault.Contract.Receive(&_SequencerFeeVault.TransactOpts) +} + +// SequencerFeeVaultWithdrawalIterator is returned from FilterWithdrawal and is used to iterate over the raw logs and unpacked data for Withdrawal events raised by the SequencerFeeVault contract. +type SequencerFeeVaultWithdrawalIterator struct { + Event *SequencerFeeVaultWithdrawal // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *SequencerFeeVaultWithdrawalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(SequencerFeeVaultWithdrawal) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(SequencerFeeVaultWithdrawal) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *SequencerFeeVaultWithdrawalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SequencerFeeVaultWithdrawalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SequencerFeeVaultWithdrawal represents a Withdrawal event raised by the SequencerFeeVault contract. +type SequencerFeeVaultWithdrawal struct { + Value *big.Int + To common.Address + From common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawal is a free log retrieval operation binding the contract event 0xc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba. +// +// Solidity: event Withdrawal(uint256 value, address to, address from) +func (_SequencerFeeVault *SequencerFeeVaultFilterer) FilterWithdrawal(opts *bind.FilterOpts) (*SequencerFeeVaultWithdrawalIterator, error) { + + logs, sub, err := _SequencerFeeVault.contract.FilterLogs(opts, "Withdrawal") + if err != nil { + return nil, err + } + return &SequencerFeeVaultWithdrawalIterator{contract: _SequencerFeeVault.contract, event: "Withdrawal", logs: logs, sub: sub}, nil +} + +// WatchWithdrawal is a free log subscription operation binding the contract event 0xc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba. +// +// Solidity: event Withdrawal(uint256 value, address to, address from) +func (_SequencerFeeVault *SequencerFeeVaultFilterer) WatchWithdrawal(opts *bind.WatchOpts, sink chan<- *SequencerFeeVaultWithdrawal) (event.Subscription, error) { + + logs, sub, err := _SequencerFeeVault.contract.WatchLogs(opts, "Withdrawal") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(SequencerFeeVaultWithdrawal) + if err := _SequencerFeeVault.contract.UnpackLog(event, "Withdrawal", 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 +} + +// ParseWithdrawal is a log parse operation binding the contract event 0xc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba. +// +// Solidity: event Withdrawal(uint256 value, address to, address from) +func (_SequencerFeeVault *SequencerFeeVaultFilterer) ParseWithdrawal(log types.Log) (*SequencerFeeVaultWithdrawal, error) { + event := new(SequencerFeeVaultWithdrawal) + if err := _SequencerFeeVault.contract.UnpackLog(event, "Withdrawal", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SequencerFeeVaultWithdrawal0Iterator is returned from FilterWithdrawal0 and is used to iterate over the raw logs and unpacked data for Withdrawal0 events raised by the SequencerFeeVault contract. +type SequencerFeeVaultWithdrawal0Iterator struct { + Event *SequencerFeeVaultWithdrawal0 // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *SequencerFeeVaultWithdrawal0Iterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(SequencerFeeVaultWithdrawal0) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(SequencerFeeVaultWithdrawal0) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *SequencerFeeVaultWithdrawal0Iterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SequencerFeeVaultWithdrawal0Iterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SequencerFeeVaultWithdrawal0 represents a Withdrawal0 event raised by the SequencerFeeVault contract. +type SequencerFeeVaultWithdrawal0 struct { + Value *big.Int + To common.Address + From common.Address + WithdrawalNetwork uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawal0 is a free log retrieval operation binding the contract event 0x38e04cbeb8c10f8f568618aa75be0f10b6729b8b4237743b4de20cbcde2839ee. +// +// Solidity: event Withdrawal(uint256 value, address to, address from, uint8 withdrawalNetwork) +func (_SequencerFeeVault *SequencerFeeVaultFilterer) FilterWithdrawal0(opts *bind.FilterOpts) (*SequencerFeeVaultWithdrawal0Iterator, error) { + + logs, sub, err := _SequencerFeeVault.contract.FilterLogs(opts, "Withdrawal0") + if err != nil { + return nil, err + } + return &SequencerFeeVaultWithdrawal0Iterator{contract: _SequencerFeeVault.contract, event: "Withdrawal0", logs: logs, sub: sub}, nil +} + +// WatchWithdrawal0 is a free log subscription operation binding the contract event 0x38e04cbeb8c10f8f568618aa75be0f10b6729b8b4237743b4de20cbcde2839ee. +// +// Solidity: event Withdrawal(uint256 value, address to, address from, uint8 withdrawalNetwork) +func (_SequencerFeeVault *SequencerFeeVaultFilterer) WatchWithdrawal0(opts *bind.WatchOpts, sink chan<- *SequencerFeeVaultWithdrawal0) (event.Subscription, error) { + + logs, sub, err := _SequencerFeeVault.contract.WatchLogs(opts, "Withdrawal0") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(SequencerFeeVaultWithdrawal0) + if err := _SequencerFeeVault.contract.UnpackLog(event, "Withdrawal0", 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 +} + +// ParseWithdrawal0 is a log parse operation binding the contract event 0x38e04cbeb8c10f8f568618aa75be0f10b6729b8b4237743b4de20cbcde2839ee. +// +// Solidity: event Withdrawal(uint256 value, address to, address from, uint8 withdrawalNetwork) +func (_SequencerFeeVault *SequencerFeeVaultFilterer) ParseWithdrawal0(log types.Log) (*SequencerFeeVaultWithdrawal0, error) { + event := new(SequencerFeeVaultWithdrawal0) + if err := _SequencerFeeVault.contract.UnpackLog(event, "Withdrawal0", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-bindings/bindings/sequencerfeevault_more.go b/op-bindings/bindings/sequencerfeevault_more.go new file mode 100644 index 000000000..aec1d556b --- /dev/null +++ b/op-bindings/bindings/sequencerfeevault_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const SequencerFeeVaultStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/L2/SequencerFeeVault.sol:SequencerFeeVault\",\"label\":\"totalProcessed\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint256\"}],\"types\":{\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"}}}" + +var SequencerFeeVaultStorageLayout = new(solc.StorageLayout) + +var SequencerFeeVaultDeployedBin = "0x6080604052600436106100745760003560e01c806384411d651161004e57806384411d651461014b578063d0e12f901461016f578063d3e5792b146101b0578063d4ff9218146101e457600080fd5b80630d9019e1146100805780633ccfd60b146100de57806354fd4d50146100f557600080fd5b3661007b57005b600080fd5b34801561008c57600080fd5b506100b47f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156100ea57600080fd5b506100f3610217565b005b34801561010157600080fd5b5061013e6040518060400160405280600581526020017f312e342e3000000000000000000000000000000000000000000000000000000081525081565b6040516100d5919061066e565b34801561015757600080fd5b5061016160005481565b6040519081526020016100d5565b34801561017b57600080fd5b506101a37f000000000000000000000000000000000000000000000000000000000000000081565b6040516100d591906106f2565b3480156101bc57600080fd5b506101617f000000000000000000000000000000000000000000000000000000000000000081565b3480156101f057600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006100b4565b7f00000000000000000000000000000000000000000000000000000000000000004710156102f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4665655661756c743a207769746864726177616c20616d6f756e74206d75737460448201527f2062652067726561746572207468616e206d696e696d756d207769746864726160648201527f77616c20616d6f756e7400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000479050806000808282546103089190610706565b9091555050604080518281527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166020820152338183015290517fc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba9181900360600190a17f38e04cbeb8c10f8f568618aa75be0f10b6729b8b4237743b4de20cbcde2839ee817f0000000000000000000000000000000000000000000000000000000000000000337f00000000000000000000000000000000000000000000000000000000000000006040516103f69493929190610745565b60405180910390a160017f0000000000000000000000000000000000000000000000000000000000000000600181111561043257610432610688565b0361054b5760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146104b1576040519150601f19603f3d011682016040523d82523d6000602084013e6104b6565b606091505b5050905080610547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4665655661756c743a206661696c656420746f2073656e642045544820746f2060448201527f4c322066656520726563697069656e740000000000000000000000000000000060648201526084016102e9565b5050565b604080516020810182526000815290517fe11013dd0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000109163e11013dd9184916105ce917f0000000000000000000000000000000000000000000000000000000000000000916188b891600401610786565b6000604051808303818588803b1580156105e757600080fd5b505af11580156105fb573d6000803e3d6000fd5b505050505050565b6000815180845260005b818110156106295760208185018101518683018201520161060d565b8181111561063b576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106816020830184610603565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600281106106ee577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b6020810161070082846106b7565b92915050565b60008219821115610740577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b84815273ffffffffffffffffffffffffffffffffffffffff8481166020830152831660408201526080810161077d60608301846106b7565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600061077d606083018461060356fea164736f6c634300080f000a" + +func init() { + if err := json.Unmarshal([]byte(SequencerFeeVaultStorageLayoutJSON), SequencerFeeVaultStorageLayout); err != nil { + panic(err) + } + + layouts["SequencerFeeVault"] = SequencerFeeVaultStorageLayout + deployedBytecodes["SequencerFeeVault"] = SequencerFeeVaultDeployedBin +} diff --git a/op-bindings/bindings/standardbridge.go b/op-bindings/bindings/standardbridge.go new file mode 100644 index 000000000..1faadc60f --- /dev/null +++ b/op-bindings/bindings/standardbridge.go @@ -0,0 +1,1256 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// StandardBridgeMetaData contains all meta data concerning the StandardBridge contract. +var StandardBridgeMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC20BridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ERC20BridgeInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ETHBridgeFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"ETHBridgeInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MESSENGER\",\"outputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OTHER_BRIDGE\",\"outputs\":[{\"internalType\":\"contractStandardBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeERC20To\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_minGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"bridgeETHTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"deposits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_remoteToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"finalizeBridgeETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messenger\",\"outputs\":[{\"internalType\":\"contractCrossDomainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"otherBridge\",\"outputs\":[{\"internalType\":\"contractStandardBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", +} + +// StandardBridgeABI is the input ABI used to generate the binding from. +// Deprecated: Use StandardBridgeMetaData.ABI instead. +var StandardBridgeABI = StandardBridgeMetaData.ABI + +// StandardBridge is an auto generated Go binding around an Ethereum contract. +type StandardBridge struct { + StandardBridgeCaller // Read-only binding to the contract + StandardBridgeTransactor // Write-only binding to the contract + StandardBridgeFilterer // Log filterer for contract events +} + +// StandardBridgeCaller is an auto generated read-only Go binding around an Ethereum contract. +type StandardBridgeCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StandardBridgeTransactor is an auto generated write-only Go binding around an Ethereum contract. +type StandardBridgeTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StandardBridgeFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type StandardBridgeFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StandardBridgeSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type StandardBridgeSession struct { + Contract *StandardBridge // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// StandardBridgeCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type StandardBridgeCallerSession struct { + Contract *StandardBridgeCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// StandardBridgeTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type StandardBridgeTransactorSession struct { + Contract *StandardBridgeTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// StandardBridgeRaw is an auto generated low-level Go binding around an Ethereum contract. +type StandardBridgeRaw struct { + Contract *StandardBridge // Generic contract binding to access the raw methods on +} + +// StandardBridgeCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type StandardBridgeCallerRaw struct { + Contract *StandardBridgeCaller // Generic read-only contract binding to access the raw methods on +} + +// StandardBridgeTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type StandardBridgeTransactorRaw struct { + Contract *StandardBridgeTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewStandardBridge creates a new instance of StandardBridge, bound to a specific deployed contract. +func NewStandardBridge(address common.Address, backend bind.ContractBackend) (*StandardBridge, error) { + contract, err := bindStandardBridge(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &StandardBridge{StandardBridgeCaller: StandardBridgeCaller{contract: contract}, StandardBridgeTransactor: StandardBridgeTransactor{contract: contract}, StandardBridgeFilterer: StandardBridgeFilterer{contract: contract}}, nil +} + +// NewStandardBridgeCaller creates a new read-only instance of StandardBridge, bound to a specific deployed contract. +func NewStandardBridgeCaller(address common.Address, caller bind.ContractCaller) (*StandardBridgeCaller, error) { + contract, err := bindStandardBridge(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &StandardBridgeCaller{contract: contract}, nil +} + +// NewStandardBridgeTransactor creates a new write-only instance of StandardBridge, bound to a specific deployed contract. +func NewStandardBridgeTransactor(address common.Address, transactor bind.ContractTransactor) (*StandardBridgeTransactor, error) { + contract, err := bindStandardBridge(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &StandardBridgeTransactor{contract: contract}, nil +} + +// NewStandardBridgeFilterer creates a new log filterer instance of StandardBridge, bound to a specific deployed contract. +func NewStandardBridgeFilterer(address common.Address, filterer bind.ContractFilterer) (*StandardBridgeFilterer, error) { + contract, err := bindStandardBridge(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &StandardBridgeFilterer{contract: contract}, nil +} + +// bindStandardBridge binds a generic wrapper to an already deployed contract. +func bindStandardBridge(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(StandardBridgeABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_StandardBridge *StandardBridgeRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _StandardBridge.Contract.StandardBridgeCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_StandardBridge *StandardBridgeRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StandardBridge.Contract.StandardBridgeTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_StandardBridge *StandardBridgeRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _StandardBridge.Contract.StandardBridgeTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_StandardBridge *StandardBridgeCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _StandardBridge.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_StandardBridge *StandardBridgeTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StandardBridge.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_StandardBridge *StandardBridgeTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _StandardBridge.Contract.contract.Transact(opts, method, params...) +} + +// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. +// +// Solidity: function MESSENGER() view returns(address) +func (_StandardBridge *StandardBridgeCaller) MESSENGER(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StandardBridge.contract.Call(opts, &out, "MESSENGER") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. +// +// Solidity: function MESSENGER() view returns(address) +func (_StandardBridge *StandardBridgeSession) MESSENGER() (common.Address, error) { + return _StandardBridge.Contract.MESSENGER(&_StandardBridge.CallOpts) +} + +// MESSENGER is a free data retrieval call binding the contract method 0x927ede2d. +// +// Solidity: function MESSENGER() view returns(address) +func (_StandardBridge *StandardBridgeCallerSession) MESSENGER() (common.Address, error) { + return _StandardBridge.Contract.MESSENGER(&_StandardBridge.CallOpts) +} + +// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. +// +// Solidity: function OTHER_BRIDGE() view returns(address) +func (_StandardBridge *StandardBridgeCaller) OTHERBRIDGE(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StandardBridge.contract.Call(opts, &out, "OTHER_BRIDGE") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. +// +// Solidity: function OTHER_BRIDGE() view returns(address) +func (_StandardBridge *StandardBridgeSession) OTHERBRIDGE() (common.Address, error) { + return _StandardBridge.Contract.OTHERBRIDGE(&_StandardBridge.CallOpts) +} + +// OTHERBRIDGE is a free data retrieval call binding the contract method 0x7f46ddb2. +// +// Solidity: function OTHER_BRIDGE() view returns(address) +func (_StandardBridge *StandardBridgeCallerSession) OTHERBRIDGE() (common.Address, error) { + return _StandardBridge.Contract.OTHERBRIDGE(&_StandardBridge.CallOpts) +} + +// Deposits is a free data retrieval call binding the contract method 0x8f601f66. +// +// Solidity: function deposits(address , address ) view returns(uint256) +func (_StandardBridge *StandardBridgeCaller) Deposits(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) { + var out []interface{} + err := _StandardBridge.contract.Call(opts, &out, "deposits", arg0, arg1) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Deposits is a free data retrieval call binding the contract method 0x8f601f66. +// +// Solidity: function deposits(address , address ) view returns(uint256) +func (_StandardBridge *StandardBridgeSession) Deposits(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _StandardBridge.Contract.Deposits(&_StandardBridge.CallOpts, arg0, arg1) +} + +// Deposits is a free data retrieval call binding the contract method 0x8f601f66. +// +// Solidity: function deposits(address , address ) view returns(uint256) +func (_StandardBridge *StandardBridgeCallerSession) Deposits(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _StandardBridge.Contract.Deposits(&_StandardBridge.CallOpts, arg0, arg1) +} + +// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. +// +// Solidity: function messenger() view returns(address) +func (_StandardBridge *StandardBridgeCaller) Messenger(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StandardBridge.contract.Call(opts, &out, "messenger") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. +// +// Solidity: function messenger() view returns(address) +func (_StandardBridge *StandardBridgeSession) Messenger() (common.Address, error) { + return _StandardBridge.Contract.Messenger(&_StandardBridge.CallOpts) +} + +// Messenger is a free data retrieval call binding the contract method 0x3cb747bf. +// +// Solidity: function messenger() view returns(address) +func (_StandardBridge *StandardBridgeCallerSession) Messenger() (common.Address, error) { + return _StandardBridge.Contract.Messenger(&_StandardBridge.CallOpts) +} + +// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. +// +// Solidity: function otherBridge() view returns(address) +func (_StandardBridge *StandardBridgeCaller) OtherBridge(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StandardBridge.contract.Call(opts, &out, "otherBridge") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. +// +// Solidity: function otherBridge() view returns(address) +func (_StandardBridge *StandardBridgeSession) OtherBridge() (common.Address, error) { + return _StandardBridge.Contract.OtherBridge(&_StandardBridge.CallOpts) +} + +// OtherBridge is a free data retrieval call binding the contract method 0xc89701a2. +// +// Solidity: function otherBridge() view returns(address) +func (_StandardBridge *StandardBridgeCallerSession) OtherBridge() (common.Address, error) { + return _StandardBridge.Contract.OtherBridge(&_StandardBridge.CallOpts) +} + +// BridgeERC20 is a paid mutator transaction binding the contract method 0x87087623. +// +// Solidity: function bridgeERC20(address _localToken, address _remoteToken, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_StandardBridge *StandardBridgeTransactor) BridgeERC20(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.contract.Transact(opts, "bridgeERC20", _localToken, _remoteToken, _amount, _minGasLimit, _extraData) +} + +// BridgeERC20 is a paid mutator transaction binding the contract method 0x87087623. +// +// Solidity: function bridgeERC20(address _localToken, address _remoteToken, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_StandardBridge *StandardBridgeSession) BridgeERC20(_localToken common.Address, _remoteToken common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.Contract.BridgeERC20(&_StandardBridge.TransactOpts, _localToken, _remoteToken, _amount, _minGasLimit, _extraData) +} + +// BridgeERC20 is a paid mutator transaction binding the contract method 0x87087623. +// +// Solidity: function bridgeERC20(address _localToken, address _remoteToken, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_StandardBridge *StandardBridgeTransactorSession) BridgeERC20(_localToken common.Address, _remoteToken common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.Contract.BridgeERC20(&_StandardBridge.TransactOpts, _localToken, _remoteToken, _amount, _minGasLimit, _extraData) +} + +// BridgeERC20To is a paid mutator transaction binding the contract method 0x540abf73. +// +// Solidity: function bridgeERC20To(address _localToken, address _remoteToken, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_StandardBridge *StandardBridgeTransactor) BridgeERC20To(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.contract.Transact(opts, "bridgeERC20To", _localToken, _remoteToken, _to, _amount, _minGasLimit, _extraData) +} + +// BridgeERC20To is a paid mutator transaction binding the contract method 0x540abf73. +// +// Solidity: function bridgeERC20To(address _localToken, address _remoteToken, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_StandardBridge *StandardBridgeSession) BridgeERC20To(_localToken common.Address, _remoteToken common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.Contract.BridgeERC20To(&_StandardBridge.TransactOpts, _localToken, _remoteToken, _to, _amount, _minGasLimit, _extraData) +} + +// BridgeERC20To is a paid mutator transaction binding the contract method 0x540abf73. +// +// Solidity: function bridgeERC20To(address _localToken, address _remoteToken, address _to, uint256 _amount, uint32 _minGasLimit, bytes _extraData) returns() +func (_StandardBridge *StandardBridgeTransactorSession) BridgeERC20To(_localToken common.Address, _remoteToken common.Address, _to common.Address, _amount *big.Int, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.Contract.BridgeERC20To(&_StandardBridge.TransactOpts, _localToken, _remoteToken, _to, _amount, _minGasLimit, _extraData) +} + +// BridgeETH is a paid mutator transaction binding the contract method 0x09fc8843. +// +// Solidity: function bridgeETH(uint32 _minGasLimit, bytes _extraData) payable returns() +func (_StandardBridge *StandardBridgeTransactor) BridgeETH(opts *bind.TransactOpts, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.contract.Transact(opts, "bridgeETH", _minGasLimit, _extraData) +} + +// BridgeETH is a paid mutator transaction binding the contract method 0x09fc8843. +// +// Solidity: function bridgeETH(uint32 _minGasLimit, bytes _extraData) payable returns() +func (_StandardBridge *StandardBridgeSession) BridgeETH(_minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.Contract.BridgeETH(&_StandardBridge.TransactOpts, _minGasLimit, _extraData) +} + +// BridgeETH is a paid mutator transaction binding the contract method 0x09fc8843. +// +// Solidity: function bridgeETH(uint32 _minGasLimit, bytes _extraData) payable returns() +func (_StandardBridge *StandardBridgeTransactorSession) BridgeETH(_minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.Contract.BridgeETH(&_StandardBridge.TransactOpts, _minGasLimit, _extraData) +} + +// BridgeETHTo is a paid mutator transaction binding the contract method 0xe11013dd. +// +// Solidity: function bridgeETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() +func (_StandardBridge *StandardBridgeTransactor) BridgeETHTo(opts *bind.TransactOpts, _to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.contract.Transact(opts, "bridgeETHTo", _to, _minGasLimit, _extraData) +} + +// BridgeETHTo is a paid mutator transaction binding the contract method 0xe11013dd. +// +// Solidity: function bridgeETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() +func (_StandardBridge *StandardBridgeSession) BridgeETHTo(_to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.Contract.BridgeETHTo(&_StandardBridge.TransactOpts, _to, _minGasLimit, _extraData) +} + +// BridgeETHTo is a paid mutator transaction binding the contract method 0xe11013dd. +// +// Solidity: function bridgeETHTo(address _to, uint32 _minGasLimit, bytes _extraData) payable returns() +func (_StandardBridge *StandardBridgeTransactorSession) BridgeETHTo(_to common.Address, _minGasLimit uint32, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.Contract.BridgeETHTo(&_StandardBridge.TransactOpts, _to, _minGasLimit, _extraData) +} + +// FinalizeBridgeERC20 is a paid mutator transaction binding the contract method 0x0166a07a. +// +// Solidity: function finalizeBridgeERC20(address _localToken, address _remoteToken, address _from, address _to, uint256 _amount, bytes _extraData) returns() +func (_StandardBridge *StandardBridgeTransactor) FinalizeBridgeERC20(opts *bind.TransactOpts, _localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.contract.Transact(opts, "finalizeBridgeERC20", _localToken, _remoteToken, _from, _to, _amount, _extraData) +} + +// FinalizeBridgeERC20 is a paid mutator transaction binding the contract method 0x0166a07a. +// +// Solidity: function finalizeBridgeERC20(address _localToken, address _remoteToken, address _from, address _to, uint256 _amount, bytes _extraData) returns() +func (_StandardBridge *StandardBridgeSession) FinalizeBridgeERC20(_localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.Contract.FinalizeBridgeERC20(&_StandardBridge.TransactOpts, _localToken, _remoteToken, _from, _to, _amount, _extraData) +} + +// FinalizeBridgeERC20 is a paid mutator transaction binding the contract method 0x0166a07a. +// +// Solidity: function finalizeBridgeERC20(address _localToken, address _remoteToken, address _from, address _to, uint256 _amount, bytes _extraData) returns() +func (_StandardBridge *StandardBridgeTransactorSession) FinalizeBridgeERC20(_localToken common.Address, _remoteToken common.Address, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.Contract.FinalizeBridgeERC20(&_StandardBridge.TransactOpts, _localToken, _remoteToken, _from, _to, _amount, _extraData) +} + +// FinalizeBridgeETH is a paid mutator transaction binding the contract method 0x1635f5fd. +// +// Solidity: function finalizeBridgeETH(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() +func (_StandardBridge *StandardBridgeTransactor) FinalizeBridgeETH(opts *bind.TransactOpts, _from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.contract.Transact(opts, "finalizeBridgeETH", _from, _to, _amount, _extraData) +} + +// FinalizeBridgeETH is a paid mutator transaction binding the contract method 0x1635f5fd. +// +// Solidity: function finalizeBridgeETH(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() +func (_StandardBridge *StandardBridgeSession) FinalizeBridgeETH(_from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.Contract.FinalizeBridgeETH(&_StandardBridge.TransactOpts, _from, _to, _amount, _extraData) +} + +// FinalizeBridgeETH is a paid mutator transaction binding the contract method 0x1635f5fd. +// +// Solidity: function finalizeBridgeETH(address _from, address _to, uint256 _amount, bytes _extraData) payable returns() +func (_StandardBridge *StandardBridgeTransactorSession) FinalizeBridgeETH(_from common.Address, _to common.Address, _amount *big.Int, _extraData []byte) (*types.Transaction, error) { + return _StandardBridge.Contract.FinalizeBridgeETH(&_StandardBridge.TransactOpts, _from, _to, _amount, _extraData) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_StandardBridge *StandardBridgeTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StandardBridge.contract.RawTransact(opts, nil) // calldata is disallowed for receive function +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_StandardBridge *StandardBridgeSession) Receive() (*types.Transaction, error) { + return _StandardBridge.Contract.Receive(&_StandardBridge.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_StandardBridge *StandardBridgeTransactorSession) Receive() (*types.Transaction, error) { + return _StandardBridge.Contract.Receive(&_StandardBridge.TransactOpts) +} + +// StandardBridgeERC20BridgeFinalizedIterator is returned from FilterERC20BridgeFinalized and is used to iterate over the raw logs and unpacked data for ERC20BridgeFinalized events raised by the StandardBridge contract. +type StandardBridgeERC20BridgeFinalizedIterator struct { + Event *StandardBridgeERC20BridgeFinalized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *StandardBridgeERC20BridgeFinalizedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(StandardBridgeERC20BridgeFinalized) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(StandardBridgeERC20BridgeFinalized) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *StandardBridgeERC20BridgeFinalizedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StandardBridgeERC20BridgeFinalizedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StandardBridgeERC20BridgeFinalized represents a ERC20BridgeFinalized event raised by the StandardBridge contract. +type StandardBridgeERC20BridgeFinalized struct { + LocalToken common.Address + RemoteToken common.Address + From common.Address + To common.Address + Amount *big.Int + ExtraData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterERC20BridgeFinalized is a free log retrieval operation binding the contract event 0xd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd. +// +// Solidity: event ERC20BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) +func (_StandardBridge *StandardBridgeFilterer) FilterERC20BridgeFinalized(opts *bind.FilterOpts, localToken []common.Address, remoteToken []common.Address, from []common.Address) (*StandardBridgeERC20BridgeFinalizedIterator, error) { + + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _StandardBridge.contract.FilterLogs(opts, "ERC20BridgeFinalized", localTokenRule, remoteTokenRule, fromRule) + if err != nil { + return nil, err + } + return &StandardBridgeERC20BridgeFinalizedIterator{contract: _StandardBridge.contract, event: "ERC20BridgeFinalized", logs: logs, sub: sub}, nil +} + +// WatchERC20BridgeFinalized is a free log subscription operation binding the contract event 0xd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd. +// +// Solidity: event ERC20BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) +func (_StandardBridge *StandardBridgeFilterer) WatchERC20BridgeFinalized(opts *bind.WatchOpts, sink chan<- *StandardBridgeERC20BridgeFinalized, localToken []common.Address, remoteToken []common.Address, from []common.Address) (event.Subscription, error) { + + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _StandardBridge.contract.WatchLogs(opts, "ERC20BridgeFinalized", localTokenRule, remoteTokenRule, fromRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(StandardBridgeERC20BridgeFinalized) + if err := _StandardBridge.contract.UnpackLog(event, "ERC20BridgeFinalized", 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 +} + +// ParseERC20BridgeFinalized is a log parse operation binding the contract event 0xd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd. +// +// Solidity: event ERC20BridgeFinalized(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) +func (_StandardBridge *StandardBridgeFilterer) ParseERC20BridgeFinalized(log types.Log) (*StandardBridgeERC20BridgeFinalized, error) { + event := new(StandardBridgeERC20BridgeFinalized) + if err := _StandardBridge.contract.UnpackLog(event, "ERC20BridgeFinalized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StandardBridgeERC20BridgeInitiatedIterator is returned from FilterERC20BridgeInitiated and is used to iterate over the raw logs and unpacked data for ERC20BridgeInitiated events raised by the StandardBridge contract. +type StandardBridgeERC20BridgeInitiatedIterator struct { + Event *StandardBridgeERC20BridgeInitiated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *StandardBridgeERC20BridgeInitiatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(StandardBridgeERC20BridgeInitiated) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(StandardBridgeERC20BridgeInitiated) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *StandardBridgeERC20BridgeInitiatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StandardBridgeERC20BridgeInitiatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StandardBridgeERC20BridgeInitiated represents a ERC20BridgeInitiated event raised by the StandardBridge contract. +type StandardBridgeERC20BridgeInitiated struct { + LocalToken common.Address + RemoteToken common.Address + From common.Address + To common.Address + Amount *big.Int + ExtraData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterERC20BridgeInitiated is a free log retrieval operation binding the contract event 0x7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf. +// +// Solidity: event ERC20BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) +func (_StandardBridge *StandardBridgeFilterer) FilterERC20BridgeInitiated(opts *bind.FilterOpts, localToken []common.Address, remoteToken []common.Address, from []common.Address) (*StandardBridgeERC20BridgeInitiatedIterator, error) { + + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _StandardBridge.contract.FilterLogs(opts, "ERC20BridgeInitiated", localTokenRule, remoteTokenRule, fromRule) + if err != nil { + return nil, err + } + return &StandardBridgeERC20BridgeInitiatedIterator{contract: _StandardBridge.contract, event: "ERC20BridgeInitiated", logs: logs, sub: sub}, nil +} + +// WatchERC20BridgeInitiated is a free log subscription operation binding the contract event 0x7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf. +// +// Solidity: event ERC20BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) +func (_StandardBridge *StandardBridgeFilterer) WatchERC20BridgeInitiated(opts *bind.WatchOpts, sink chan<- *StandardBridgeERC20BridgeInitiated, localToken []common.Address, remoteToken []common.Address, from []common.Address) (event.Subscription, error) { + + var localTokenRule []interface{} + for _, localTokenItem := range localToken { + localTokenRule = append(localTokenRule, localTokenItem) + } + var remoteTokenRule []interface{} + for _, remoteTokenItem := range remoteToken { + remoteTokenRule = append(remoteTokenRule, remoteTokenItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _StandardBridge.contract.WatchLogs(opts, "ERC20BridgeInitiated", localTokenRule, remoteTokenRule, fromRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(StandardBridgeERC20BridgeInitiated) + if err := _StandardBridge.contract.UnpackLog(event, "ERC20BridgeInitiated", 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 +} + +// ParseERC20BridgeInitiated is a log parse operation binding the contract event 0x7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf. +// +// Solidity: event ERC20BridgeInitiated(address indexed localToken, address indexed remoteToken, address indexed from, address to, uint256 amount, bytes extraData) +func (_StandardBridge *StandardBridgeFilterer) ParseERC20BridgeInitiated(log types.Log) (*StandardBridgeERC20BridgeInitiated, error) { + event := new(StandardBridgeERC20BridgeInitiated) + if err := _StandardBridge.contract.UnpackLog(event, "ERC20BridgeInitiated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StandardBridgeETHBridgeFinalizedIterator is returned from FilterETHBridgeFinalized and is used to iterate over the raw logs and unpacked data for ETHBridgeFinalized events raised by the StandardBridge contract. +type StandardBridgeETHBridgeFinalizedIterator struct { + Event *StandardBridgeETHBridgeFinalized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *StandardBridgeETHBridgeFinalizedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(StandardBridgeETHBridgeFinalized) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(StandardBridgeETHBridgeFinalized) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *StandardBridgeETHBridgeFinalizedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StandardBridgeETHBridgeFinalizedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StandardBridgeETHBridgeFinalized represents a ETHBridgeFinalized event raised by the StandardBridge contract. +type StandardBridgeETHBridgeFinalized struct { + From common.Address + To common.Address + Amount *big.Int + ExtraData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterETHBridgeFinalized is a free log retrieval operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. +// +// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_StandardBridge *StandardBridgeFilterer) FilterETHBridgeFinalized(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*StandardBridgeETHBridgeFinalizedIterator, 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 := _StandardBridge.contract.FilterLogs(opts, "ETHBridgeFinalized", fromRule, toRule) + if err != nil { + return nil, err + } + return &StandardBridgeETHBridgeFinalizedIterator{contract: _StandardBridge.contract, event: "ETHBridgeFinalized", logs: logs, sub: sub}, nil +} + +// WatchETHBridgeFinalized is a free log subscription operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. +// +// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_StandardBridge *StandardBridgeFilterer) WatchETHBridgeFinalized(opts *bind.WatchOpts, sink chan<- *StandardBridgeETHBridgeFinalized, 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 := _StandardBridge.contract.WatchLogs(opts, "ETHBridgeFinalized", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(StandardBridgeETHBridgeFinalized) + if err := _StandardBridge.contract.UnpackLog(event, "ETHBridgeFinalized", 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 +} + +// ParseETHBridgeFinalized is a log parse operation binding the contract event 0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d. +// +// Solidity: event ETHBridgeFinalized(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_StandardBridge *StandardBridgeFilterer) ParseETHBridgeFinalized(log types.Log) (*StandardBridgeETHBridgeFinalized, error) { + event := new(StandardBridgeETHBridgeFinalized) + if err := _StandardBridge.contract.UnpackLog(event, "ETHBridgeFinalized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StandardBridgeETHBridgeInitiatedIterator is returned from FilterETHBridgeInitiated and is used to iterate over the raw logs and unpacked data for ETHBridgeInitiated events raised by the StandardBridge contract. +type StandardBridgeETHBridgeInitiatedIterator struct { + Event *StandardBridgeETHBridgeInitiated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *StandardBridgeETHBridgeInitiatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(StandardBridgeETHBridgeInitiated) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(StandardBridgeETHBridgeInitiated) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *StandardBridgeETHBridgeInitiatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StandardBridgeETHBridgeInitiatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StandardBridgeETHBridgeInitiated represents a ETHBridgeInitiated event raised by the StandardBridge contract. +type StandardBridgeETHBridgeInitiated struct { + From common.Address + To common.Address + Amount *big.Int + ExtraData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterETHBridgeInitiated is a free log retrieval operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. +// +// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_StandardBridge *StandardBridgeFilterer) FilterETHBridgeInitiated(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*StandardBridgeETHBridgeInitiatedIterator, 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 := _StandardBridge.contract.FilterLogs(opts, "ETHBridgeInitiated", fromRule, toRule) + if err != nil { + return nil, err + } + return &StandardBridgeETHBridgeInitiatedIterator{contract: _StandardBridge.contract, event: "ETHBridgeInitiated", logs: logs, sub: sub}, nil +} + +// WatchETHBridgeInitiated is a free log subscription operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. +// +// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_StandardBridge *StandardBridgeFilterer) WatchETHBridgeInitiated(opts *bind.WatchOpts, sink chan<- *StandardBridgeETHBridgeInitiated, 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 := _StandardBridge.contract.WatchLogs(opts, "ETHBridgeInitiated", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(StandardBridgeETHBridgeInitiated) + if err := _StandardBridge.contract.UnpackLog(event, "ETHBridgeInitiated", 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 +} + +// ParseETHBridgeInitiated is a log parse operation binding the contract event 0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5. +// +// Solidity: event ETHBridgeInitiated(address indexed from, address indexed to, uint256 amount, bytes extraData) +func (_StandardBridge *StandardBridgeFilterer) ParseETHBridgeInitiated(log types.Log) (*StandardBridgeETHBridgeInitiated, error) { + event := new(StandardBridgeETHBridgeInitiated) + if err := _StandardBridge.contract.UnpackLog(event, "ETHBridgeInitiated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StandardBridgeInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the StandardBridge contract. +type StandardBridgeInitializedIterator struct { + Event *StandardBridgeInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *StandardBridgeInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(StandardBridgeInitialized) + 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 + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(StandardBridgeInitialized) + 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() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *StandardBridgeInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StandardBridgeInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StandardBridgeInitialized represents a Initialized event raised by the StandardBridge contract. +type StandardBridgeInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_StandardBridge *StandardBridgeFilterer) FilterInitialized(opts *bind.FilterOpts) (*StandardBridgeInitializedIterator, error) { + + logs, sub, err := _StandardBridge.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &StandardBridgeInitializedIterator{contract: _StandardBridge.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_StandardBridge *StandardBridgeFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *StandardBridgeInitialized) (event.Subscription, error) { + + logs, sub, err := _StandardBridge.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: + // New log arrived, parse the event and forward to the user + event := new(StandardBridgeInitialized) + if err := _StandardBridge.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 +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_StandardBridge *StandardBridgeFilterer) ParseInitialized(log types.Log) (*StandardBridgeInitialized, error) { + event := new(StandardBridgeInitialized) + if err := _StandardBridge.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-bindings/bindings/standardbridge_more.go b/op-bindings/bindings/standardbridge_more.go new file mode 100644 index 000000000..cd1237839 --- /dev/null +++ b/op-bindings/bindings/standardbridge_more.go @@ -0,0 +1,25 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const StandardBridgeStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/universal/StandardBridge.sol:StandardBridge\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"src/universal/StandardBridge.sol:StandardBridge\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"src/universal/StandardBridge.sol:StandardBridge\",\"label\":\"spacer_0_2_20\",\"offset\":2,\"slot\":\"0\",\"type\":\"t_address\"},{\"astId\":1003,\"contract\":\"src/universal/StandardBridge.sol:StandardBridge\",\"label\":\"spacer_1_0_20\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_address\"},{\"astId\":1004,\"contract\":\"src/universal/StandardBridge.sol:StandardBridge\",\"label\":\"deposits\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_mapping(t_address,t_mapping(t_address,t_uint256))\"},{\"astId\":1005,\"contract\":\"src/universal/StandardBridge.sol:StandardBridge\",\"label\":\"messenger\",\"offset\":0,\"slot\":\"3\",\"type\":\"t_contract(CrossDomainMessenger)1007\"},{\"astId\":1006,\"contract\":\"src/universal/StandardBridge.sol:StandardBridge\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"4\",\"type\":\"t_array(t_uint256)46_storage\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)46_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[46]\",\"numberOfBytes\":\"1472\",\"base\":\"t_uint256\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_contract(CrossDomainMessenger)1007\":{\"encoding\":\"inplace\",\"label\":\"contract CrossDomainMessenger\",\"numberOfBytes\":\"20\"},\"t_mapping(t_address,t_mapping(t_address,t_uint256))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(address =\u003e uint256))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_address,t_uint256)\"},\"t_mapping(t_address,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint256\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" + +var StandardBridgeStorageLayout = new(solc.StorageLayout) + +var StandardBridgeDeployedBin = "0x" + +func init() { + if err := json.Unmarshal([]byte(StandardBridgeStorageLayoutJSON), StandardBridgeStorageLayout); err != nil { + panic(err) + } + + layouts["StandardBridge"] = StandardBridgeStorageLayout + deployedBytecodes["StandardBridge"] = StandardBridgeDeployedBin +} diff --git a/op-bindings/bindings/systemconfig.go b/op-bindings/bindings/systemconfig.go index 5ba45d07b..d70740b9c 100644 --- a/op-bindings/bindings/systemconfig.go +++ b/op-bindings/bindings/systemconfig.go @@ -26,7 +26,6 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription - _ = abi.ConvertType ) // ResourceMeteringResourceConfig is an auto generated low-level Go binding around an user-defined struct. @@ -39,10 +38,20 @@ type ResourceMeteringResourceConfig struct { MaximumBaseFee *big.Int } +// SystemConfigAddresses is an auto generated low-level Go binding around an user-defined struct. +type SystemConfigAddresses struct { + L1CrossDomainMessenger common.Address + L1ERC721Bridge common.Address + L1StandardBridge common.Address + L2OutputOracle common.Address + OptimismPortal common.Address + OptimismMintableERC20Factory common.Address +} + // SystemConfigMetaData contains all meta data concerning the SystemConfig contract. var SystemConfigMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structResourceMetering.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_validatorRewardScalar\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\",\"name\":\"updateType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ConfigUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VERSION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batcherHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structResourceMetering.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_validatorRewardScalar\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumGasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"overhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resourceConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structResourceMetering.ResourceConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"}],\"name\":\"setBatcherHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"}],\"name\":\"setGasConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"}],\"name\":\"setGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structResourceMetering.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"}],\"name\":\"setResourceConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"}],\"name\":\"setUnsafeBlockSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_validatorRewardScalar\",\"type\":\"uint256\"}],\"name\":\"setValidatorRewardScalar\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unsafeBlockSigner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorRewardScalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60e06040523480156200001157600080fd5b506040516200226f3803806200226f833981016040819052620000349162000861565b6001608052600060a081905260c05262000055888888888888888862000063565b505050505050505062000a6b565b600054610100900460ff1615808015620000845750600054600160ff909116105b80620000b45750620000a1306200027860201b62000b8d1760201c565b158015620000b4575060005460ff166001145b6200011d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000141576000805461ff0019166101001790555b6200014b62000287565b6200015689620002ef565b606588905560668790556067869055606880546001600160401b0319166001600160401b038716179055620001a9847f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b620001b4836200036e565b620001be620006c3565b6001600160401b0316856001600160401b03161015620002215760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640162000114565b606a82905580156200026d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6001600160a01b03163b151590565b600054610100900460ff16620002e35760405162461bcd60e51b815260206004820152602b60248201526000805160206200224f83398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000114565b620002ed620006f0565b565b620002f962000757565b6001600160a01b038116620003605760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000114565b6200036b81620007b3565b50565b8060a001516001600160801b0316816060015163ffffffff161115620003fd5760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d617820626173650000000000000000000000606482015260840162000114565b6001816040015160ff16116200046e5760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201526e65206c6172676572207468616e203160881b606482015260840162000114565b606854608082015182516001600160401b0390921691620004909190620009ba565b63ffffffff161115620004e65760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640162000114565b6000816020015160ff1611620005575760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201526e06965722063616e6e6f74206265203608c1b606482015260840162000114565b8051602082015163ffffffff82169160ff9091169062000579908290620009e5565b62000585919062000a17565b63ffffffff1614620006005760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d6974000000000000000000606482015260840162000114565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff96871664ffffffffff199095169490941764010000000060ff948516021764ffffffffff60281b191665010000000000939092169290920263ffffffff60301b19161766010000000000009185169190910217600160501b600160f01b0319166a01000000000000000000009390941692909202600160701b600160f01b03191692909217600160701b6001600160801b0390921691909102179055565b606954600090620006eb9063ffffffff6a010000000000000000000082048116911662000a46565b905090565b600054610100900460ff166200074c5760405162461bcd60e51b815260206004820152602b60248201526000805160206200224f83398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000114565b620002ed33620007b3565b6033546001600160a01b03163314620002ed5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000114565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146200081d57600080fd5b919050565b805163ffffffff811681146200081d57600080fd5b805160ff811681146200081d57600080fd5b80516001600160801b03811681146200081d57600080fd5b600080600080600080600080888a036101a08112156200088057600080fd5b6200088b8a62000805565b60208b015160408c015160608d015160808e0151939c50919a50985096506001600160401b038082168214620008c057600080fd5b819650620008d160a08d0162000805565b955060c060bf1984011215620008e657600080fd5b604051925060c08301915082821081831117156200091457634e487b7160e01b600052604160045260246000fd5b506040526200092660c08b0162000822565b81526200093660e08b0162000837565b60208201526200094a6101008b0162000837565b60408201526200095e6101208b0162000822565b6060820152620009726101408b0162000822565b6080820152620009866101608b0162000849565b60a08201528092505061018089015190509295985092959890939650565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff808316818516808303821115620009dc57620009dc620009a4565b01949350505050565b600063ffffffff8084168062000a0b57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161562000a3d5762000a3d620009a4565b02949350505050565b60006001600160401b03828116848216808303821115620009dc57620009dc620009a4565b60805160a05160c0516117b462000a9b60003960006105b0015260006105870152600061055e01526117b46000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c8063c71973f6116100d8578063ed579ad31161008c578063f68016b711610066578063f68016b714610439578063fc7ffea71461044d578063ffa1ad741461046057600080fd5b8063ed579ad314610414578063f2fde38b1461041d578063f45e65d81461043057600080fd5b8063cc731b02116100bd578063cc731b02146102c4578063e81b2c6d146103f8578063ecdd939d1461040157600080fd5b8063c71973f61461029e578063c9b26f61146102b157600080fd5b806354fd4d501161012f5780638da5cb5b116101145780638da5cb5b1461025a578063935f029e14610278578063b40a817c1461028b57600080fd5b806354fd4d501461023d578063715018a61461025257600080fd5b80631fd19ee1116101605780631fd19ee1146101ad5780634add321d146101f55780634f16540b1461021657600080fd5b80630c18c1621461017c57806318d1391814610198575b600080fd5b61018560655481565b6040519081526020015b60405180910390f35b6101ab6101a636600461134e565b610468565b005b7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08545b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161018f565b6101fd61052c565b60405167ffffffffffffffff909116815260200161018f565b6101857f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b610245610557565b60405161018f91906113ea565b6101ab6105fa565b60335473ffffffffffffffffffffffffffffffffffffffff166101d0565b6101ab6102863660046113fd565b61060e565b6101ab610299366004611437565b6106a7565b6101ab6102ac36600461158f565b610778565b6101ab6102bf3660046115ab565b61078c565b6103886040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b60405161018f9190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61018560675481565b6101ab61040f3660046115ab565b6107bc565b610185606a5481565b6101ab61042b36600461134e565b61088a565b61018560665481565b6068546101fd9067ffffffffffffffff1681565b6101ab61045b3660046115c4565b610924565b610185600081565b610470610ba9565b610498817f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161052091906113ea565b60405180910390a35050565b6069546000906105529063ffffffff6a0100000000000000000000820481169116611670565b905090565b60606105827f0000000000000000000000000000000000000000000000000000000000000000610c10565b6105ab7f0000000000000000000000000000000000000000000000000000000000000000610c10565b6105d47f0000000000000000000000000000000000000000000000000000000000000000610c10565b6040516020016105e69392919061169c565b604051602081830303815290604052905090565b610602610ba9565b61060c6000610cce565b565b610616610ba9565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161069a91906113ea565b60405180910390a3505050565b6106af610ba9565b6106b761052c565b67ffffffffffffffff168167ffffffffffffffff16101561071f5760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064015b60405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831690811790915560408051602080820193909352815180820390930183528101905260026104ef565b610780610ba9565b61078981610d45565b50565b610794610ba9565b60678190556040805160208082018490528251808303909101815290820190915260006104ef565b6107c4610ba9565b6127108111156108625760405162461bcd60e51b815260206004820152604860248201527f53797374656d436f6e6669673a20746865206d61782076616c7565206f66207660448201527f616c696461746f7220726577617264207363616c617220686173206265656e2060648201527f6578636565646564000000000000000000000000000000000000000000000000608482015260a401610716565b606a8190556040805160208082018490528251808303909101815290820190915260046104ef565b610892610ba9565b73ffffffffffffffffffffffffffffffffffffffff811661091b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610716565b61078981610cce565b600054610100900460ff16158080156109445750600054600160ff909116105b8061095e5750303b15801561095e575060005460ff166001145b6109d05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610716565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610a2e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610a36611137565b610a3f8961088a565b606588905560668790556067869055606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff87161790557f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08849055610aaf83610d45565b610ab761052c565b67ffffffffffffffff168567ffffffffffffffff161015610b1a5760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610716565b606a8290558015610b8257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60335473ffffffffffffffffffffffffffffffffffffffff16331461060c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610716565b60606000610c1d836111bc565b600101905060008167ffffffffffffffff811115610c3d57610c3d611452565b6040519080825280601f01601f191660200182016040528015610c67576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084610c7157509392505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115610ddb5760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610716565b6001816040015160ff1611610e585760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e203100000000000000000000000000000000006064820152608401610716565b6068546080820151825167ffffffffffffffff90921691610e799190611712565b63ffffffff161115610ecd5760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610716565b6000816020015160ff1611610f4a5760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610716565b8051602082015163ffffffff82169160ff90911690610f6a908290611731565b610f74919061177b565b63ffffffff1614610fed5760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610716565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b600054610100900460ff166111b45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610716565b61060c61129f565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611205577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611231576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061124f57662386f26fc10000830492506010015b6305f5e1008310611267576305f5e100830492506008015b612710831061127b57612710830492506004015b6064831061128d576064830492506002015b600a8310611299576001015b92915050565b600054610100900460ff1661131c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610716565b61060c33610cce565b803573ffffffffffffffffffffffffffffffffffffffff8116811461134957600080fd5b919050565b60006020828403121561136057600080fd5b61136982611325565b9392505050565b60005b8381101561138b578181015183820152602001611373565b8381111561139a576000848401525b50505050565b600081518084526113b8816020860160208601611370565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061136960208301846113a0565b6000806040838503121561141057600080fd5b50508035926020909101359150565b803567ffffffffffffffff8116811461134957600080fd5b60006020828403121561144957600080fd5b6113698261141f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b803563ffffffff8116811461134957600080fd5b803560ff8116811461134957600080fd5b80356fffffffffffffffffffffffffffffffff8116811461134957600080fd5b600060c082840312156114d857600080fd5b60405160c0810181811067ffffffffffffffff82111715611522577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290508061153183611481565b815261153f60208401611495565b602082015261155060408401611495565b604082015261156160608401611481565b606082015261157260808401611481565b608082015261158360a084016114a6565b60a08201525092915050565b600060c082840312156115a157600080fd5b61136983836114c6565b6000602082840312156115bd57600080fd5b5035919050565b6000806000806000806000806101a0898b0312156115e157600080fd5b6115ea89611325565b975060208901359650604089013595506060890135945061160d60808a0161141f565b935061161b60a08a01611325565b925061162a8a60c08b016114c6565b915061018089013590509295985092959890939650565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851680830382111561169357611693611641565b01949350505050565b600084516116ae818460208901611370565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516116ea816001850160208a01611370565b60019201918201528351611705816002840160208801611370565b0160020195945050505050565b600063ffffffff80831681851680830382111561169357611693611641565b600063ffffffff8084168061176f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161561179e5761179e611641565b0294935050505056fea164736f6c634300080f000a496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\",\"name\":\"updateType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ConfigUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BATCH_INBOX_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_OUTPUT_ORACLE_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIMISM_PORTAL_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VERSION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchInbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batcherHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structResourceMetering.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_startBlock\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_batchInbox\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1ERC721Bridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1StandardBridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l2OutputOracle\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"optimismPortal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\"}],\"internalType\":\"structSystemConfig.Addresses\",\"name\":\"_addresses\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1CrossDomainMessenger\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1ERC721Bridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StandardBridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2OutputOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumGasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"optimismMintableERC20Factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"optimismPortal\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"overhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resourceConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structResourceMetering.ResourceConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"}],\"name\":\"setBatcherHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"}],\"name\":\"setGasConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"}],\"name\":\"setGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structResourceMetering.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"}],\"name\":\"setResourceConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"}],\"name\":\"setUnsafeBlockSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unsafeBlockSigner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60806040523480156200001157600080fd5b506040805160c080820183526001808352602080840182905260028486015260006060808601829052608080870183905260a08088018490528851968701895283875293860183905296850182905284018190529483018590528201849052620000909361dead93909283928392909183919060001990839062000096565b62000ccc565b600054600390610100900460ff16158015620000b9575060005460ff8083169116105b620001225760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805461ffff191660ff831617610100179055620001406200043a565b6200014b8b620004a2565b620001568862000521565b620001628a8a62000573565b6200016d87620005d7565b620001788662000674565b620001be620001a960017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59862000ba9565b60001b84620006dc60201b62000d211760201c565b62000208620001ef60017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063762000ba9565b60001b8360000151620006dc60201b62000d211760201c565b620002526200023960017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a862000ba9565b60001b8360200151620006dc60201b62000d211760201c565b6200029c6200028360017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637762000ba9565b60001b8360400151620006dc60201b62000d211760201c565b620002e6620002cd60017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a687181662000ba9565b60001b8360600151620006dc60201b62000d211760201c565b620003306200031760017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad62000ba9565b60001b8360800151620006dc60201b62000d211760201c565b6200037a6200036160017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d62000ba9565b60001b8360a00151620006dc60201b62000d211760201c565b6200038584620006e0565b62000390856200070d565b6200039a62000a51565b6001600160401b0316876001600160401b03161015620003ec5760405162461bcd60e51b815260206004820152601f60248201526000805160206200281f833981519152604482015260640162000119565b6000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050505050505050565b600054610100900460ff16620004965760405162461bcd60e51b815260206004820152602b60248201526000805160206200285f83398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000119565b620004a062000a7e565b565b620004ac62000ae5565b6001600160a01b038116620005135760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000119565b6200051e8162000b41565b50565b60678190556040805160208082018490528251808303909101815290820190915260005b60006000805160206200283f8339815191528360405162000567919062000bc3565b60405180910390a35050565b60658290556066819055604080516020810184905290810182905260009060600160408051601f198184030181529190529050600160006000805160206200283f83398151915283604051620005ca919062000bc3565b60405180910390a3505050565b620005e162000a51565b6001600160401b0316816001600160401b03161015620006335760405162461bcd60e51b815260206004820152601f60248201526000805160206200281f833981519152604482015260640162000119565b606880546001600160401b0319166001600160401b038316908117909155604080516020808201939093528151808203909301835281019052600262000545565b620006ab7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0882620006dc60201b62000d211760201c565b604080516001600160a01b03831660208201526000910160408051601f198184030181529190529050600362000545565b9055565b8015801590620006f05750606a54155b15620006fb57606a55565b606a546000036200051e5743606a5550565b8060a001516001600160801b0316816060015163ffffffff1611156200079c5760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d617820626173650000000000000000000000606482015260840162000119565b6001816040015160ff16116200080d5760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201526e65206c6172676572207468616e203160881b606482015260840162000119565b606854608082015182516001600160401b03909216916200082f919062000c1b565b63ffffffff161115620008745760405162461bcd60e51b815260206004820152601f60248201526000805160206200281f833981519152604482015260640162000119565b6000816020015160ff1611620008e55760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201526e06965722063616e6e6f74206265203608c1b606482015260840162000119565b8051602082015163ffffffff82169160ff909116906200090790829062000c46565b62000913919062000c78565b63ffffffff16146200098e5760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d6974000000000000000000606482015260840162000119565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff96871664ffffffffff199095169490941764010000000060ff948516021764ffffffffff60281b191665010000000000939092169290920263ffffffff60301b19161766010000000000009185169190910217600160501b600160f01b0319166a01000000000000000000009390941692909202600160701b600160f01b03191692909217600160701b6001600160801b0390921691909102179055565b60695460009062000a799063ffffffff6a010000000000000000000082048116911662000ca7565b905090565b600054610100900460ff1662000ada5760405162461bcd60e51b815260206004820152602b60248201526000805160206200285f83398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000119565b620004a03362000b41565b6033546001600160a01b03163314620004a05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000119565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052601160045260246000fd5b60008282101562000bbe5762000bbe62000b93565b500390565b600060208083528351808285015260005b8181101562000bf25785810183015185820160400152820162000bd4565b8181111562000c05576000604083870101525b50601f01601f1916929092016040019392505050565b600063ffffffff80831681851680830382111562000c3d5762000c3d62000b93565b01949350505050565b600063ffffffff8084168062000c6c57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161562000c9e5762000c9e62000b93565b02949350505050565b60006001600160401b0382811684821680830382111562000c3d5762000c3d62000b93565b611b438062000cdc6000396000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c8063935f029e1161012a578063cc731b02116100bd578063f45e65d81161008c578063f8c68de011610071578063f8c68de014610575578063fd32aa0f1461057d578063ffa1ad741461058557600080fd5b8063f45e65d814610558578063f68016b71461056157600080fd5b8063cc731b0214610400578063dac6e63a14610534578063e81b2c6d1461053c578063f2fde38b1461054557600080fd5b8063bc49ce5f116100f9578063bc49ce5f146103ca578063c4e8ddfa146103d2578063c71973f6146103da578063c9b26f61146103ed57600080fd5b8063935f029e146103945780639b7d7f0a146103a7578063a7119869146103af578063b40a817c146103b757600080fd5b80634add321d116101bd57806354fd4d501161018c57806361d157681161017157806361d1576814610366578063715018a61461036e5780638da5cb5b1461037657600080fd5b806354fd4d50146103155780635d73369c1461035e57600080fd5b80634add321d146102b25780634d9f1559146102d35780634f16540b146102db5780635228a6ac1461030257600080fd5b806318d13918116101f957806318d139181461028457806319f5cea8146102995780631fd19ee1146102a157806348cd4cb1146102a957600080fd5b806306c926571461022b578063078f29cf146102465780630a49cb03146102735780630c18c1621461027b575b600080fd5b61023361058d565b6040519081526020015b60405180910390f35b61024e6105bb565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161023d565b61024e6105f4565b61023360655481565b610297610292366004611677565b610624565b005b610233610638565b61024e610663565b610233606a5481565b6102ba61068d565b60405167ffffffffffffffff909116815260200161023d565b61024e6106b3565b6102337f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b610297610310366004611807565b6106e3565b6103516040518060400160405280600681526020017f312e31302e30000000000000000000000000000000000000000000000000000081525081565b60405161023d91906119aa565b610233610a79565b610233610aa4565b610297610acf565b60335473ffffffffffffffffffffffffffffffffffffffff1661024e565b6102976103a23660046119bd565b610ae3565b61024e610af9565b61024e610b29565b6102976103c53660046119df565b610b59565b610233610b6a565b61024e610b95565b6102976103e83660046119fa565b610bc5565b6102976103fb366004611a16565b610bd6565b6104c46040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b60405161023d9190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61024e610be7565b61023360675481565b610297610553366004611677565b610c17565b61023360665481565b6068546102ba9067ffffffffffffffff1681565b610233610ccb565b610233610cf6565b610233600081565b6105b860017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d611a5e565b81565b60006105ef6105eb60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377611a5e565b5490565b905090565b60006105ef6105eb60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad611a5e565b61062c610d25565b61063581610da6565b50565b6105b860017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8611a5e565b60006105ef7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6069546000906105ef9063ffffffff6a0100000000000000000000820481169116611a75565b60006105ef6105eb60017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a6871816611a5e565b600054600390610100900460ff16158015610705575060005460ff8083169116105b610796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556107cf610e63565b6107d88b610c17565b6107e188610f02565b6107eb8a8a610f2a565b6107f487610fbb565b6107fd86610da6565b61083061082b60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598611a5e565b849055565b61086461085e60017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637611a5e565b83519055565b61089b61089260017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8611a5e565b60208401519055565b6108d26108c960017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377611a5e565b60408401519055565b61090961090060017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a6871816611a5e565b60608401519055565b61094061093760017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad611a5e565b60808401519055565b61097761096e60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d611a5e565b60a08401519055565b61098084611099565b610989856110c3565b61099161068d565b67ffffffffffffffff168767ffffffffffffffff161015610a0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640161078d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050505050505050565b6105b860017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637611a5e565b6105b860017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a6871816611a5e565b610ad7610d25565b610ae16000611537565b565b610aeb610d25565b610af58282610f2a565b5050565b60006105ef6105eb60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d611a5e565b60006105ef6105eb60017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637611a5e565b610b61610d25565b61063581610fbb565b6105b860017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598611a5e565b60006105ef6105eb60017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8611a5e565b610bcd610d25565b610635816110c3565b610bde610d25565b61063581610f02565b60006105ef6105eb60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598611a5e565b610c1f610d25565b73ffffffffffffffffffffffffffffffffffffffff8116610cc2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161078d565b61063581611537565b6105b860017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377611a5e565b6105b860017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad611a5e565b9055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ae1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161078d565b610dcf7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051610e5791906119aa565b60405180910390a35050565b600054610100900460ff16610efa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161078d565b610ae16115ae565b6067819055604080516020808201849052825180830390910181529082019091526000610e26565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051610fae91906119aa565b60405180910390a3505050565b610fc361068d565b67ffffffffffffffff168167ffffffffffffffff161015611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640161078d565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002610e26565b80158015906110a85750606a54155b156110b257606a55565b606a546000036106355743606a5550565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d617820626173650000000000000000000000606482015260840161078d565b6001816040015160ff161161120a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e20310000000000000000000000000000000000606482015260840161078d565b6068546080820151825167ffffffffffffffff9092169161122b9190611aa1565b63ffffffff161115611299576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640161078d565b6000816020015160ff1611611330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f7420626520300000000000000000000000000000000000606482015260840161078d565b8051602082015163ffffffff82169160ff90911690611350908290611ac0565b61135a9190611b0a565b63ffffffff16146113ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d6974000000000000000000606482015260840161078d565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161078d565b610ae133611537565b803573ffffffffffffffffffffffffffffffffffffffff8116811461167257600080fd5b919050565b60006020828403121561168957600080fd5b6116928261164e565b9392505050565b803567ffffffffffffffff8116811461167257600080fd5b60405160c0810167ffffffffffffffff811182821017156116fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803563ffffffff8116811461167257600080fd5b803560ff8116811461167257600080fd5b600060c0828403121561173857600080fd5b60405160c0810181811067ffffffffffffffff82111715611782577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290508061179183611701565b815261179f60208401611715565b60208201526117b060408401611715565b60408201526117c160608401611701565b60608201526117d260808401611701565b608082015260a08301356fffffffffffffffffffffffffffffffff811681146117fa57600080fd5b60a0919091015292915050565b6000806000806000806000806000808a8c0361028081121561182857600080fd5b6118318c61164e565b9a5060208c0135995060408c0135985060608c0135975061185460808d01611699565b965061186260a08d0161164e565b95506118718d60c08e01611726565b94506101808c013593506118886101a08d0161164e565b925060c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe40820112156118ba57600080fd5b506118c36116b1565b6118d06101c08d0161164e565b81526118df6101e08d0161164e565b60208201526118f16102008d0161164e565b60408201526119036102208d0161164e565b60608201526119156102408d0161164e565b60808201526119276102608d0161164e565b60a0820152809150509295989b9194979a5092959850565b6000815180845260005b8181101561196557602081850181015186830182015201611949565b81811115611977576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611692602083018461193f565b600080604083850312156119d057600080fd5b50508035926020909101359150565b6000602082840312156119f157600080fd5b61169282611699565b600060c08284031215611a0c57600080fd5b6116928383611726565b600060208284031215611a2857600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611a7057611a70611a2f565b500390565b600067ffffffffffffffff808316818516808303821115611a9857611a98611a2f565b01949350505050565b600063ffffffff808316818516808303821115611a9857611a98611a2f565b600063ffffffff80841680611afe577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615611b2d57611b2d611a2f565b0294935050505056fea164736f6c634300080f000a53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77001d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", } // SystemConfigABI is the input ABI used to generate the binding from. @@ -54,7 +63,7 @@ var SystemConfigABI = SystemConfigMetaData.ABI var SystemConfigBin = SystemConfigMetaData.Bin // DeploySystemConfig deploys a new Ethereum contract, binding an instance of SystemConfig to it. -func DeploySystemConfig(auth *bind.TransactOpts, backend bind.ContractBackend, _owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config ResourceMeteringResourceConfig, _validatorRewardScalar *big.Int) (common.Address, *types.Transaction, *SystemConfig, error) { +func DeploySystemConfig(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *SystemConfig, error) { parsed, err := SystemConfigMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -63,7 +72,7 @@ func DeploySystemConfig(auth *bind.TransactOpts, backend bind.ContractBackend, _ return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(SystemConfigBin), backend, _owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _validatorRewardScalar) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(SystemConfigBin), backend) if err != nil { return common.Address{}, nil, nil, err } @@ -167,11 +176,11 @@ func NewSystemConfigFilterer(address common.Address, filterer bind.ContractFilte // bindSystemConfig binds a generic wrapper to an already deployed contract. func bindSystemConfig(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := SystemConfigMetaData.GetAbi() + parsed, err := abi.JSON(strings.NewReader(SystemConfigABI)) if err != nil { return nil, err } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and @@ -212,6 +221,223 @@ func (_SystemConfig *SystemConfigTransactorRaw) Transact(opts *bind.TransactOpts return _SystemConfig.Contract.contract.Transact(opts, method, params...) } +// BATCHINBOXSLOT is a free data retrieval call binding the contract method 0xbc49ce5f. +// +// Solidity: function BATCH_INBOX_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCaller) BATCHINBOXSLOT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "BATCH_INBOX_SLOT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// BATCHINBOXSLOT is a free data retrieval call binding the contract method 0xbc49ce5f. +// +// Solidity: function BATCH_INBOX_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigSession) BATCHINBOXSLOT() ([32]byte, error) { + return _SystemConfig.Contract.BATCHINBOXSLOT(&_SystemConfig.CallOpts) +} + +// BATCHINBOXSLOT is a free data retrieval call binding the contract method 0xbc49ce5f. +// +// Solidity: function BATCH_INBOX_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCallerSession) BATCHINBOXSLOT() ([32]byte, error) { + return _SystemConfig.Contract.BATCHINBOXSLOT(&_SystemConfig.CallOpts) +} + +// L1CROSSDOMAINMESSENGERSLOT is a free data retrieval call binding the contract method 0x5d73369c. +// +// Solidity: function L1_CROSS_DOMAIN_MESSENGER_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCaller) L1CROSSDOMAINMESSENGERSLOT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "L1_CROSS_DOMAIN_MESSENGER_SLOT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// L1CROSSDOMAINMESSENGERSLOT is a free data retrieval call binding the contract method 0x5d73369c. +// +// Solidity: function L1_CROSS_DOMAIN_MESSENGER_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigSession) L1CROSSDOMAINMESSENGERSLOT() ([32]byte, error) { + return _SystemConfig.Contract.L1CROSSDOMAINMESSENGERSLOT(&_SystemConfig.CallOpts) +} + +// L1CROSSDOMAINMESSENGERSLOT is a free data retrieval call binding the contract method 0x5d73369c. +// +// Solidity: function L1_CROSS_DOMAIN_MESSENGER_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCallerSession) L1CROSSDOMAINMESSENGERSLOT() ([32]byte, error) { + return _SystemConfig.Contract.L1CROSSDOMAINMESSENGERSLOT(&_SystemConfig.CallOpts) +} + +// L1ERC721BRIDGESLOT is a free data retrieval call binding the contract method 0x19f5cea8. +// +// Solidity: function L1_ERC_721_BRIDGE_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCaller) L1ERC721BRIDGESLOT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "L1_ERC_721_BRIDGE_SLOT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// L1ERC721BRIDGESLOT is a free data retrieval call binding the contract method 0x19f5cea8. +// +// Solidity: function L1_ERC_721_BRIDGE_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigSession) L1ERC721BRIDGESLOT() ([32]byte, error) { + return _SystemConfig.Contract.L1ERC721BRIDGESLOT(&_SystemConfig.CallOpts) +} + +// L1ERC721BRIDGESLOT is a free data retrieval call binding the contract method 0x19f5cea8. +// +// Solidity: function L1_ERC_721_BRIDGE_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCallerSession) L1ERC721BRIDGESLOT() ([32]byte, error) { + return _SystemConfig.Contract.L1ERC721BRIDGESLOT(&_SystemConfig.CallOpts) +} + +// L1STANDARDBRIDGESLOT is a free data retrieval call binding the contract method 0xf8c68de0. +// +// Solidity: function L1_STANDARD_BRIDGE_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCaller) L1STANDARDBRIDGESLOT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "L1_STANDARD_BRIDGE_SLOT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// L1STANDARDBRIDGESLOT is a free data retrieval call binding the contract method 0xf8c68de0. +// +// Solidity: function L1_STANDARD_BRIDGE_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigSession) L1STANDARDBRIDGESLOT() ([32]byte, error) { + return _SystemConfig.Contract.L1STANDARDBRIDGESLOT(&_SystemConfig.CallOpts) +} + +// L1STANDARDBRIDGESLOT is a free data retrieval call binding the contract method 0xf8c68de0. +// +// Solidity: function L1_STANDARD_BRIDGE_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCallerSession) L1STANDARDBRIDGESLOT() ([32]byte, error) { + return _SystemConfig.Contract.L1STANDARDBRIDGESLOT(&_SystemConfig.CallOpts) +} + +// L2OUTPUTORACLESLOT is a free data retrieval call binding the contract method 0x61d15768. +// +// Solidity: function L2_OUTPUT_ORACLE_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCaller) L2OUTPUTORACLESLOT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "L2_OUTPUT_ORACLE_SLOT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// L2OUTPUTORACLESLOT is a free data retrieval call binding the contract method 0x61d15768. +// +// Solidity: function L2_OUTPUT_ORACLE_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigSession) L2OUTPUTORACLESLOT() ([32]byte, error) { + return _SystemConfig.Contract.L2OUTPUTORACLESLOT(&_SystemConfig.CallOpts) +} + +// L2OUTPUTORACLESLOT is a free data retrieval call binding the contract method 0x61d15768. +// +// Solidity: function L2_OUTPUT_ORACLE_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCallerSession) L2OUTPUTORACLESLOT() ([32]byte, error) { + return _SystemConfig.Contract.L2OUTPUTORACLESLOT(&_SystemConfig.CallOpts) +} + +// OPTIMISMMINTABLEERC20FACTORYSLOT is a free data retrieval call binding the contract method 0x06c92657. +// +// Solidity: function OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCaller) OPTIMISMMINTABLEERC20FACTORYSLOT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// OPTIMISMMINTABLEERC20FACTORYSLOT is a free data retrieval call binding the contract method 0x06c92657. +// +// Solidity: function OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigSession) OPTIMISMMINTABLEERC20FACTORYSLOT() ([32]byte, error) { + return _SystemConfig.Contract.OPTIMISMMINTABLEERC20FACTORYSLOT(&_SystemConfig.CallOpts) +} + +// OPTIMISMMINTABLEERC20FACTORYSLOT is a free data retrieval call binding the contract method 0x06c92657. +// +// Solidity: function OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCallerSession) OPTIMISMMINTABLEERC20FACTORYSLOT() ([32]byte, error) { + return _SystemConfig.Contract.OPTIMISMMINTABLEERC20FACTORYSLOT(&_SystemConfig.CallOpts) +} + +// OPTIMISMPORTALSLOT is a free data retrieval call binding the contract method 0xfd32aa0f. +// +// Solidity: function OPTIMISM_PORTAL_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCaller) OPTIMISMPORTALSLOT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "OPTIMISM_PORTAL_SLOT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// OPTIMISMPORTALSLOT is a free data retrieval call binding the contract method 0xfd32aa0f. +// +// Solidity: function OPTIMISM_PORTAL_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigSession) OPTIMISMPORTALSLOT() ([32]byte, error) { + return _SystemConfig.Contract.OPTIMISMPORTALSLOT(&_SystemConfig.CallOpts) +} + +// OPTIMISMPORTALSLOT is a free data retrieval call binding the contract method 0xfd32aa0f. +// +// Solidity: function OPTIMISM_PORTAL_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCallerSession) OPTIMISMPORTALSLOT() ([32]byte, error) { + return _SystemConfig.Contract.OPTIMISMPORTALSLOT(&_SystemConfig.CallOpts) +} + // UNSAFEBLOCKSIGNERSLOT is a free data retrieval call binding the contract method 0x4f16540b. // // Solidity: function UNSAFE_BLOCK_SIGNER_SLOT() view returns(bytes32) @@ -274,6 +500,37 @@ func (_SystemConfig *SystemConfigCallerSession) VERSION() (*big.Int, error) { return _SystemConfig.Contract.VERSION(&_SystemConfig.CallOpts) } +// BatchInbox is a free data retrieval call binding the contract method 0xdac6e63a. +// +// Solidity: function batchInbox() view returns(address addr_) +func (_SystemConfig *SystemConfigCaller) BatchInbox(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "batchInbox") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// BatchInbox is a free data retrieval call binding the contract method 0xdac6e63a. +// +// Solidity: function batchInbox() view returns(address addr_) +func (_SystemConfig *SystemConfigSession) BatchInbox() (common.Address, error) { + return _SystemConfig.Contract.BatchInbox(&_SystemConfig.CallOpts) +} + +// BatchInbox is a free data retrieval call binding the contract method 0xdac6e63a. +// +// Solidity: function batchInbox() view returns(address addr_) +func (_SystemConfig *SystemConfigCallerSession) BatchInbox() (common.Address, error) { + return _SystemConfig.Contract.BatchInbox(&_SystemConfig.CallOpts) +} + // BatcherHash is a free data retrieval call binding the contract method 0xe81b2c6d. // // Solidity: function batcherHash() view returns(bytes32) @@ -336,6 +593,130 @@ func (_SystemConfig *SystemConfigCallerSession) GasLimit() (uint64, error) { return _SystemConfig.Contract.GasLimit(&_SystemConfig.CallOpts) } +// L1CrossDomainMessenger is a free data retrieval call binding the contract method 0xa7119869. +// +// Solidity: function l1CrossDomainMessenger() view returns(address addr_) +func (_SystemConfig *SystemConfigCaller) L1CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "l1CrossDomainMessenger") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// L1CrossDomainMessenger is a free data retrieval call binding the contract method 0xa7119869. +// +// Solidity: function l1CrossDomainMessenger() view returns(address addr_) +func (_SystemConfig *SystemConfigSession) L1CrossDomainMessenger() (common.Address, error) { + return _SystemConfig.Contract.L1CrossDomainMessenger(&_SystemConfig.CallOpts) +} + +// L1CrossDomainMessenger is a free data retrieval call binding the contract method 0xa7119869. +// +// Solidity: function l1CrossDomainMessenger() view returns(address addr_) +func (_SystemConfig *SystemConfigCallerSession) L1CrossDomainMessenger() (common.Address, error) { + return _SystemConfig.Contract.L1CrossDomainMessenger(&_SystemConfig.CallOpts) +} + +// L1ERC721Bridge is a free data retrieval call binding the contract method 0xc4e8ddfa. +// +// Solidity: function l1ERC721Bridge() view returns(address addr_) +func (_SystemConfig *SystemConfigCaller) L1ERC721Bridge(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "l1ERC721Bridge") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// L1ERC721Bridge is a free data retrieval call binding the contract method 0xc4e8ddfa. +// +// Solidity: function l1ERC721Bridge() view returns(address addr_) +func (_SystemConfig *SystemConfigSession) L1ERC721Bridge() (common.Address, error) { + return _SystemConfig.Contract.L1ERC721Bridge(&_SystemConfig.CallOpts) +} + +// L1ERC721Bridge is a free data retrieval call binding the contract method 0xc4e8ddfa. +// +// Solidity: function l1ERC721Bridge() view returns(address addr_) +func (_SystemConfig *SystemConfigCallerSession) L1ERC721Bridge() (common.Address, error) { + return _SystemConfig.Contract.L1ERC721Bridge(&_SystemConfig.CallOpts) +} + +// L1StandardBridge is a free data retrieval call binding the contract method 0x078f29cf. +// +// Solidity: function l1StandardBridge() view returns(address addr_) +func (_SystemConfig *SystemConfigCaller) L1StandardBridge(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "l1StandardBridge") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// L1StandardBridge is a free data retrieval call binding the contract method 0x078f29cf. +// +// Solidity: function l1StandardBridge() view returns(address addr_) +func (_SystemConfig *SystemConfigSession) L1StandardBridge() (common.Address, error) { + return _SystemConfig.Contract.L1StandardBridge(&_SystemConfig.CallOpts) +} + +// L1StandardBridge is a free data retrieval call binding the contract method 0x078f29cf. +// +// Solidity: function l1StandardBridge() view returns(address addr_) +func (_SystemConfig *SystemConfigCallerSession) L1StandardBridge() (common.Address, error) { + return _SystemConfig.Contract.L1StandardBridge(&_SystemConfig.CallOpts) +} + +// L2OutputOracle is a free data retrieval call binding the contract method 0x4d9f1559. +// +// Solidity: function l2OutputOracle() view returns(address addr_) +func (_SystemConfig *SystemConfigCaller) L2OutputOracle(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "l2OutputOracle") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// L2OutputOracle is a free data retrieval call binding the contract method 0x4d9f1559. +// +// Solidity: function l2OutputOracle() view returns(address addr_) +func (_SystemConfig *SystemConfigSession) L2OutputOracle() (common.Address, error) { + return _SystemConfig.Contract.L2OutputOracle(&_SystemConfig.CallOpts) +} + +// L2OutputOracle is a free data retrieval call binding the contract method 0x4d9f1559. +// +// Solidity: function l2OutputOracle() view returns(address addr_) +func (_SystemConfig *SystemConfigCallerSession) L2OutputOracle() (common.Address, error) { + return _SystemConfig.Contract.L2OutputOracle(&_SystemConfig.CallOpts) +} + // MinimumGasLimit is a free data retrieval call binding the contract method 0x4add321d. // // Solidity: function minimumGasLimit() view returns(uint64) @@ -367,6 +748,68 @@ func (_SystemConfig *SystemConfigCallerSession) MinimumGasLimit() (uint64, error return _SystemConfig.Contract.MinimumGasLimit(&_SystemConfig.CallOpts) } +// OptimismMintableERC20Factory is a free data retrieval call binding the contract method 0x9b7d7f0a. +// +// Solidity: function optimismMintableERC20Factory() view returns(address addr_) +func (_SystemConfig *SystemConfigCaller) OptimismMintableERC20Factory(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "optimismMintableERC20Factory") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OptimismMintableERC20Factory is a free data retrieval call binding the contract method 0x9b7d7f0a. +// +// Solidity: function optimismMintableERC20Factory() view returns(address addr_) +func (_SystemConfig *SystemConfigSession) OptimismMintableERC20Factory() (common.Address, error) { + return _SystemConfig.Contract.OptimismMintableERC20Factory(&_SystemConfig.CallOpts) +} + +// OptimismMintableERC20Factory is a free data retrieval call binding the contract method 0x9b7d7f0a. +// +// Solidity: function optimismMintableERC20Factory() view returns(address addr_) +func (_SystemConfig *SystemConfigCallerSession) OptimismMintableERC20Factory() (common.Address, error) { + return _SystemConfig.Contract.OptimismMintableERC20Factory(&_SystemConfig.CallOpts) +} + +// OptimismPortal is a free data retrieval call binding the contract method 0x0a49cb03. +// +// Solidity: function optimismPortal() view returns(address addr_) +func (_SystemConfig *SystemConfigCaller) OptimismPortal(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "optimismPortal") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OptimismPortal is a free data retrieval call binding the contract method 0x0a49cb03. +// +// Solidity: function optimismPortal() view returns(address addr_) +func (_SystemConfig *SystemConfigSession) OptimismPortal() (common.Address, error) { + return _SystemConfig.Contract.OptimismPortal(&_SystemConfig.CallOpts) +} + +// OptimismPortal is a free data retrieval call binding the contract method 0x0a49cb03. +// +// Solidity: function optimismPortal() view returns(address addr_) +func (_SystemConfig *SystemConfigCallerSession) OptimismPortal() (common.Address, error) { + return _SystemConfig.Contract.OptimismPortal(&_SystemConfig.CallOpts) +} + // Overhead is a free data retrieval call binding the contract method 0x0c18c162. // // Solidity: function overhead() view returns(uint256) @@ -491,66 +934,66 @@ func (_SystemConfig *SystemConfigCallerSession) Scalar() (*big.Int, error) { return _SystemConfig.Contract.Scalar(&_SystemConfig.CallOpts) } -// UnsafeBlockSigner is a free data retrieval call binding the contract method 0x1fd19ee1. +// StartBlock is a free data retrieval call binding the contract method 0x48cd4cb1. // -// Solidity: function unsafeBlockSigner() view returns(address) -func (_SystemConfig *SystemConfigCaller) UnsafeBlockSigner(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function startBlock() view returns(uint256) +func (_SystemConfig *SystemConfigCaller) StartBlock(opts *bind.CallOpts) (*big.Int, error) { var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "unsafeBlockSigner") + err := _SystemConfig.contract.Call(opts, &out, "startBlock") if err != nil { - return *new(common.Address), err + return *new(*big.Int), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) return out0, err } -// UnsafeBlockSigner is a free data retrieval call binding the contract method 0x1fd19ee1. +// StartBlock is a free data retrieval call binding the contract method 0x48cd4cb1. // -// Solidity: function unsafeBlockSigner() view returns(address) -func (_SystemConfig *SystemConfigSession) UnsafeBlockSigner() (common.Address, error) { - return _SystemConfig.Contract.UnsafeBlockSigner(&_SystemConfig.CallOpts) +// Solidity: function startBlock() view returns(uint256) +func (_SystemConfig *SystemConfigSession) StartBlock() (*big.Int, error) { + return _SystemConfig.Contract.StartBlock(&_SystemConfig.CallOpts) } -// UnsafeBlockSigner is a free data retrieval call binding the contract method 0x1fd19ee1. +// StartBlock is a free data retrieval call binding the contract method 0x48cd4cb1. // -// Solidity: function unsafeBlockSigner() view returns(address) -func (_SystemConfig *SystemConfigCallerSession) UnsafeBlockSigner() (common.Address, error) { - return _SystemConfig.Contract.UnsafeBlockSigner(&_SystemConfig.CallOpts) +// Solidity: function startBlock() view returns(uint256) +func (_SystemConfig *SystemConfigCallerSession) StartBlock() (*big.Int, error) { + return _SystemConfig.Contract.StartBlock(&_SystemConfig.CallOpts) } -// ValidatorRewardScalar is a free data retrieval call binding the contract method 0xed579ad3. +// UnsafeBlockSigner is a free data retrieval call binding the contract method 0x1fd19ee1. // -// Solidity: function validatorRewardScalar() view returns(uint256) -func (_SystemConfig *SystemConfigCaller) ValidatorRewardScalar(opts *bind.CallOpts) (*big.Int, error) { +// Solidity: function unsafeBlockSigner() view returns(address addr_) +func (_SystemConfig *SystemConfigCaller) UnsafeBlockSigner(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "validatorRewardScalar") + err := _SystemConfig.contract.Call(opts, &out, "unsafeBlockSigner") if err != nil { - return *new(*big.Int), err + return *new(common.Address), err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) return out0, err } -// ValidatorRewardScalar is a free data retrieval call binding the contract method 0xed579ad3. +// UnsafeBlockSigner is a free data retrieval call binding the contract method 0x1fd19ee1. // -// Solidity: function validatorRewardScalar() view returns(uint256) -func (_SystemConfig *SystemConfigSession) ValidatorRewardScalar() (*big.Int, error) { - return _SystemConfig.Contract.ValidatorRewardScalar(&_SystemConfig.CallOpts) +// Solidity: function unsafeBlockSigner() view returns(address addr_) +func (_SystemConfig *SystemConfigSession) UnsafeBlockSigner() (common.Address, error) { + return _SystemConfig.Contract.UnsafeBlockSigner(&_SystemConfig.CallOpts) } -// ValidatorRewardScalar is a free data retrieval call binding the contract method 0xed579ad3. +// UnsafeBlockSigner is a free data retrieval call binding the contract method 0x1fd19ee1. // -// Solidity: function validatorRewardScalar() view returns(uint256) -func (_SystemConfig *SystemConfigCallerSession) ValidatorRewardScalar() (*big.Int, error) { - return _SystemConfig.Contract.ValidatorRewardScalar(&_SystemConfig.CallOpts) +// Solidity: function unsafeBlockSigner() view returns(address addr_) +func (_SystemConfig *SystemConfigCallerSession) UnsafeBlockSigner() (common.Address, error) { + return _SystemConfig.Contract.UnsafeBlockSigner(&_SystemConfig.CallOpts) } // Version is a free data retrieval call binding the contract method 0x54fd4d50. @@ -584,25 +1027,25 @@ func (_SystemConfig *SystemConfigCallerSession) Version() (string, error) { return _SystemConfig.Contract.Version(&_SystemConfig.CallOpts) } -// Initialize is a paid mutator transaction binding the contract method 0xfc7ffea7. +// Initialize is a paid mutator transaction binding the contract method 0x5228a6ac. // -// Solidity: function initialize(address _owner, uint256 _overhead, uint256 _scalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, uint256 _validatorRewardScalar) returns() -func (_SystemConfig *SystemConfigTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config ResourceMeteringResourceConfig, _validatorRewardScalar *big.Int) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "initialize", _owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _validatorRewardScalar) +// Solidity: function initialize(address _owner, uint256 _overhead, uint256 _scalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, uint256 _startBlock, address _batchInbox, (address,address,address,address,address,address) _addresses) returns() +func (_SystemConfig *SystemConfigTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config ResourceMeteringResourceConfig, _startBlock *big.Int, _batchInbox common.Address, _addresses SystemConfigAddresses) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "initialize", _owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _startBlock, _batchInbox, _addresses) } -// Initialize is a paid mutator transaction binding the contract method 0xfc7ffea7. +// Initialize is a paid mutator transaction binding the contract method 0x5228a6ac. // -// Solidity: function initialize(address _owner, uint256 _overhead, uint256 _scalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, uint256 _validatorRewardScalar) returns() -func (_SystemConfig *SystemConfigSession) Initialize(_owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config ResourceMeteringResourceConfig, _validatorRewardScalar *big.Int) (*types.Transaction, error) { - return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _validatorRewardScalar) +// Solidity: function initialize(address _owner, uint256 _overhead, uint256 _scalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, uint256 _startBlock, address _batchInbox, (address,address,address,address,address,address) _addresses) returns() +func (_SystemConfig *SystemConfigSession) Initialize(_owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config ResourceMeteringResourceConfig, _startBlock *big.Int, _batchInbox common.Address, _addresses SystemConfigAddresses) (*types.Transaction, error) { + return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _startBlock, _batchInbox, _addresses) } -// Initialize is a paid mutator transaction binding the contract method 0xfc7ffea7. +// Initialize is a paid mutator transaction binding the contract method 0x5228a6ac. // -// Solidity: function initialize(address _owner, uint256 _overhead, uint256 _scalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, uint256 _validatorRewardScalar) returns() -func (_SystemConfig *SystemConfigTransactorSession) Initialize(_owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config ResourceMeteringResourceConfig, _validatorRewardScalar *big.Int) (*types.Transaction, error) { - return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _validatorRewardScalar) +// Solidity: function initialize(address _owner, uint256 _overhead, uint256 _scalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, uint256 _startBlock, address _batchInbox, (address,address,address,address,address,address) _addresses) returns() +func (_SystemConfig *SystemConfigTransactorSession) Initialize(_owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config ResourceMeteringResourceConfig, _startBlock *big.Int, _batchInbox common.Address, _addresses SystemConfigAddresses) (*types.Transaction, error) { + return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _startBlock, _batchInbox, _addresses) } // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. @@ -731,27 +1174,6 @@ func (_SystemConfig *SystemConfigTransactorSession) SetUnsafeBlockSigner(_unsafe return _SystemConfig.Contract.SetUnsafeBlockSigner(&_SystemConfig.TransactOpts, _unsafeBlockSigner) } -// SetValidatorRewardScalar is a paid mutator transaction binding the contract method 0xecdd939d. -// -// Solidity: function setValidatorRewardScalar(uint256 _validatorRewardScalar) returns() -func (_SystemConfig *SystemConfigTransactor) SetValidatorRewardScalar(opts *bind.TransactOpts, _validatorRewardScalar *big.Int) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "setValidatorRewardScalar", _validatorRewardScalar) -} - -// SetValidatorRewardScalar is a paid mutator transaction binding the contract method 0xecdd939d. -// -// Solidity: function setValidatorRewardScalar(uint256 _validatorRewardScalar) returns() -func (_SystemConfig *SystemConfigSession) SetValidatorRewardScalar(_validatorRewardScalar *big.Int) (*types.Transaction, error) { - return _SystemConfig.Contract.SetValidatorRewardScalar(&_SystemConfig.TransactOpts, _validatorRewardScalar) -} - -// SetValidatorRewardScalar is a paid mutator transaction binding the contract method 0xecdd939d. -// -// Solidity: function setValidatorRewardScalar(uint256 _validatorRewardScalar) returns() -func (_SystemConfig *SystemConfigTransactorSession) SetValidatorRewardScalar(_validatorRewardScalar *big.Int) (*types.Transaction, error) { - return _SystemConfig.Contract.SetValidatorRewardScalar(&_SystemConfig.TransactOpts, _validatorRewardScalar) -} - // TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. // // Solidity: function transferOwnership(address newOwner) returns() diff --git a/op-bindings/bindings/systemconfig_more.go b/op-bindings/bindings/systemconfig_more.go index 4a9f461bc..994e2ef69 100644 --- a/op-bindings/bindings/systemconfig_more.go +++ b/op-bindings/bindings/systemconfig_more.go @@ -9,11 +9,11 @@ import ( "github.com/ethereum-optimism/optimism/op-bindings/solc" ) -const SystemConfigStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)1012_storage\"},{\"astId\":1003,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"_owner\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_address\"},{\"astId\":1004,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_array(t_uint256)1011_storage\"},{\"astId\":1005,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"overhead\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_uint256\"},{\"astId\":1006,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"scalar\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_uint256\"},{\"astId\":1007,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"batcherHash\",\"offset\":0,\"slot\":\"103\",\"type\":\"t_bytes32\"},{\"astId\":1008,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"gasLimit\",\"offset\":0,\"slot\":\"104\",\"type\":\"t_uint64\"},{\"astId\":1009,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"_resourceConfig\",\"offset\":0,\"slot\":\"105\",\"type\":\"t_struct(ResourceConfig)1013_storage\"},{\"astId\":1010,\"contract\":\"contracts/L1/SystemConfig.sol:SystemConfig\",\"label\":\"validatorRewardScalar\",\"offset\":0,\"slot\":\"106\",\"type\":\"t_uint256\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)1011_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\"},\"t_array(t_uint256)1012_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_struct(ResourceConfig)1013_storage\":{\"encoding\":\"inplace\",\"label\":\"struct ResourceMetering.ResourceConfig\",\"numberOfBytes\":\"32\"},\"t_uint128\":{\"encoding\":\"inplace\",\"label\":\"uint128\",\"numberOfBytes\":\"16\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint32\":{\"encoding\":\"inplace\",\"label\":\"uint32\",\"numberOfBytes\":\"4\"},\"t_uint64\":{\"encoding\":\"inplace\",\"label\":\"uint64\",\"numberOfBytes\":\"8\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" +const SystemConfigStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/L1/SystemConfig.sol:SystemConfig\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"src/L1/SystemConfig.sol:SystemConfig\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"src/L1/SystemConfig.sol:SystemConfig\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)50_storage\"},{\"astId\":1003,\"contract\":\"src/L1/SystemConfig.sol:SystemConfig\",\"label\":\"_owner\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_address\"},{\"astId\":1004,\"contract\":\"src/L1/SystemConfig.sol:SystemConfig\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_array(t_uint256)49_storage\"},{\"astId\":1005,\"contract\":\"src/L1/SystemConfig.sol:SystemConfig\",\"label\":\"overhead\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_uint256\"},{\"astId\":1006,\"contract\":\"src/L1/SystemConfig.sol:SystemConfig\",\"label\":\"scalar\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_uint256\"},{\"astId\":1007,\"contract\":\"src/L1/SystemConfig.sol:SystemConfig\",\"label\":\"batcherHash\",\"offset\":0,\"slot\":\"103\",\"type\":\"t_bytes32\"},{\"astId\":1008,\"contract\":\"src/L1/SystemConfig.sol:SystemConfig\",\"label\":\"gasLimit\",\"offset\":0,\"slot\":\"104\",\"type\":\"t_uint64\"},{\"astId\":1009,\"contract\":\"src/L1/SystemConfig.sol:SystemConfig\",\"label\":\"_resourceConfig\",\"offset\":0,\"slot\":\"105\",\"type\":\"t_struct(ResourceConfig)1011_storage\"},{\"astId\":1010,\"contract\":\"src/L1/SystemConfig.sol:SystemConfig\",\"label\":\"startBlock\",\"offset\":0,\"slot\":\"106\",\"type\":\"t_uint256\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)49_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\",\"base\":\"t_uint256\"},\"t_array(t_uint256)50_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\",\"base\":\"t_uint256\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_struct(ResourceConfig)1011_storage\":{\"encoding\":\"inplace\",\"label\":\"struct ResourceMetering.ResourceConfig\",\"numberOfBytes\":\"32\"},\"t_uint128\":{\"encoding\":\"inplace\",\"label\":\"uint128\",\"numberOfBytes\":\"16\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint32\":{\"encoding\":\"inplace\",\"label\":\"uint32\",\"numberOfBytes\":\"4\"},\"t_uint64\":{\"encoding\":\"inplace\",\"label\":\"uint64\",\"numberOfBytes\":\"8\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" var SystemConfigStorageLayout = new(solc.StorageLayout) -var SystemConfigDeployedBin = "0x608060405234801561001057600080fd5b50600436106101775760003560e01c8063c71973f6116100d8578063ed579ad31161008c578063f68016b711610066578063f68016b714610439578063fc7ffea71461044d578063ffa1ad741461046057600080fd5b8063ed579ad314610414578063f2fde38b1461041d578063f45e65d81461043057600080fd5b8063cc731b02116100bd578063cc731b02146102c4578063e81b2c6d146103f8578063ecdd939d1461040157600080fd5b8063c71973f61461029e578063c9b26f61146102b157600080fd5b806354fd4d501161012f5780638da5cb5b116101145780638da5cb5b1461025a578063935f029e14610278578063b40a817c1461028b57600080fd5b806354fd4d501461023d578063715018a61461025257600080fd5b80631fd19ee1116101605780631fd19ee1146101ad5780634add321d146101f55780634f16540b1461021657600080fd5b80630c18c1621461017c57806318d1391814610198575b600080fd5b61018560655481565b6040519081526020015b60405180910390f35b6101ab6101a636600461134e565b610468565b005b7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08545b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161018f565b6101fd61052c565b60405167ffffffffffffffff909116815260200161018f565b6101857f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b610245610557565b60405161018f91906113ea565b6101ab6105fa565b60335473ffffffffffffffffffffffffffffffffffffffff166101d0565b6101ab6102863660046113fd565b61060e565b6101ab610299366004611437565b6106a7565b6101ab6102ac36600461158f565b610778565b6101ab6102bf3660046115ab565b61078c565b6103886040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b60405161018f9190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61018560675481565b6101ab61040f3660046115ab565b6107bc565b610185606a5481565b6101ab61042b36600461134e565b61088a565b61018560665481565b6068546101fd9067ffffffffffffffff1681565b6101ab61045b3660046115c4565b610924565b610185600081565b610470610ba9565b610498817f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0855565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161052091906113ea565b60405180910390a35050565b6069546000906105529063ffffffff6a0100000000000000000000820481169116611670565b905090565b60606105827f0000000000000000000000000000000000000000000000000000000000000000610c10565b6105ab7f0000000000000000000000000000000000000000000000000000000000000000610c10565b6105d47f0000000000000000000000000000000000000000000000000000000000000000610c10565b6040516020016105e69392919061169c565b604051602081830303815290604052905090565b610602610ba9565b61060c6000610cce565b565b610616610ba9565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161069a91906113ea565b60405180910390a3505050565b6106af610ba9565b6106b761052c565b67ffffffffffffffff168167ffffffffffffffff16101561071f5760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064015b60405180910390fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831690811790915560408051602080820193909352815180820390930183528101905260026104ef565b610780610ba9565b61078981610d45565b50565b610794610ba9565b60678190556040805160208082018490528251808303909101815290820190915260006104ef565b6107c4610ba9565b6127108111156108625760405162461bcd60e51b815260206004820152604860248201527f53797374656d436f6e6669673a20746865206d61782076616c7565206f66207660448201527f616c696461746f7220726577617264207363616c617220686173206265656e2060648201527f6578636565646564000000000000000000000000000000000000000000000000608482015260a401610716565b606a8190556040805160208082018490528251808303909101815290820190915260046104ef565b610892610ba9565b73ffffffffffffffffffffffffffffffffffffffff811661091b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610716565b61078981610cce565b600054610100900460ff16158080156109445750600054600160ff909116105b8061095e5750303b15801561095e575060005460ff166001145b6109d05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610716565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610a2e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610a36611137565b610a3f8961088a565b606588905560668790556067869055606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff87161790557f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08849055610aaf83610d45565b610ab761052c565b67ffffffffffffffff168567ffffffffffffffff161015610b1a5760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610716565b606a8290558015610b8257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60335473ffffffffffffffffffffffffffffffffffffffff16331461060c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610716565b60606000610c1d836111bc565b600101905060008167ffffffffffffffff811115610c3d57610c3d611452565b6040519080825280601f01601f191660200182016040528015610c67576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084610c7157509392505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115610ddb5760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610716565b6001816040015160ff1611610e585760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e203100000000000000000000000000000000006064820152608401610716565b6068546080820151825167ffffffffffffffff90921691610e799190611712565b63ffffffff161115610ecd5760405162461bcd60e51b815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610716565b6000816020015160ff1611610f4a5760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610716565b8051602082015163ffffffff82169160ff90911690610f6a908290611731565b610f74919061177b565b63ffffffff1614610fed5760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610716565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b600054610100900460ff166111b45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610716565b61060c61129f565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611205577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611231576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061124f57662386f26fc10000830492506010015b6305f5e1008310611267576305f5e100830492506008015b612710831061127b57612710830492506004015b6064831061128d576064830492506002015b600a8310611299576001015b92915050565b600054610100900460ff1661131c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610716565b61060c33610cce565b803573ffffffffffffffffffffffffffffffffffffffff8116811461134957600080fd5b919050565b60006020828403121561136057600080fd5b61136982611325565b9392505050565b60005b8381101561138b578181015183820152602001611373565b8381111561139a576000848401525b50505050565b600081518084526113b8816020860160208601611370565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061136960208301846113a0565b6000806040838503121561141057600080fd5b50508035926020909101359150565b803567ffffffffffffffff8116811461134957600080fd5b60006020828403121561144957600080fd5b6113698261141f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b803563ffffffff8116811461134957600080fd5b803560ff8116811461134957600080fd5b80356fffffffffffffffffffffffffffffffff8116811461134957600080fd5b600060c082840312156114d857600080fd5b60405160c0810181811067ffffffffffffffff82111715611522577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290508061153183611481565b815261153f60208401611495565b602082015261155060408401611495565b604082015261156160608401611481565b606082015261157260808401611481565b608082015261158360a084016114a6565b60a08201525092915050565b600060c082840312156115a157600080fd5b61136983836114c6565b6000602082840312156115bd57600080fd5b5035919050565b6000806000806000806000806101a0898b0312156115e157600080fd5b6115ea89611325565b975060208901359650604089013595506060890135945061160d60808a0161141f565b935061161b60a08a01611325565b925061162a8a60c08b016114c6565b915061018089013590509295985092959890939650565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851680830382111561169357611693611641565b01949350505050565b600084516116ae818460208901611370565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516116ea816001850160208a01611370565b60019201918201528351611705816002840160208801611370565b0160020195945050505050565b600063ffffffff80831681851680830382111561169357611693611641565b600063ffffffff8084168061176f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161561179e5761179e611641565b0294935050505056fea164736f6c634300080f000a" +var SystemConfigDeployedBin = "0x608060405234801561001057600080fd5b50600436106102265760003560e01c8063935f029e1161012a578063cc731b02116100bd578063f45e65d81161008c578063f8c68de011610071578063f8c68de014610575578063fd32aa0f1461057d578063ffa1ad741461058557600080fd5b8063f45e65d814610558578063f68016b71461056157600080fd5b8063cc731b0214610400578063dac6e63a14610534578063e81b2c6d1461053c578063f2fde38b1461054557600080fd5b8063bc49ce5f116100f9578063bc49ce5f146103ca578063c4e8ddfa146103d2578063c71973f6146103da578063c9b26f61146103ed57600080fd5b8063935f029e146103945780639b7d7f0a146103a7578063a7119869146103af578063b40a817c146103b757600080fd5b80634add321d116101bd57806354fd4d501161018c57806361d157681161017157806361d1576814610366578063715018a61461036e5780638da5cb5b1461037657600080fd5b806354fd4d50146103155780635d73369c1461035e57600080fd5b80634add321d146102b25780634d9f1559146102d35780634f16540b146102db5780635228a6ac1461030257600080fd5b806318d13918116101f957806318d139181461028457806319f5cea8146102995780631fd19ee1146102a157806348cd4cb1146102a957600080fd5b806306c926571461022b578063078f29cf146102465780630a49cb03146102735780630c18c1621461027b575b600080fd5b61023361058d565b6040519081526020015b60405180910390f35b61024e6105bb565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161023d565b61024e6105f4565b61023360655481565b610297610292366004611677565b610624565b005b610233610638565b61024e610663565b610233606a5481565b6102ba61068d565b60405167ffffffffffffffff909116815260200161023d565b61024e6106b3565b6102337f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b610297610310366004611807565b6106e3565b6103516040518060400160405280600681526020017f312e31302e30000000000000000000000000000000000000000000000000000081525081565b60405161023d91906119aa565b610233610a79565b610233610aa4565b610297610acf565b60335473ffffffffffffffffffffffffffffffffffffffff1661024e565b6102976103a23660046119bd565b610ae3565b61024e610af9565b61024e610b29565b6102976103c53660046119df565b610b59565b610233610b6a565b61024e610b95565b6102976103e83660046119fa565b610bc5565b6102976103fb366004611a16565b610bd6565b6104c46040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b60405161023d9190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61024e610be7565b61023360675481565b610297610553366004611677565b610c17565b61023360665481565b6068546102ba9067ffffffffffffffff1681565b610233610ccb565b610233610cf6565b610233600081565b6105b860017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d611a5e565b81565b60006105ef6105eb60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377611a5e565b5490565b905090565b60006105ef6105eb60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad611a5e565b61062c610d25565b61063581610da6565b50565b6105b860017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8611a5e565b60006105ef7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6069546000906105ef9063ffffffff6a0100000000000000000000820481169116611a75565b60006105ef6105eb60017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a6871816611a5e565b600054600390610100900460ff16158015610705575060005460ff8083169116105b610796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556107cf610e63565b6107d88b610c17565b6107e188610f02565b6107eb8a8a610f2a565b6107f487610fbb565b6107fd86610da6565b61083061082b60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598611a5e565b849055565b61086461085e60017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637611a5e565b83519055565b61089b61089260017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8611a5e565b60208401519055565b6108d26108c960017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377611a5e565b60408401519055565b61090961090060017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a6871816611a5e565b60608401519055565b61094061093760017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad611a5e565b60808401519055565b61097761096e60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d611a5e565b60a08401519055565b61098084611099565b610989856110c3565b61099161068d565b67ffffffffffffffff168767ffffffffffffffff161015610a0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640161078d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050505050505050565b6105b860017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637611a5e565b6105b860017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a6871816611a5e565b610ad7610d25565b610ae16000611537565b565b610aeb610d25565b610af58282610f2a565b5050565b60006105ef6105eb60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d611a5e565b60006105ef6105eb60017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637611a5e565b610b61610d25565b61063581610fbb565b6105b860017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598611a5e565b60006105ef6105eb60017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8611a5e565b610bcd610d25565b610635816110c3565b610bde610d25565b61063581610f02565b60006105ef6105eb60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598611a5e565b610c1f610d25565b73ffffffffffffffffffffffffffffffffffffffff8116610cc2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161078d565b61063581611537565b6105b860017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377611a5e565b6105b860017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad611a5e565b9055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ae1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161078d565b610dcf7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051610e5791906119aa565b60405180910390a35050565b600054610100900460ff16610efa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161078d565b610ae16115ae565b6067819055604080516020808201849052825180830390910181529082019091526000610e26565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051610fae91906119aa565b60405180910390a3505050565b610fc361068d565b67ffffffffffffffff168167ffffffffffffffff161015611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640161078d565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002610e26565b80158015906110a85750606a54155b156110b257606a55565b606a546000036106355743606a5550565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d617820626173650000000000000000000000606482015260840161078d565b6001816040015160ff161161120a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e20310000000000000000000000000000000000606482015260840161078d565b6068546080820151825167ffffffffffffffff9092169161122b9190611aa1565b63ffffffff161115611299576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640161078d565b6000816020015160ff1611611330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f7420626520300000000000000000000000000000000000606482015260840161078d565b8051602082015163ffffffff82169160ff90911690611350908290611ac0565b61135a9190611b0a565b63ffffffff16146113ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d6974000000000000000000606482015260840161078d565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161078d565b610ae133611537565b803573ffffffffffffffffffffffffffffffffffffffff8116811461167257600080fd5b919050565b60006020828403121561168957600080fd5b6116928261164e565b9392505050565b803567ffffffffffffffff8116811461167257600080fd5b60405160c0810167ffffffffffffffff811182821017156116fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803563ffffffff8116811461167257600080fd5b803560ff8116811461167257600080fd5b600060c0828403121561173857600080fd5b60405160c0810181811067ffffffffffffffff82111715611782577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290508061179183611701565b815261179f60208401611715565b60208201526117b060408401611715565b60408201526117c160608401611701565b60608201526117d260808401611701565b608082015260a08301356fffffffffffffffffffffffffffffffff811681146117fa57600080fd5b60a0919091015292915050565b6000806000806000806000806000808a8c0361028081121561182857600080fd5b6118318c61164e565b9a5060208c0135995060408c0135985060608c0135975061185460808d01611699565b965061186260a08d0161164e565b95506118718d60c08e01611726565b94506101808c013593506118886101a08d0161164e565b925060c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe40820112156118ba57600080fd5b506118c36116b1565b6118d06101c08d0161164e565b81526118df6101e08d0161164e565b60208201526118f16102008d0161164e565b60408201526119036102208d0161164e565b60608201526119156102408d0161164e565b60808201526119276102608d0161164e565b60a0820152809150509295989b9194979a5092959850565b6000815180845260005b8181101561196557602081850181015186830182015201611949565b81811115611977576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611692602083018461193f565b600080604083850312156119d057600080fd5b50508035926020909101359150565b6000602082840312156119f157600080fd5b61169282611699565b600060c08284031215611a0c57600080fd5b6116928383611726565b600060208284031215611a2857600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611a7057611a70611a2f565b500390565b600067ffffffffffffffff808316818516808303821115611a9857611a98611a2f565b01949350505050565b600063ffffffff808316818516808303821115611a9857611a98611a2f565b600063ffffffff80841680611afe577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615611b2d57611b2d611a2f565b0294935050505056fea164736f6c634300080f000a" func init() { if err := json.Unmarshal([]byte(SystemConfigStorageLayoutJSON), SystemConfigStorageLayout); err != nil { diff --git a/op-bindings/bindings/weth9.go b/op-bindings/bindings/weth9.go index 026f2e1ae..587e8bec5 100644 --- a/op-bindings/bindings/weth9.go +++ b/op-bindings/bindings/weth9.go @@ -26,13 +26,12 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription - _ = abi.ConvertType ) // WETH9MetaData contains all meta data concerning the WETH9 contract. var WETH9MetaData = &bind.MetaData{ ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"guy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"guy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b50610115565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100bb57805160ff19168380011785556100e8565b828001600101855582156100e8579182015b828111156100e85782518255916020019190600101906100cd565b506100f49291506100f8565b5090565b61011291905b808211156100f457600081556001016100fe565b90565b6107f9806101246000396000f3fe6080604052600436106100bc5760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146102cb578063d0e30db0146100bc578063dd62ed3e14610311576100bc565b8063313ce5671461024b57806370a082311461027657806395d89b41146102b6576100bc565b806318160ddd116100a557806318160ddd146101aa57806323b872dd146101d15780632e1a7d4d14610221576100bc565b806306fdde03146100c6578063095ea7b314610150575b6100c4610359565b005b3480156100d257600080fd5b506100db6103a8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101155781810151838201526020016100fd565b50505050905090810190601f1680156101425780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015c57600080fd5b506101966004803603604081101561017357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610454565b604080519115158252519081900360200190f35b3480156101b657600080fd5b506101bf6104c7565b60408051918252519081900360200190f35b3480156101dd57600080fd5b50610196600480360360608110156101f457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356104cb565b34801561022d57600080fd5b506100c46004803603602081101561024457600080fd5b503561066b565b34801561025757600080fd5b50610260610700565b6040805160ff9092168252519081900360200190f35b34801561028257600080fd5b506101bf6004803603602081101561029957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610709565b3480156102c257600080fd5b506100db61071b565b3480156102d757600080fd5b50610196600480360360408110156102ee57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610793565b34801561031d57600080fd5b506101bf6004803603604081101561033457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166107a7565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b820191906000526020600020905b81548152906001019060200180831161042f57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120548211156104fd57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84163314801590610573575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105ed5773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156105b557600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020805483900390555b73ffffffffffffffffffffffffffffffffffffffff808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b3360009081526003602052604090205481111561068757600080fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f193505050501580156106c6573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b60006107a03384846104cb565b9392505050565b60046020908152600092835260408084209091529082529020548156fea265627a7a723158204eab82d55ccccb4cf646ee07646b140ab70b2b0f5227beb92f7394b56ccdc42364736f6c63430005110032", + Bin: "0x60c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b50610115565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100bb57805160ff19168380011785556100e8565b828001600101855582156100e8579182015b828111156100e85782518255916020019190600101906100cd565b506100f49291506100f8565b5090565b61011291905b808211156100f457600081556001016100fe565b90565b6107f9806101246000396000f3fe6080604052600436106100bc5760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146102cb578063d0e30db0146100bc578063dd62ed3e14610311576100bc565b8063313ce5671461024b57806370a082311461027657806395d89b41146102b6576100bc565b806318160ddd116100a557806318160ddd146101aa57806323b872dd146101d15780632e1a7d4d14610221576100bc565b806306fdde03146100c6578063095ea7b314610150575b6100c4610359565b005b3480156100d257600080fd5b506100db6103a8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101155781810151838201526020016100fd565b50505050905090810190601f1680156101425780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015c57600080fd5b506101966004803603604081101561017357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610454565b604080519115158252519081900360200190f35b3480156101b657600080fd5b506101bf6104c7565b60408051918252519081900360200190f35b3480156101dd57600080fd5b50610196600480360360608110156101f457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356104cb565b34801561022d57600080fd5b506100c46004803603602081101561024457600080fd5b503561066b565b34801561025757600080fd5b50610260610700565b6040805160ff9092168252519081900360200190f35b34801561028257600080fd5b506101bf6004803603602081101561029957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610709565b3480156102c257600080fd5b506100db61071b565b3480156102d757600080fd5b50610196600480360360408110156102ee57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610793565b34801561031d57600080fd5b506101bf6004803603604081101561033457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166107a7565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b820191906000526020600020905b81548152906001019060200180831161042f57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120548211156104fd57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84163314801590610573575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105ed5773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156105b557600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020805483900390555b73ffffffffffffffffffffffffffffffffffffffff808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b3360009081526003602052604090205481111561068757600080fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f193505050501580156106c6573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b60006107a03384846104cb565b9392505050565b60046020908152600092835260408084209091529082529020548156fea265627a7a723158203b5b5adf37f507cc9ca5ac0b72acf7873b794171cc0eeb888a5f850e69fe540d64736f6c63430005110032", } // WETH9ABI is the input ABI used to generate the binding from. @@ -157,11 +156,11 @@ func NewWETH9Filterer(address common.Address, filterer bind.ContractFilterer) (* // bindWETH9 binds a generic wrapper to an already deployed contract. func bindWETH9(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := WETH9MetaData.GetAbi() + parsed, err := abi.JSON(strings.NewReader(WETH9ABI)) if err != nil { return nil, err } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and diff --git a/op-bindings/bindings/weth9_more.go b/op-bindings/bindings/weth9_more.go index a8d984013..7530f273d 100644 --- a/op-bindings/bindings/weth9_more.go +++ b/op-bindings/bindings/weth9_more.go @@ -9,11 +9,11 @@ import ( "github.com/ethereum-optimism/optimism/op-bindings/solc" ) -const WETH9StorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/vendor/WETH9.sol:WETH9\",\"label\":\"name\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_string_storage\"},{\"astId\":1001,\"contract\":\"contracts/vendor/WETH9.sol:WETH9\",\"label\":\"symbol\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_string_storage\"},{\"astId\":1002,\"contract\":\"contracts/vendor/WETH9.sol:WETH9\",\"label\":\"decimals\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_uint8\"},{\"astId\":1003,\"contract\":\"contracts/vendor/WETH9.sol:WETH9\",\"label\":\"balanceOf\",\"offset\":0,\"slot\":\"3\",\"type\":\"t_mapping(t_address,t_uint256)\"},{\"astId\":1004,\"contract\":\"contracts/vendor/WETH9.sol:WETH9\",\"label\":\"allowance\",\"offset\":0,\"slot\":\"4\",\"type\":\"t_mapping(t_address,t_mapping(t_address,t_uint256))\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_mapping(t_address,t_mapping(t_address,t_uint256))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(address =\u003e uint256))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_address,t_uint256)\"},\"t_mapping(t_address,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint256\"},\"t_string_storage\":{\"encoding\":\"bytes\",\"label\":\"string\",\"numberOfBytes\":\"32\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" +const WETH9StorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/vendor/WETH9.sol:WETH9\",\"label\":\"name\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_string_storage\"},{\"astId\":1001,\"contract\":\"src/vendor/WETH9.sol:WETH9\",\"label\":\"symbol\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_string_storage\"},{\"astId\":1002,\"contract\":\"src/vendor/WETH9.sol:WETH9\",\"label\":\"decimals\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_uint8\"},{\"astId\":1003,\"contract\":\"src/vendor/WETH9.sol:WETH9\",\"label\":\"balanceOf\",\"offset\":0,\"slot\":\"3\",\"type\":\"t_mapping(t_address,t_uint256)\"},{\"astId\":1004,\"contract\":\"src/vendor/WETH9.sol:WETH9\",\"label\":\"allowance\",\"offset\":0,\"slot\":\"4\",\"type\":\"t_mapping(t_address,t_mapping(t_address,t_uint256))\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_mapping(t_address,t_mapping(t_address,t_uint256))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(address =\u003e uint256))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_address,t_uint256)\"},\"t_mapping(t_address,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint256\"},\"t_string_storage\":{\"encoding\":\"bytes\",\"label\":\"string\",\"numberOfBytes\":\"32\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" var WETH9StorageLayout = new(solc.StorageLayout) -var WETH9DeployedBin = "0x6080604052600436106100bc5760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146102cb578063d0e30db0146100bc578063dd62ed3e14610311576100bc565b8063313ce5671461024b57806370a082311461027657806395d89b41146102b6576100bc565b806318160ddd116100a557806318160ddd146101aa57806323b872dd146101d15780632e1a7d4d14610221576100bc565b806306fdde03146100c6578063095ea7b314610150575b6100c4610359565b005b3480156100d257600080fd5b506100db6103a8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101155781810151838201526020016100fd565b50505050905090810190601f1680156101425780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015c57600080fd5b506101966004803603604081101561017357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610454565b604080519115158252519081900360200190f35b3480156101b657600080fd5b506101bf6104c7565b60408051918252519081900360200190f35b3480156101dd57600080fd5b50610196600480360360608110156101f457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356104cb565b34801561022d57600080fd5b506100c46004803603602081101561024457600080fd5b503561066b565b34801561025757600080fd5b50610260610700565b6040805160ff9092168252519081900360200190f35b34801561028257600080fd5b506101bf6004803603602081101561029957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610709565b3480156102c257600080fd5b506100db61071b565b3480156102d757600080fd5b50610196600480360360408110156102ee57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610793565b34801561031d57600080fd5b506101bf6004803603604081101561033457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166107a7565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b820191906000526020600020905b81548152906001019060200180831161042f57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120548211156104fd57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84163314801590610573575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105ed5773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156105b557600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020805483900390555b73ffffffffffffffffffffffffffffffffffffffff808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b3360009081526003602052604090205481111561068757600080fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f193505050501580156106c6573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b60006107a03384846104cb565b9392505050565b60046020908152600092835260408084209091529082529020548156fea265627a7a723158204eab82d55ccccb4cf646ee07646b140ab70b2b0f5227beb92f7394b56ccdc42364736f6c63430005110032" +var WETH9DeployedBin = "0x6080604052600436106100bc5760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146102cb578063d0e30db0146100bc578063dd62ed3e14610311576100bc565b8063313ce5671461024b57806370a082311461027657806395d89b41146102b6576100bc565b806318160ddd116100a557806318160ddd146101aa57806323b872dd146101d15780632e1a7d4d14610221576100bc565b806306fdde03146100c6578063095ea7b314610150575b6100c4610359565b005b3480156100d257600080fd5b506100db6103a8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101155781810151838201526020016100fd565b50505050905090810190601f1680156101425780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015c57600080fd5b506101966004803603604081101561017357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610454565b604080519115158252519081900360200190f35b3480156101b657600080fd5b506101bf6104c7565b60408051918252519081900360200190f35b3480156101dd57600080fd5b50610196600480360360608110156101f457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356104cb565b34801561022d57600080fd5b506100c46004803603602081101561024457600080fd5b503561066b565b34801561025757600080fd5b50610260610700565b6040805160ff9092168252519081900360200190f35b34801561028257600080fd5b506101bf6004803603602081101561029957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610709565b3480156102c257600080fd5b506100db61071b565b3480156102d757600080fd5b50610196600480360360408110156102ee57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610793565b34801561031d57600080fd5b506101bf6004803603604081101561033457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166107a7565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b820191906000526020600020905b81548152906001019060200180831161042f57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120548211156104fd57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84163314801590610573575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105ed5773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156105b557600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020805483900390555b73ffffffffffffffffffffffffffffffffffffffff808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b3360009081526003602052604090205481111561068757600080fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f193505050501580156106c6573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b60006107a03384846104cb565b9392505050565b60046020908152600092835260408084209091529082529020548156fea265627a7a723158203b5b5adf37f507cc9ca5ac0b72acf7873b794171cc0eeb888a5f850e69fe540d64736f6c63430005110032" func init() { if err := json.Unmarshal([]byte(WETH9StorageLayoutJSON), WETH9StorageLayout); err != nil { diff --git a/op-bindings/doc.go b/op-bindings/doc.go index 6de6f636e..1e9f19816 100644 --- a/op-bindings/doc.go +++ b/op-bindings/doc.go @@ -7,4 +7,4 @@ To regenerate the bindings, run `make` The following programs are required: `jq`, `abigen`, and `solc` (at version 0.8.10) */ -package bindings +package op_bindings diff --git a/op-bindings/foundry/artifact.go b/op-bindings/foundry/artifact.go new file mode 100644 index 000000000..85337ac44 --- /dev/null +++ b/op-bindings/foundry/artifact.go @@ -0,0 +1,32 @@ +package foundry + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" + "github.com/ethereum/go-ethereum/common/hexutil" +) + +// Artifact represents a foundry compilation artifact. +// The Abi is specifically left as a json.RawMessage because +// round trip marshaling/unmarshaling of the abi.ABI type +// causes issues. +type Artifact struct { + Abi json.RawMessage `json:"abi"` + StorageLayout solc.StorageLayout `json:"storageLayout"` + DeployedBytecode DeployedBytecode `json:"deployedBytecode"` + Bytecode Bytecode `json:"bytecode"` +} + +type DeployedBytecode struct { + SourceMap string `json:"sourceMap"` + Object hexutil.Bytes `json:"object"` + LinkReferences json.RawMessage `json:"linkReferences"` + ImmutableReferences json.RawMessage `json:"immutableReferences"` +} + +type Bytecode struct { + SourceMap string `json:"sourceMap"` + Object hexutil.Bytes `json:"object"` + LinkReferences json.RawMessage `json:"linkReferences"` +} diff --git a/op-bindings/gen/main.go b/op-bindings/gen/main.go index caf3a645d..991195ed7 100644 --- a/op-bindings/gen/main.go +++ b/op-bindings/gen/main.go @@ -2,80 +2,183 @@ package main import ( "encoding/json" + "errors" "flag" "log" "os" + "os/exec" + "path" "path/filepath" + "regexp" "strings" "text/template" "github.com/ethereum-optimism/optimism/op-bindings/ast" - "github.com/ethereum-optimism/optimism/op-bindings/hardhat" + "github.com/ethereum-optimism/optimism/op-bindings/foundry" ) type flags struct { - ArtifactsDir string - Contracts string - OutDir string - Package string + ForgeArtifacts string + Contracts string + SourceMaps string + OutDir string + Package string + MonorepoBase string } type data struct { - Name string - StorageLayout string - DeployedBin string - Package string + Name string + StorageLayout string + DeployedBin string + Package string + DeployedSourceMap string } func main() { var f flags - flag.StringVar(&f.ArtifactsDir, "artifacts", "", "Comma-separated list of directories containing artifacts and build info") + flag.StringVar(&f.ForgeArtifacts, "forge-artifacts", "", "Forge artifacts directory, to load sourcemaps from, if available") flag.StringVar(&f.OutDir, "out", "", "Output directory to put code in") - flag.StringVar(&f.Contracts, "contracts", "", "Comma-separated list of contracts to generate code for") + flag.StringVar(&f.Contracts, "contracts", "artifacts.json", "Path to file containing list of contracts to generate bindings for") + flag.StringVar(&f.SourceMaps, "source-maps", "", "Comma-separated list of contracts to generate source-maps for") flag.StringVar(&f.Package, "package", "artifacts", "Go package name") + flag.StringVar(&f.MonorepoBase, "monorepo-base", "", "Base of the monorepo") flag.Parse() - artifacts := strings.Split(f.ArtifactsDir, ",") - contracts := strings.Split(f.Contracts, ",") + if f.MonorepoBase == "" { + log.Fatal("must provide -monorepo-base") + } + log.Printf("Using monorepo base %s\n", f.MonorepoBase) - if len(artifacts) == 0 { - log.Fatalf("must define a list of artifacts") + contractData, err := os.ReadFile(f.Contracts) + if err != nil { + log.Fatal("error reading contract list: %w\n", err) + } + contracts := []string{} + if err := json.Unmarshal(contractData, &contracts); err != nil { + log.Fatal("error parsing contract list: %w\n", err) + } + + sourceMaps := strings.Split(f.SourceMaps, ",") + sourceMapsSet := make(map[string]struct{}) + for _, k := range sourceMaps { + sourceMapsSet[k] = struct{}{} } if len(contracts) == 0 { log.Fatalf("must define a list of contracts") } - hh, err := hardhat.New("dummy", artifacts, nil) + t := template.Must(template.New("artifact").Parse(tmpl)) + + // Make a temp dir to hold all the inputs for abigen + dir, err := os.MkdirTemp("", "op-bindings") if err != nil { - log.Fatalln("error reading artifacts:", err) + log.Fatal(err) + } + log.Printf("Using package %s\n", f.Package) + + defer os.RemoveAll(dir) + log.Printf("created temp dir %s\n", dir) + + // If some contracts have the same name then the path to their + // artifact depends on their full import path. Scan over all artifacts + // and hold a mapping from the contract name to the contract path. + // Walk walks the directory deterministically, so the later instance + // of the contract with the same name will be used + re := regexp.MustCompile(`\.\d+\.\d+\.\d+`) + artifactPaths := make(map[string]string) + if err := filepath.Walk(f.ForgeArtifacts, + func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + + if strings.HasSuffix(path, ".json") { + base := filepath.Base(path) + name := strings.TrimSuffix(base, ".json") + + // remove the compiler version from the name + sanitized := re.ReplaceAllString(name, "") + if _, ok := artifactPaths[sanitized]; !ok { + artifactPaths[sanitized] = path + } + } + return nil + }); err != nil { + log.Fatal(err) } - - t := template.Must(template.New("artifact").Parse(tmpl)) for _, name := range contracts { - art, err := hh.GetArtifact(name) + log.Printf("generating code for %s\n", name) + + artifactPath := path.Join(f.ForgeArtifacts, name+".sol", name+".json") + forgeArtifactData, err := os.ReadFile(artifactPath) + if errors.Is(err, os.ErrNotExist) { + log.Printf("cannot find forge-artifact for %s at standard path %s, trying %s\n", name, artifactPath, artifactPaths[name]) + artifactPath = artifactPaths[name] + forgeArtifactData, err = os.ReadFile(artifactPath) + if errors.Is(err, os.ErrNotExist) { + log.Fatalf("cannot find forge-artifact of %q\n", name) + } + } + + log.Printf("using forge-artifact %s\n", artifactPath) + var artifact foundry.Artifact + if err := json.Unmarshal(forgeArtifactData, &artifact); err != nil { + log.Fatalf("failed to parse forge artifact of %q: %v\n", name, err) + } + + rawAbi := artifact.Abi + if err != nil { + log.Fatalf("error marshaling abi: %v\n", err) + } + abiFile := path.Join(dir, name+".abi") + if err := os.WriteFile(abiFile, rawAbi, 0o600); err != nil { + log.Fatalf("error writing file: %v\n", err) + } + rawBytecode := artifact.Bytecode.Object.String() if err != nil { - log.Fatalf("error reading artifact %s: %v\n", name, err) + log.Fatalf("error marshaling bytecode: %v\n", err) + } + bytecodeFile := path.Join(dir, name+".bin") + if err := os.WriteFile(bytecodeFile, []byte(rawBytecode), 0o600); err != nil { + log.Fatalf("error writing file: %v\n", err) } - storage, err := hh.GetStorageLayout(name) + cwd, err := os.Getwd() if err != nil { - log.Fatalf("error reading storage layout %s: %v\n", name, err) + log.Fatalf("error getting cwd: %v\n", err) + } + + lowerName := strings.ToLower(name) + outFile := path.Join(cwd, f.Package, lowerName+".go") + + cmd := exec.Command("abigen", "--abi", abiFile, "--bin", bytecodeFile, "--pkg", f.Package, "--type", name, "--out", outFile) + cmd.Stdout = os.Stdout + + if err := cmd.Run(); err != nil { + log.Fatalf("error running abigen: %v\n", err) } - canonicalStorage := ast.CanonicalizeASTIDs(storage) + storage := artifact.StorageLayout + canonicalStorage := ast.CanonicalizeASTIDs(&storage, f.MonorepoBase) ser, err := json.Marshal(canonicalStorage) if err != nil { log.Fatalf("error marshaling storage: %v\n", err) } serStr := strings.Replace(string(ser), "\"", "\\\"", -1) + deployedSourceMap := "" + if _, ok := sourceMapsSet[name]; ok { + deployedSourceMap = artifact.DeployedBytecode.SourceMap + } + d := data{ - Name: name, - StorageLayout: serStr, - DeployedBin: art.DeployedBytecode.String(), - Package: f.Package, + Name: name, + StorageLayout: serStr, + DeployedBin: artifact.DeployedBytecode.Object.String(), + Package: f.Package, + DeployedSourceMap: deployedSourceMap, } fname := filepath.Join(f.OutDir, strings.ToLower(name)+"_more.go") @@ -112,7 +215,9 @@ const {{.Name}}StorageLayoutJSON = "{{.StorageLayout}}" var {{.Name}}StorageLayout = new(solc.StorageLayout) var {{.Name}}DeployedBin = "{{.DeployedBin}}" - +{{if .DeployedSourceMap}} +var {{.Name}}DeployedSourceMap = "{{.DeployedSourceMap}}" +{{end}} func init() { if err := json.Unmarshal([]byte({{.Name}}StorageLayoutJSON), {{.Name}}StorageLayout); err != nil { panic(err) diff --git a/op-bindings/gen_bindings.sh b/op-bindings/gen_bindings.sh deleted file mode 100644 index 16ea76085..000000000 --- a/op-bindings/gen_bindings.sh +++ /dev/null @@ -1,57 +0,0 @@ -#/bin/bash -set -eu - -CONTRACTS_PATH="../packages/contracts/" - - -if [ "$#" -ne 2 ]; then - echo "This script takes 2 arguments - CONTRACT_NAME PACKAGE" - exit 1 -fi - -need_cmd() { - if ! command -v "$1" > /dev/null 2>&1; then - echo "need '$1' (command not found)" - exit 1 - fi -} - -need_cmd forge -need_cmd abigen - -NAME=$1 -# This can handle both fully qualified syntax or just -# the name of the contract. -# Fully qualified: path-to-contract-file:contract-name -TYPE=$(echo "$NAME" | cut -d ':' -f2) -PACKAGE=$2 - -# Convert to lower case to respect golang package naming conventions -TYPE_LOWER=$(echo ${TYPE} | tr '[:upper:]' '[:lower:]') -FILENAME="${TYPE_LOWER}_deployed.go" - - -mkdir -p bin -TEMP=$(mktemp -d) - -CWD=$(pwd) -# Build contracts -cd ${CONTRACTS_PATH} -forge inspect ${NAME} abi > ${TEMP}/${TYPE}.abi -forge inspect ${NAME} bytecode > ${TEMP}/${TYPE}.bin -forge inspect ${NAME} deployedBytecode > ${CWD}/bin/${TYPE_LOWER}_deployed.hex - -# Run ABIGEN -cd ${CWD} -abigen \ - --abi ${TEMP}/${TYPE}.abi \ - --bin ${TEMP}/${TYPE}.bin \ - --pkg ${PACKAGE} \ - --type ${TYPE} \ - --out ./${PACKAGE}/${TYPE_LOWER}.go - -# Run Types extractor -go run ./extractor/main.go \ - --dir ./${PACKAGE} \ - --name ${TYPE_LOWER}.go \ - --pkg ${PACKAGE} diff --git a/op-bindings/hardhat/hardhat.go b/op-bindings/hardhat/hardhat.go index 3ab7c604e..492bb0228 100644 --- a/op-bindings/hardhat/hardhat.go +++ b/op-bindings/hardhat/hardhat.go @@ -136,9 +136,7 @@ func (h *Hardhat) initArtifacts() error { return nil } name := filepath.Join(artifactPath, path) - if strings.Contains(name, ".DS_Store") { - return nil - } + if strings.Contains(name, "build-info") { return nil } diff --git a/op-bindings/hardhat/hardhat_test.go b/op-bindings/hardhat/hardhat_test.go index de12716e1..d111cb1d0 100644 --- a/op-bindings/hardhat/hardhat_test.go +++ b/op-bindings/hardhat/hardhat_test.go @@ -3,9 +3,9 @@ package hardhat_test import ( "testing" - "github.com/stretchr/testify/require" - "github.com/ethereum-optimism/optimism/op-bindings/hardhat" + + "github.com/stretchr/testify/require" ) func TestGetFullyQualifiedName(t *testing.T) { @@ -105,7 +105,7 @@ func TestHardhatGetArtifact(t *testing.T) { t.Parallel() hh, err := hardhat.New( - "sepolia", + "goerli", []string{"testdata/artifacts"}, []string{"testdata/deployments"}, ) @@ -120,7 +120,7 @@ func TestHardhatGetBuildInfo(t *testing.T) { t.Parallel() hh, err := hardhat.New( - "sepolia", + "goerli", []string{"testdata/artifacts"}, []string{"testdata/deployments"}, ) @@ -135,13 +135,13 @@ func TestHardhatGetDeployments(t *testing.T) { t.Parallel() hh, err := hardhat.New( - "sepolia", + "goerli", []string{"testdata/artifacts"}, []string{"testdata/deployments"}, ) require.Nil(t, err) - deployment, err := hh.GetDeployment("KromaPortal") + deployment, err := hh.GetDeployment("OptimismPortal") require.Nil(t, err) require.NotNil(t, deployment) } @@ -164,7 +164,7 @@ func TestHardhatGetStorageLayout(t *testing.T) { t.Parallel() hh, err := hardhat.New( - "sepolia", + "goerli", []string{"testdata/artifacts"}, []string{"testdata/deployments"}, ) diff --git a/op-bindings/hardhat/testdata/.gitignore b/op-bindings/hardhat/testdata/.gitignore deleted file mode 100644 index 67b0054b7..000000000 --- a/op-bindings/hardhat/testdata/.gitignore +++ /dev/null @@ -1 +0,0 @@ -!artifacts diff --git a/op-bindings/hardhat/testdata/deployments/alpha/OptimismPortal.json b/op-bindings/hardhat/testdata/deployments/alpha/OptimismPortal.json new file mode 100644 index 000000000..23e2f8ae4 --- /dev/null +++ b/op-bindings/hardhat/testdata/deployments/alpha/OptimismPortal.json @@ -0,0 +1,674 @@ +{ + "address": "0x79C6C6b1844e3db7C30107f189CFb095Bd2c4B5d", + "abi": [ + { + "inputs": [ + { + "internalType": "contract L2OutputOracle", + "name": "_l2Oracle", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_finalizationPeriodSeconds", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "version", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "opaqueData", + "type": "bytes" + } + ], + "name": "TransactionDeposited", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "withdrawalHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "name": "WithdrawalFinalized", + "type": "event" + }, + { + "inputs": [], + "name": "BASE_FEE_MAX_CHANGE_DENOMINATOR", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ELASTICITY_MULTIPLIER", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "FINALIZATION_PERIOD_SECONDS", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "INITIAL_BASE_FEE", + "outputs": [ + { + "internalType": "uint128", + "name": "", + "type": "uint128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "L2_ORACLE", + "outputs": [ + { + "internalType": "contract L2OutputOracle", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_RESOURCE_LIMIT", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MINIMUM_BASE_FEE", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "TARGET_RESOURCE_LIMIT", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "_gasLimit", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "_isCreation", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "depositTransaction", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct Types.WithdrawalTransaction", + "name": "_tx", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_l2BlockNumber", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "version", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "stateRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "withdrawerStorageRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "latestBlockhash", + "type": "bytes32" + } + ], + "internalType": "struct Types.OutputRootProof", + "name": "_outputRootProof", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_withdrawalProof", + "type": "bytes" + } + ], + "name": "finalizeWithdrawalTransaction", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "finalizedWithdrawals", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_l2BlockNumber", + "type": "uint256" + } + ], + "name": "isBlockFinalized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2Sender", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "params", + "outputs": [ + { + "internalType": "uint128", + "name": "prevBaseFee", + "type": "uint128" + }, + { + "internalType": "uint64", + "name": "prevBoughtGas", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "prevBlockNum", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x3ac590c822271c4ee52c3327f8154518b3a2d0ca0d4aeacbf74bc2a7a9bf0d5b", + "receipt": { + "to": null, + "from": "0xCFf7a9856DB3C60AB546b8F43dC5D1A4336786A0", + "contractAddress": "0x79C6C6b1844e3db7C30107f189CFb095Bd2c4B5d", + "transactionIndex": 0, + "gasUsed": "3481823", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000", + "blockHash": "0xd2afc46aa8ad4b9d42ff65f9e0b2e76a9864bdda53838da89d4ecead4ef54242", + "transactionHash": "0x3ac590c822271c4ee52c3327f8154518b3a2d0ca0d4aeacbf74bc2a7a9bf0d5b", + "logs": [ + { + "transactionIndex": 0, + "blockNumber": 7355246, + "transactionHash": "0x3ac590c822271c4ee52c3327f8154518b3a2d0ca0d4aeacbf74bc2a7a9bf0d5b", + "address": "0x79C6C6b1844e3db7C30107f189CFb095Bd2c4B5d", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 0, + "blockHash": "0xd2afc46aa8ad4b9d42ff65f9e0b2e76a9864bdda53838da89d4ecead4ef54242" + } + ], + "blockNumber": 7355246, + "cumulativeGasUsed": "3481823", + "status": 1, + "byzantium": true + }, + "args": [ + "0x1Bf3F468e52aA31fd19BaF006B23c327c8fc7198", + 2 + ], + "numDeployments": 1, + "solcInputHash": "cd42cb04f3b6a78e5824c9f427d0a55d", + "metadata": "{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract L2OutputOracle\",\"name\":\"_l2Oracle\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"opaqueData\",\"type\":\"bytes\"}],\"name\":\"TransactionDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"name\":\"WithdrawalFinalized\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BASE_FEE_MAX_CHANGE_DENOMINATOR\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ELASTICITY_MULTIPLIER\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FINALIZATION_PERIOD_SECONDS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INITIAL_BASE_FEE\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_ORACLE\",\"outputs\":[{\"internalType\":\"contract L2OutputOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_RESOURCE_LIMIT\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINIMUM_BASE_FEE\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TARGET_RESOURCE_LIMIT\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"_isCreation\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"depositTransaction\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Types.WithdrawalTransaction\",\"name\":\"_tx\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawerStorageRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"latestBlockhash\",\"type\":\"bytes32\"}],\"internalType\":\"struct Types.OutputRootProof\",\"name\":\"_outputRootProof\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_withdrawalProof\",\"type\":\"bytes\"}],\"name\":\"finalizeWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"finalizedWithdrawals\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"isBlockFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"params\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"prevBaseFee\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"prevBoughtGas\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"prevBlockNum\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"custom:proxied\":\"@title OptimismPortal\",\"events\":{\"TransactionDeposited(address,address,uint256,bytes)\":{\"params\":{\"from\":\"Address that triggered the deposit transaction.\",\"opaqueData\":\"ABI encoded deposit data to be parsed off-chain.\",\"to\":\"Address that the deposit transaction is directed to.\",\"version\":\"Version of this deposit transaction event.\"}},\"WithdrawalFinalized(bytes32,bool)\":{\"params\":{\"success\":\"Whether the withdrawal transaction was successful.\",\"withdrawalHash\":\"Hash of the withdrawal transaction.\"}}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"custom:semver\":\"0.0.1\",\"params\":{\"_finalizationPeriodSeconds\":\"Output finalization time in seconds.\",\"_l2Oracle\":\"Address of the L2OutputOracle contract.\"}},\"depositTransaction(address,uint256,uint64,bool,bytes)\":{\"params\":{\"_data\":\"Data to trigger the recipient with.\",\"_gasLimit\":\"Minimum L2 gas limit (can be greater than or equal to this value).\",\"_isCreation\":\"Whether or not the transaction is a contract creation.\",\"_to\":\"Target address on L2.\",\"_value\":\"ETH value to send to the recipient.\"}},\"finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes)\":{\"params\":{\"_l2BlockNumber\":\"L2 block number of the outputRoot.\",\"_outputRootProof\":\"Inclusion proof of the withdrawer contracts storage root.\",\"_tx\":\"Withdrawal transaction to finalize.\",\"_withdrawalProof\":\"Inclusion proof for the given withdrawal in the withdrawer contract.\"}},\"isBlockFinalized(uint256)\":{\"params\":{\"_l2BlockNumber\":\"The number of the L2 block.\"}},\"version()\":{\"returns\":{\"_0\":\"Semver contract version as a string.\"}}},\"version\":1},\"userdoc\":{\"events\":{\"TransactionDeposited(address,address,uint256,bytes)\":{\"notice\":\"Emitted when a transaction is deposited from L1 to L2. The parameters of this event are read by the rollup node and used to derive deposit transactions on L2.\"},\"WithdrawalFinalized(bytes32,bool)\":{\"notice\":\"Emitted when a withdrawal transaction is finalized.\"}},\"kind\":\"user\",\"methods\":{\"BASE_FEE_MAX_CHANGE_DENOMINATOR()\":{\"notice\":\"Denominator that determines max change on fee per block.\"},\"ELASTICITY_MULTIPLIER()\":{\"notice\":\"Along with the resource limit, determines the target resource limit.\"},\"FINALIZATION_PERIOD_SECONDS()\":{\"notice\":\"Minimum time (in seconds) that must elapse before a withdrawal can be finalized.\"},\"INITIAL_BASE_FEE()\":{\"notice\":\"Initial base fee value.\"},\"L2_ORACLE()\":{\"notice\":\"Address of the L2OutputOracle.\"},\"MAX_RESOURCE_LIMIT()\":{\"notice\":\"Maximum amount of the resource that can be used within this block.\"},\"MINIMUM_BASE_FEE()\":{\"notice\":\"Minimum base fee value, cannot go lower than this.\"},\"TARGET_RESOURCE_LIMIT()\":{\"notice\":\"Target amount of the resource that should be used within this block.\"},\"depositTransaction(address,uint256,uint64,bool,bytes)\":{\"notice\":\"Accepts deposits of ETH and data, and emits a TransactionDeposited event for use in deriving deposit transactions. Note that if a deposit is made by a contract, its address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider using the CrossDomainMessenger contracts for a simpler developer experience.\"},\"finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes)\":{\"notice\":\"Finalizes a withdrawal transaction.\"},\"finalizedWithdrawals(bytes32)\":{\"notice\":\"A list of withdrawal hashes which have been successfully finalized.\"},\"initialize()\":{\"notice\":\"Initializer;\"},\"isBlockFinalized(uint256)\":{\"notice\":\"Determine if a given block number is finalized. Reverts if the call to L2_ORACLE.getL2Output reverts. Returns a boolean otherwise.\"},\"l2Sender()\":{\"notice\":\"Address of the L2 account which initiated a withdrawal in this transaction. If the of this variable is the default L2 sender address, then we are NOT inside of a call to finalizeWithdrawalTransaction.\"},\"params()\":{\"notice\":\"EIP-1559 style gas parameters.\"},\"version()\":{\"notice\":\"Returns the full semver contract version.\"}},\"notice\":\"The OptimismPortal is a low-level contract responsible for passing messages between L1 and L2. Messages sent directly to the OptimismPortal have no form of replayability. Users are encouraged to use the L1CrossDomainMessenger for a higher-level interface.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L1/OptimismPortal.sol\":\"OptimismPortal\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@eth-optimism/contracts-periphery/=node_modules/@eth-optimism/contracts-periphery/contracts/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\":@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\":@rari-capital/=node_modules/@rari-capital/\",\":@rari-capital/solmate/=node_modules/@rari-capital/solmate/\",\":contracts/=contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":excessively-safe-call/=node_modules/excessively-safe-call/\",\":forge-std/=node_modules/forge-std/src/\"]},\"sources\":{\"contracts/L1/L2OutputOracle.sol\":{\"keccak256\":\"0xe3242f566b5c1ae0e983e734e053552b7ef53d73f23575b5c6bbad4505aacc61\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://45451a37d695b27f1e8d80f50a75d54be55b406538b24d913cb210c021a77876\",\"dweb:/ipfs/QmUqgkGNkDBZhGJQJjKdHWwuFUhg7Cu1qPpYUcRFWSi3Pr\"]},\"contracts/L1/OptimismPortal.sol\":{\"keccak256\":\"0xbdfc47a8ef7a1665d8aa25dabcc0281860ef88c5c9646a230e53af0d27248456\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0cad521349efcdd4ca4a0a937ce126cf40417f53373bf3235182f7d9a97df358\",\"dweb:/ipfs/QmbydUJzEtjR4xaPicsjFk5MunHz41peVCRrNR7GPDBEq2\"]},\"contracts/L1/ResourceMetering.sol\":{\"keccak256\":\"0xcbb34b35a67da37c07bc9ddf900012b94605491e6845a8811fd5d6d9fff8aed6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://84f801cd1c3d30f13a9a537c550898ffb170a810d640e2138ff6efe16c76a6ca\",\"dweb:/ipfs/QmYR49Qv7nJey69r726QmkpAWwqukAN7CBXj3xn5KxHUcV\"]},\"contracts/libraries/Burn.sol\":{\"keccak256\":\"0x54233b226ba6919dc46d438bc790108d8f855001002a1b9c3c37aed7a83e5f3f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4051a4baca357a9191a6c9e3aa1593a17b69dd7915966e23e4cb269e9c1d9ed4\",\"dweb:/ipfs/QmadKjGKvxm53abVHQdsxrXBc8e9jXywu6vvhkAgjsx59J\"]},\"contracts/libraries/Bytes.sol\":{\"keccak256\":\"0x90538c876448b34513ece8e91dc3d541291f17263813f2baf7a0e93b09993f31\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://16bd9e3249cd8659fdfe03a4c77b4d72ff9d3abbde81054dcd37710d1e176e8f\",\"dweb:/ipfs/QmbQ9VBUJfzWUK2KneSFNjtiH4dmPKChsZSQVNFAXJrrrZ\"]},\"contracts/libraries/Encoding.sol\":{\"keccak256\":\"0xca8dce21b608bac08ae75d42879e90f5e7865fb29587df181a22a3b14ce21985\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29b093d22061b4c499566cb35ce2755cce241ab9f02716cf9cdbdd81f9c47871\",\"dweb:/ipfs/QmdF4DHQUEeEeW67ugmEC3AHn6QrBBNYtwV7UaHaSTe2pa\"]},\"contracts/libraries/Hashing.sol\":{\"keccak256\":\"0xef5d0156a50f96bf32d34ef7a217872791b1b3c11baa9c13183a6388356a918d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7790ae2e79906d26924f7b69e8a3610031db48cef4b6e306e923431def8ba86\",\"dweb:/ipfs/QmSGJEBv5XsDtsr2QTJnwGKXAXxqZafYGeZcRKKfw1yrUc\"]},\"contracts/libraries/Types.sol\":{\"keccak256\":\"0x93045c0c97287a12e1bdde0685e26f185411b81b93b9df15c8cce90bccdcf77c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0c90b59d09f92aba5ab0862264efe2beb0f77fba750867f8d686a1f39ee6af2c\",\"dweb:/ipfs/QmW7Zj5d7NgDi5Mdv6jptJgfsUj8LvGroud9p2Z7vhcKLC\"]},\"contracts/libraries/rlp/RLPReader.sol\":{\"keccak256\":\"0xef51cf7340f3e3f6ff9f651d6b284831a38f1631635c5d72121ad9498caf15b3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://034c29eee4bc5ed4f0d013162d20c17cbc0ba5d26fd0cd477bcac0235e8266f0\",\"dweb:/ipfs/QmQZ1eFbqkVKAkKc4mXUCbGrdD6rE4sgzbzbSzS8RC4SCX\"]},\"contracts/libraries/rlp/RLPWriter.sol\":{\"keccak256\":\"0x5aa9d21c5b41c9786f23153f819d561ae809a1d55c7b0d423dfeafdfbacedc78\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://921c44e6a0982b9a4011900fda1bda2c06b7a85894967de98b407a83fe9f90c0\",\"dweb:/ipfs/QmSsHLKDUQ82kpKdqB6VntVGKuPDb4W9VdotsubuqWBzio\"]},\"contracts/libraries/trie/MerkleTrie.sol\":{\"keccak256\":\"0xbbf5b9e6b2ea942038ca5ed5722352c499019b0a0026edbda9a70f777aa2600d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2222d31689b9a41747a0082c8c8689ca7560ca69528f3901c73ca0d2efc2985f\",\"dweb:/ipfs/QmXHEZtsUkrGLGT9R5kHETRNwPURCVnrKKvbbmHpDUUHVj\"]},\"contracts/libraries/trie/SecureMerkleTrie.sol\":{\"keccak256\":\"0xd27ad3665179493bab93a4316bcd2a780bfec524f774226420e931acf8043ebb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3ec639edab8c22e020dd7a108f69d7dc99f2e9d0bb9075e9aa41d4bd1f5cc03\",\"dweb:/ipfs/QmR9fMgKEVLNm4LPbpSEX9AepmELxX6JXNm2o8tCXceBSF\"]},\"contracts/universal/Semver.sol\":{\"keccak256\":\"0x8215e8fbaace5e06fdf0be26cd8ec224847cf03e89bd78dc8ba3ec2cb429d4fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cfe4869ad9a1a10aee499ed4ac74a19f9f95dd9173efa656f6b1728f6912a9ad\",\"dweb:/ipfs/QmbiKSxpNnKQv8jwEvGUJkksaLPp8UU8N1twbDimM3RhXr\"]},\"contracts/vendor/AddressAliasHelper.sol\":{\"keccak256\":\"0x6ecb83b4ec80fbe49c22f4f95d90482de64660ef5d422a19f4d4b04df31c1237\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1d0885be6e473962f9a0622176a22300165ac0cc1a1d7f2e22b11c3d656ace88\",\"dweb:/ipfs/QmPRa3KmRpXW5P9ykveKRDgYN5zYo4cYLAYSnoqHX3KnXR\"]},\"node_modules/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"node_modules/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"node_modules/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"node_modules/@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x32c202bd28995dd20c4347b7c6467a6d3241c74c8ad3edcbb610cd9205916c45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8179c356adb19e70d6b31a1eedc8c5c7f0c00e669e2540f4099e3844c6074d30\",\"dweb:/ipfs/QmWFbivarEobbqhS1go64ootVuHfVohBseerYy9FTEd1W2\"]},\"node_modules/@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xc995bddbca1ae19788db9f8b61e63385edd3fddf89693b612d5abd1a275974d2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab84f13e6e6e0823854a0cddd49e96df052092d5919f95587607f0ed28a64cb6\",\"dweb:/ipfs/QmbNtqAq23ZDjCzHukQaa7B3y6rcobscm6FZF5PMQXcnVr\"]},\"node_modules/@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689\",\"dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy\"]},\"node_modules/@rari-capital/solmate/src/utils/FixedPointMathLib.sol\":{\"keccak256\":\"0x622fcd8a49e132df5ec7651cc6ae3aaf0cf59bdcd67a9a804a1b9e2485113b7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af77088eb606427d4c55e578984a615779c86bc30646a20f7bb27299ba390f7c\",\"dweb:/ipfs/QmZGQdhdQDtHc7gZXWrKXgA3govc74X8U63BiWhPQK3mK8\"]},\"node_modules/excessively-safe-call/src/ExcessivelySafeCall.sol\":{\"keccak256\":\"0x7d9d432e8f02168bf3f790e3dabcf36402782acf7ffa476cabe86fc4d8962eb2\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://1adc13e7f399f500ea5f81480ad149a50408fde7990a2c6347e6377486f389dc\",\"dweb:/ipfs/QmSvm5TUBJqknsqNJLLHqNS4MLSH5k3vNrbquVg6ZKSfx9\"]}},\"version\":1}", + "bytecode": "0x6101206040523480156200001257600080fd5b506040516200401238038062004012833981016040819052620000359162000261565b6000608081905260a052600160c0526001600160a01b0382166101005260e08190526200006162000069565b50506200029d565b600054610100900460ff16158080156200008a5750600054600160ff909116105b80620000ba5750620000a730620001af60201b6200127e1760201c565b158015620000ba575060005460ff166001145b620001235760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000147576000805461ff0019166101001790555b603380546001600160a01b03191661dead17905562000165620001be565b8015620001ac576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6001600160a01b03163b151590565b600054610100900460ff166200022b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016200011a565b60408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b0217600155565b600080604083850312156200027557600080fd5b82516001600160a01b03811681146200028d57600080fd5b6020939093015192949293505050565b60805160a05160c05160e05161010051613d1b620002f76000396000818161013401528181610b690152610d900152600081816103bd015261155701526000610918015260006108ef015260006108c60152613d1b6000f3fe6080604052600436106100f65760003560e01c8063a14238e71161008a578063cff0ab9611610059578063cff0ab96146102f7578063e9e05c4214610398578063f4daa291146103ab578063fdc9fe1d146103df57600080fd5b8063a14238e71461026d578063c4fc4798146102ad578063ca3e99ba146102cd578063cd7c9789146102e257600080fd5b80636bb0291e116100c65780636bb0291e146102005780638129fc1c14610215578063867ead131461022a5780639bf62d821461024057600080fd5b80621c2ff61461012257806313620abd1461018057806354fd4d50146101b957806364b79208146101db57600080fd5b3661011d5761011b3334620186a06000604051806020016040528060008152506103f2565b005b600080fd5b34801561012e57600080fd5b506101567f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018c57600080fd5b50610198633b9aca0081565b6040516fffffffffffffffffffffffffffffffff9091168152602001610177565b3480156101c557600080fd5b506101ce6108bf565b604051610177919061336e565b3480156101e757600080fd5b506101f2627a120081565b604051908152602001610177565b34801561020c57600080fd5b506101f2600481565b34801561022157600080fd5b5061011b610962565b34801561023657600080fd5b506101f261271081565b34801561024c57600080fd5b506033546101569073ffffffffffffffffffffffffffffffffffffffff1681565b34801561027957600080fd5b5061029d610288366004613381565b60346020526000908152604090205460ff1681565b6040519015158152602001610177565b3480156102b957600080fd5b5061029d6102c8366004613381565b610b20565b3480156102d957600080fd5b506101f2610be5565b3480156102ee57600080fd5b506101f2600881565b34801561030357600080fd5b5060015461035f906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610177565b61011b6103a63660046134c6565b6103f2565b3480156103b757600080fd5b506101f27f000000000000000000000000000000000000000000000000000000000000000081565b61011b6103ed3660046135b4565b610bf6565b8260005a905083156104a95773ffffffffffffffffffffffffffffffffffffffff8716156104a957604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b333281146104ca575033731111000000000000000000000000000000001111015b600034888888886040516020016104e59594939291906136a8565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3284604051610555919061336e565b60405180910390a45050600154600090610595907801000000000000000000000000000000000000000000000000900467ffffffffffffffff164361373c565b9050801561071e5760006105ad6004627a1200613782565b6001546105d89190700100000000000000000000000000000000900467ffffffffffffffff166137ea565b9050600060086105ec6004627a1200613782565b60015461060c9085906fffffffffffffffffffffffffffffffff1661385e565b6106169190613782565b6106209190613782565b60015490915060009061066c906106569061064e9085906fffffffffffffffffffffffffffffffff1661391a565b61271061129a565b6fffffffffffffffffffffffffffffffff6112b5565b905060018411156106df576106dc610656670de0b6b3a76400006106c8610694600883613782565b6106a690670de0b6b3a76400006137ea565b6106b160018a61373c565b6106c390670de0b6b3a764000061398e565b6112c4565b6106d2908561385e565b61064e9190613782565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054849190601090610751908490700100000000000000000000000000000000900467ffffffffffffffff166139cb565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550627a1200600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff16131561082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d6974000060648201526084016104a0565b600154600090610859906fffffffffffffffffffffffffffffffff1667ffffffffffffffff86166139f7565b6fffffffffffffffffffffffffffffffff169050600061087d48633b9aca006112f5565b6108879083613a2f565b905060005a610896908661373c565b9050808211156108b2576108b26108ad828461373c565b611305565b5050505050505050505050565b60606108ea7f0000000000000000000000000000000000000000000000000000000000000000611333565b6109137f0000000000000000000000000000000000000000000000000000000000000000611333565b61093c7f0000000000000000000000000000000000000000000000000000000000000000611333565b60405160200161094e93929190613a43565b604051602081830303815290604052905090565b600054610100900460ff16158080156109825750600054600160ff909116105b8061099c5750303b15801561099c575060005460ff166001145b610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104a0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610a8657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055610aba611470565b8015610b1d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101829052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae557906024016040805180830381865afa158015610baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd39190613ab9565b9050610bde81611553565b9392505050565b610bf36004627a1200613782565b81565b60335473ffffffffffffffffffffffffffffffffffffffff1661dead14610c9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e0060648201526084016104a0565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610d5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084016104a0565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae557906024016040805180830381865afa158015610deb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0f9190613ab9565b9050610e1a81611553565b610ea6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4f7074696d69736d506f7274616c3a2070726f706f73616c206973206e6f742060448201527f7965742066696e616c697a65640000000000000000000000000000000000000060648201526084016104a0565b610ebd610eb836869003860186613b08565b61158d565b815114610f4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084016104a0565b6000610f57876115e9565b9050610f9e81866040013586868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061161992505050565b61102a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f66000000000000000000000000000060648201526084016104a0565b60008181526034602052604090205460ff16156110c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a6564000000000000000000000060648201526084016104a0565b600081815260346020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055608087015161111290614e2090613b6e565b5a10156111a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a20696e73756666696369656e742067617360448201527f20746f2066696e616c697a65207769746864726177616c00000000000000000060648201526084016104a0565b8660200151603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000611206886040015189608001518a6060015160008c60a001516116e0565b50603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915082907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061126c90841515815260200190565b60405180910390a25050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000818312156112aa57816112ac565b825b90505b92915050565b60008183126112aa57816112ac565b60006112ac670de0b6b3a7640000836112dc8661176b565b6112e6919061385e565b6112f09190613782565b6119af565b6000818310156112aa57816112ac565b6000805a90505b825a611318908361373c565b101561132e5761132782613b86565b915061130c565b505050565b60608160000361137657505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156113a0578061138a81613b86565b91506113999050600a83613a2f565b915061137a565b60008167ffffffffffffffff8111156113bb576113bb6133c3565b6040519080825280601f01601f1916602001820160405280156113e5576020820181803683370190505b5090505b8415611468576113fa60018361373c565b9150611407600a86613bbe565b611412906030613b6e565b60f81b81838151811061142757611427613bd2565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611461600a86613a2f565b94506113e9565b949350505050565b600054610100900460ff16611507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104a0565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b60007f000000000000000000000000000000000000000000000000000000000000000082602001516115859190613b6e565b421192915050565b600081600001518260200151836040015184606001516040516020016115cc949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a088015193516000976115cc979096959101613c01565b604080516020810185905260009181018290528190606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830181905292506116d79101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f01000000000000000000000000000000000000000000000000000000000000006020830152908587611bee565b95945050505050565b6000606060008060008661ffff1667ffffffffffffffff811115611706576117066133c3565b6040519080825280601f01601f191660200182016040528015611730576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115611751578692505b828152826000602083013e90999098509650505050505050565b60008082136117d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016104a0565b600060606117e384611c12565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136119e057506000919050565b680755bf798b4a1bf1e58212611a52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016104a0565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b600080611bfa86611ce8565b9050611c0881868686611d1a565b9695505050505050565b6000808211611c7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016104a0565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60608180519060200120604051602001611d0491815260200190565b6040516020818303038152906040529050919050565b6000806000611d2a878686611d57565b91509150818015611d4c57508051602080830191909120875191880191909120145b979650505050505050565b600060606000611d6685611e72565b90506000806000611d78848a89611f6d565b81519295509093509150158080611d8c5750815b611e18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2070726f76696465642070726f6f6620697320696e60448201527f76616c696400000000000000000000000000000000000000000000000000000060648201526084016104a0565b600081611e345760405180602001604052806000815250611e60565b611e6086611e4360018861373c565b81518110611e5357611e53613bd2565b60200260200101516124f6565b919b919a509098505050505050505050565b60606000611e7f83612520565b90506000815167ffffffffffffffff811115611e9d57611e9d6133c3565b604051908082528060200260200182016040528015611ee257816020015b6040805180820190915260608082526020820152815260200190600190039081611ebb5790505b50905060005b8251811015611f65576000611f15848381518110611f0857611f08613bd2565b6020026020010151612553565b90506040518060400160405280828152602001611f3183612520565b815250838381518110611f4657611f46613bd2565b6020026020010181905250508080611f5d90613b86565b915050611ee8565b509392505050565b60006060818080611f7d8761261a565b90506000869050600080611fa4604051806040016040528060608152602001606081525090565b60005b8c518110156124b2578c8181518110611fc257611fc2613bd2565b602002602001015191508284611fd89190613b6e565b9350611fe5600188613b6e565b96508360000361206657815180516020909101208514612061576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016104a0565b6121a2565b81515160201161210857815180516020909101208514612061576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c20686173680000000000000000000000000000000000000000000000000060648201526084016104a0565b8151859061211590613c58565b146121a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f652068617368000000000000000000000000000000000000000000000000000060648201526084016104a0565b6121ae60106001613b6e565b8260200151510361222057855184146124b25760008685815181106121d5576121d5613bd2565b602001015160f81c60f81b60f81c9050600083602001518260ff168151811061220057612200613bd2565b602002602001015190506122138161279d565b96506001945050506124a0565b600282602001515103612418576000612238836127d3565b905060008160008151811061224f5761224f613bd2565b016020015160f81c90506000612266600283613c9a565b612271906002613cbc565b90506000612282848360ff166127f7565b905060006122908b8a6127f7565b9050600061229e838361282d565b905060ff8516600214806122b5575060ff85166003145b1561230b578083511480156122ca5750808251145b156122dc576122d9818b613b6e565b99505b507f800000000000000000000000000000000000000000000000000000000000000099506124b2945050505050565b60ff8516158061231e575060ff85166001145b15612390578251811461235a57507f800000000000000000000000000000000000000000000000000000000000000099506124b2945050505050565b612381886020015160018151811061237457612374613bd2565b602002602001015161279d565b9a5097506124a0945050505050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e20707265666978000000000000000000000000000060648201526084016104a0565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f646500000000000000000000000000000000000000000000000060648201526084016104a0565b806124aa81613b86565b915050611fa7565b507f80000000000000000000000000000000000000000000000000000000000000008414866124e187866127f7565b909e909d50909b509950505050505050505050565b602081015180516060916112af916125109060019061373c565b81518110611f0857611f08613bd2565b6040805180820182526000808252602091820152815180830190925282518252808301908201526060906112af906128d9565b6060600080600061256385612b32565b91945092509050600081600181111561257e5761257e613cdf565b1461260b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f524c505265616465723a20696e76616c696420524c502062797465732076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016104a0565b6116d78560200151848461301d565b606060008251600261262c919061398e565b67ffffffffffffffff811115612644576126446133c3565b6040519080825280601f01601f19166020018201604052801561266e576020820181803683370190505b50905060005b835181101561279657600484828151811061269157612691613bd2565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c826126c683600261398e565b815181106126d6576126d6613bd2565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350601084828151811061271957612719613bd2565b016020015161272b919060f81c613c9a565b60f81b8261273a83600261398e565b612745906001613b6e565b8151811061275557612755613bd2565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508061278e81613b86565b915050612674565b5092915050565b600060606020836000015110156127be576127b7836130fb565b90506127ca565b6127c783612553565b90505b610bde81613c58565b60606112af6127f28360200151600081518110611f0857611f08613bd2565b61261a565b60608251821061281657506040805160208101909152600081526112af565b6112ac8383848651612828919061373c565b613106565b6000805b8084511180156128415750808351115b80156128c2575082818151811061285a5761285a613bd2565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684828151811061289957612899613bd2565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156112ac57806128d181613b86565b915050612831565b60606000806128e784612b32565b9193509091506001905081600181111561290357612903613cdf565b14612990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f524c505265616465723a20696e76616c696420524c50206c6973742076616c7560448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016104a0565b6040805160208082526104208201909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816129a95790505090506000835b8651811015612b275760208210612a6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2070726f766964656420524c50206c6973742065786360448201527f65656473206d6178206c697374206c656e67746800000000000000000000000060648201526084016104a0565b600080612aac6040518060400160405280858c60000151612a90919061373c565b8152602001858c60200151612aa59190613b6e565b9052612b32565b509150915060405180604001604052808383612ac89190613b6e565b8152602001848b60200151612add9190613b6e565b815250858581518110612af257612af2613bd2565b6020908102919091010152612b08600185613b6e565b9350612b148183613b6e565b612b1e9084613b6e565b925050506129d6565b508152949350505050565b600080600080846000015111612bca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f524c505265616465723a20524c50206974656d2063616e6e6f74206265206e7560448201527f6c6c00000000000000000000000000000000000000000000000000000000000060648201526084016104a0565b6020840151805160001a607f8111612bef576000600160009450945094505050613016565b60b78111612cab576000612c0460808361373c565b905080876000015111612c99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f524c505265616465723a20696e76616c696420524c502073686f72742073747260448201527f696e67000000000000000000000000000000000000000000000000000000000060648201526084016104a0565b60019550935060009250613016915050565b60bf8111612e1a576000612cc060b78361373c565b905080876000015111612d55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67207374726960448201527f6e67206c656e677468000000000000000000000000000000000000000000000060648201526084016104a0565b600183015160208290036101000a9004612d6f8183613b6e565b885111612dfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67207374726960448201527f6e6700000000000000000000000000000000000000000000000000000000000060648201526084016104a0565b612e09826001613b6e565b965094506000935061301692505050565b60f78111612ed5576000612e2f60c08361373c565b905080876000015111612ec4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f524c505265616465723a20696e76616c696420524c502073686f7274206c697360448201527f740000000000000000000000000000000000000000000000000000000000000060648201526084016104a0565b600195509350849250613016915050565b6000612ee260f78361373c565b905080876000015111612f77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67206c69737460448201527f206c656e6774680000000000000000000000000000000000000000000000000060648201526084016104a0565b600183015160208290036101000a9004612f918183613b6e565b885111612ffa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67206c69737460448201526064016104a0565b613005826001613b6e565b965094506001935061301692505050565b9193909250565b606060008267ffffffffffffffff81111561303a5761303a6133c3565b6040519080825280601f01601f191660200182016040528015613064576020820181803683370190505b5090508051600003613077579050610bde565b60006130838587613b6e565b90506020820160005b613097602087613a2f565b8110156130ce57825182526130ad602084613b6e565b92506130ba602083613b6e565b9150806130c681613b86565b91505061308c565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b60606112af826132de565b60608182601f011015613175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016104a0565b8282840110156131e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016104a0565b8183018451101561324e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016104a0565b60608215801561326d57604051915060008252602082016040526132d5565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156132a657805183526020928301920161328e565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60606112af82602001516000846000015161301d565b60005b8381101561330f5781810151838201526020016132f7565b8381111561331e576000848401525b50505050565b6000815180845261333c8160208601602086016132f4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006112ac6020830184613324565b60006020828403121561339357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146133be57600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715613415576134156133c3565b60405290565b600082601f83011261342c57600080fd5b813567ffffffffffffffff80821115613447576134476133c3565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561348d5761348d6133c3565b816040528381528660208588010111156134a657600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156134de57600080fd5b6134e78661339a565b945060208601359350604086013567ffffffffffffffff808216821461350c57600080fd5b909350606087013590811515821461352357600080fd5b9092506080870135908082111561353957600080fd5b506135468882890161341b565b9150509295509295909350565b60006080828403121561356557600080fd5b50919050565b60008083601f84011261357d57600080fd5b50813567ffffffffffffffff81111561359557600080fd5b6020830191508360208285010111156135ad57600080fd5b9250929050565b600080600080600060e086880312156135cc57600080fd5b853567ffffffffffffffff808211156135e457600080fd5b9087019060c0828a0312156135f857600080fd5b6136006133f2565b823581526136106020840161339a565b60208201526136216040840161339a565b6040820152606083013560608201526080830135608082015260a08301358281111561364c57600080fd5b6136588b82860161341b565b60a0830152509650602088013595506136748960408a01613553565b945060c088013591508082111561368a57600080fd5b506136978882890161356b565b969995985093965092949392505050565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516136fc8160498501602087016132f4565b919091016049019695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561374e5761374e61370d565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261379157613791613753565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156137e5576137e561370d565b500590565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156138245761382461370d565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156138585761385861370d565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561389f5761389f61370d565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156138da576138da61370d565b600087129250878205871284841616156138f6576138f661370d565b8785058712818416161561390c5761390c61370d565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038413811516156139545761395461370d565b827f80000000000000000000000000000000000000000000000000000000000000000384128116156139885761398861370d565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139c6576139c661370d565b500290565b600067ffffffffffffffff8083168185168083038211156139ee576139ee61370d565b01949350505050565b60006fffffffffffffffffffffffffffffffff80831681851681830481118215151615613a2657613a2661370d565b02949350505050565b600082613a3e57613a3e613753565b500490565b60008451613a558184602089016132f4565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551613a91816001850160208a016132f4565b60019201918201528351613aac8160028401602088016132f4565b0160020195945050505050565b600060408284031215613acb57600080fd5b6040516040810181811067ffffffffffffffff82111715613aee57613aee6133c3565b604052825181526020928301519281019290925250919050565b600060808284031215613b1a57600080fd5b6040516080810181811067ffffffffffffffff82111715613b3d57613b3d6133c3565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b60008219821115613b8157613b8161370d565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613bb757613bb761370d565b5060010190565b600082613bcd57613bcd613753565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152613c4c60c0830184613324565b98975050505050505050565b80516020808301519190811015613565577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b600060ff831680613cad57613cad613753565b8060ff84160691505092915050565b600060ff821660ff841680821015613cd657613cd661370d565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + "deployedBytecode": "0x6080604052600436106100f65760003560e01c8063a14238e71161008a578063cff0ab9611610059578063cff0ab96146102f7578063e9e05c4214610398578063f4daa291146103ab578063fdc9fe1d146103df57600080fd5b8063a14238e71461026d578063c4fc4798146102ad578063ca3e99ba146102cd578063cd7c9789146102e257600080fd5b80636bb0291e116100c65780636bb0291e146102005780638129fc1c14610215578063867ead131461022a5780639bf62d821461024057600080fd5b80621c2ff61461012257806313620abd1461018057806354fd4d50146101b957806364b79208146101db57600080fd5b3661011d5761011b3334620186a06000604051806020016040528060008152506103f2565b005b600080fd5b34801561012e57600080fd5b506101567f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018c57600080fd5b50610198633b9aca0081565b6040516fffffffffffffffffffffffffffffffff9091168152602001610177565b3480156101c557600080fd5b506101ce6108bf565b604051610177919061336e565b3480156101e757600080fd5b506101f2627a120081565b604051908152602001610177565b34801561020c57600080fd5b506101f2600481565b34801561022157600080fd5b5061011b610962565b34801561023657600080fd5b506101f261271081565b34801561024c57600080fd5b506033546101569073ffffffffffffffffffffffffffffffffffffffff1681565b34801561027957600080fd5b5061029d610288366004613381565b60346020526000908152604090205460ff1681565b6040519015158152602001610177565b3480156102b957600080fd5b5061029d6102c8366004613381565b610b20565b3480156102d957600080fd5b506101f2610be5565b3480156102ee57600080fd5b506101f2600881565b34801561030357600080fd5b5060015461035f906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610177565b61011b6103a63660046134c6565b6103f2565b3480156103b757600080fd5b506101f27f000000000000000000000000000000000000000000000000000000000000000081565b61011b6103ed3660046135b4565b610bf6565b8260005a905083156104a95773ffffffffffffffffffffffffffffffffffffffff8716156104a957604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b333281146104ca575033731111000000000000000000000000000000001111015b600034888888886040516020016104e59594939291906136a8565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3284604051610555919061336e565b60405180910390a45050600154600090610595907801000000000000000000000000000000000000000000000000900467ffffffffffffffff164361373c565b9050801561071e5760006105ad6004627a1200613782565b6001546105d89190700100000000000000000000000000000000900467ffffffffffffffff166137ea565b9050600060086105ec6004627a1200613782565b60015461060c9085906fffffffffffffffffffffffffffffffff1661385e565b6106169190613782565b6106209190613782565b60015490915060009061066c906106569061064e9085906fffffffffffffffffffffffffffffffff1661391a565b61271061129a565b6fffffffffffffffffffffffffffffffff6112b5565b905060018411156106df576106dc610656670de0b6b3a76400006106c8610694600883613782565b6106a690670de0b6b3a76400006137ea565b6106b160018a61373c565b6106c390670de0b6b3a764000061398e565b6112c4565b6106d2908561385e565b61064e9190613782565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054849190601090610751908490700100000000000000000000000000000000900467ffffffffffffffff166139cb565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550627a1200600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff16131561082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d6974000060648201526084016104a0565b600154600090610859906fffffffffffffffffffffffffffffffff1667ffffffffffffffff86166139f7565b6fffffffffffffffffffffffffffffffff169050600061087d48633b9aca006112f5565b6108879083613a2f565b905060005a610896908661373c565b9050808211156108b2576108b26108ad828461373c565b611305565b5050505050505050505050565b60606108ea7f0000000000000000000000000000000000000000000000000000000000000000611333565b6109137f0000000000000000000000000000000000000000000000000000000000000000611333565b61093c7f0000000000000000000000000000000000000000000000000000000000000000611333565b60405160200161094e93929190613a43565b604051602081830303815290604052905090565b600054610100900460ff16158080156109825750600054600160ff909116105b8061099c5750303b15801561099c575060005460ff166001145b610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104a0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610a8657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055610aba611470565b8015610b1d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101829052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae557906024016040805180830381865afa158015610baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd39190613ab9565b9050610bde81611553565b9392505050565b610bf36004627a1200613782565b81565b60335473ffffffffffffffffffffffffffffffffffffffff1661dead14610c9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e0060648201526084016104a0565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610d5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084016104a0565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae557906024016040805180830381865afa158015610deb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0f9190613ab9565b9050610e1a81611553565b610ea6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4f7074696d69736d506f7274616c3a2070726f706f73616c206973206e6f742060448201527f7965742066696e616c697a65640000000000000000000000000000000000000060648201526084016104a0565b610ebd610eb836869003860186613b08565b61158d565b815114610f4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084016104a0565b6000610f57876115e9565b9050610f9e81866040013586868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061161992505050565b61102a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f66000000000000000000000000000060648201526084016104a0565b60008181526034602052604090205460ff16156110c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a6564000000000000000000000060648201526084016104a0565b600081815260346020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055608087015161111290614e2090613b6e565b5a10156111a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a20696e73756666696369656e742067617360448201527f20746f2066696e616c697a65207769746864726177616c00000000000000000060648201526084016104a0565b8660200151603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000611206886040015189608001518a6060015160008c60a001516116e0565b50603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915082907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061126c90841515815260200190565b60405180910390a25050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000818312156112aa57816112ac565b825b90505b92915050565b60008183126112aa57816112ac565b60006112ac670de0b6b3a7640000836112dc8661176b565b6112e6919061385e565b6112f09190613782565b6119af565b6000818310156112aa57816112ac565b6000805a90505b825a611318908361373c565b101561132e5761132782613b86565b915061130c565b505050565b60608160000361137657505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156113a0578061138a81613b86565b91506113999050600a83613a2f565b915061137a565b60008167ffffffffffffffff8111156113bb576113bb6133c3565b6040519080825280601f01601f1916602001820160405280156113e5576020820181803683370190505b5090505b8415611468576113fa60018361373c565b9150611407600a86613bbe565b611412906030613b6e565b60f81b81838151811061142757611427613bd2565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611461600a86613a2f565b94506113e9565b949350505050565b600054610100900460ff16611507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104a0565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b60007f000000000000000000000000000000000000000000000000000000000000000082602001516115859190613b6e565b421192915050565b600081600001518260200151836040015184606001516040516020016115cc949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a088015193516000976115cc979096959101613c01565b604080516020810185905260009181018290528190606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830181905292506116d79101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f01000000000000000000000000000000000000000000000000000000000000006020830152908587611bee565b95945050505050565b6000606060008060008661ffff1667ffffffffffffffff811115611706576117066133c3565b6040519080825280601f01601f191660200182016040528015611730576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115611751578692505b828152826000602083013e90999098509650505050505050565b60008082136117d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016104a0565b600060606117e384611c12565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136119e057506000919050565b680755bf798b4a1bf1e58212611a52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016104a0565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b600080611bfa86611ce8565b9050611c0881868686611d1a565b9695505050505050565b6000808211611c7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016104a0565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60608180519060200120604051602001611d0491815260200190565b6040516020818303038152906040529050919050565b6000806000611d2a878686611d57565b91509150818015611d4c57508051602080830191909120875191880191909120145b979650505050505050565b600060606000611d6685611e72565b90506000806000611d78848a89611f6d565b81519295509093509150158080611d8c5750815b611e18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2070726f76696465642070726f6f6620697320696e60448201527f76616c696400000000000000000000000000000000000000000000000000000060648201526084016104a0565b600081611e345760405180602001604052806000815250611e60565b611e6086611e4360018861373c565b81518110611e5357611e53613bd2565b60200260200101516124f6565b919b919a509098505050505050505050565b60606000611e7f83612520565b90506000815167ffffffffffffffff811115611e9d57611e9d6133c3565b604051908082528060200260200182016040528015611ee257816020015b6040805180820190915260608082526020820152815260200190600190039081611ebb5790505b50905060005b8251811015611f65576000611f15848381518110611f0857611f08613bd2565b6020026020010151612553565b90506040518060400160405280828152602001611f3183612520565b815250838381518110611f4657611f46613bd2565b6020026020010181905250508080611f5d90613b86565b915050611ee8565b509392505050565b60006060818080611f7d8761261a565b90506000869050600080611fa4604051806040016040528060608152602001606081525090565b60005b8c518110156124b2578c8181518110611fc257611fc2613bd2565b602002602001015191508284611fd89190613b6e565b9350611fe5600188613b6e565b96508360000361206657815180516020909101208514612061576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016104a0565b6121a2565b81515160201161210857815180516020909101208514612061576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c20686173680000000000000000000000000000000000000000000000000060648201526084016104a0565b8151859061211590613c58565b146121a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f652068617368000000000000000000000000000000000000000000000000000060648201526084016104a0565b6121ae60106001613b6e565b8260200151510361222057855184146124b25760008685815181106121d5576121d5613bd2565b602001015160f81c60f81b60f81c9050600083602001518260ff168151811061220057612200613bd2565b602002602001015190506122138161279d565b96506001945050506124a0565b600282602001515103612418576000612238836127d3565b905060008160008151811061224f5761224f613bd2565b016020015160f81c90506000612266600283613c9a565b612271906002613cbc565b90506000612282848360ff166127f7565b905060006122908b8a6127f7565b9050600061229e838361282d565b905060ff8516600214806122b5575060ff85166003145b1561230b578083511480156122ca5750808251145b156122dc576122d9818b613b6e565b99505b507f800000000000000000000000000000000000000000000000000000000000000099506124b2945050505050565b60ff8516158061231e575060ff85166001145b15612390578251811461235a57507f800000000000000000000000000000000000000000000000000000000000000099506124b2945050505050565b612381886020015160018151811061237457612374613bd2565b602002602001015161279d565b9a5097506124a0945050505050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e20707265666978000000000000000000000000000060648201526084016104a0565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f646500000000000000000000000000000000000000000000000060648201526084016104a0565b806124aa81613b86565b915050611fa7565b507f80000000000000000000000000000000000000000000000000000000000000008414866124e187866127f7565b909e909d50909b509950505050505050505050565b602081015180516060916112af916125109060019061373c565b81518110611f0857611f08613bd2565b6040805180820182526000808252602091820152815180830190925282518252808301908201526060906112af906128d9565b6060600080600061256385612b32565b91945092509050600081600181111561257e5761257e613cdf565b1461260b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f524c505265616465723a20696e76616c696420524c502062797465732076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016104a0565b6116d78560200151848461301d565b606060008251600261262c919061398e565b67ffffffffffffffff811115612644576126446133c3565b6040519080825280601f01601f19166020018201604052801561266e576020820181803683370190505b50905060005b835181101561279657600484828151811061269157612691613bd2565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c826126c683600261398e565b815181106126d6576126d6613bd2565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350601084828151811061271957612719613bd2565b016020015161272b919060f81c613c9a565b60f81b8261273a83600261398e565b612745906001613b6e565b8151811061275557612755613bd2565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508061278e81613b86565b915050612674565b5092915050565b600060606020836000015110156127be576127b7836130fb565b90506127ca565b6127c783612553565b90505b610bde81613c58565b60606112af6127f28360200151600081518110611f0857611f08613bd2565b61261a565b60608251821061281657506040805160208101909152600081526112af565b6112ac8383848651612828919061373c565b613106565b6000805b8084511180156128415750808351115b80156128c2575082818151811061285a5761285a613bd2565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684828151811061289957612899613bd2565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156112ac57806128d181613b86565b915050612831565b60606000806128e784612b32565b9193509091506001905081600181111561290357612903613cdf565b14612990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f524c505265616465723a20696e76616c696420524c50206c6973742076616c7560448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016104a0565b6040805160208082526104208201909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816129a95790505090506000835b8651811015612b275760208210612a6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2070726f766964656420524c50206c6973742065786360448201527f65656473206d6178206c697374206c656e67746800000000000000000000000060648201526084016104a0565b600080612aac6040518060400160405280858c60000151612a90919061373c565b8152602001858c60200151612aa59190613b6e565b9052612b32565b509150915060405180604001604052808383612ac89190613b6e565b8152602001848b60200151612add9190613b6e565b815250858581518110612af257612af2613bd2565b6020908102919091010152612b08600185613b6e565b9350612b148183613b6e565b612b1e9084613b6e565b925050506129d6565b508152949350505050565b600080600080846000015111612bca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f524c505265616465723a20524c50206974656d2063616e6e6f74206265206e7560448201527f6c6c00000000000000000000000000000000000000000000000000000000000060648201526084016104a0565b6020840151805160001a607f8111612bef576000600160009450945094505050613016565b60b78111612cab576000612c0460808361373c565b905080876000015111612c99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f524c505265616465723a20696e76616c696420524c502073686f72742073747260448201527f696e67000000000000000000000000000000000000000000000000000000000060648201526084016104a0565b60019550935060009250613016915050565b60bf8111612e1a576000612cc060b78361373c565b905080876000015111612d55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67207374726960448201527f6e67206c656e677468000000000000000000000000000000000000000000000060648201526084016104a0565b600183015160208290036101000a9004612d6f8183613b6e565b885111612dfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67207374726960448201527f6e6700000000000000000000000000000000000000000000000000000000000060648201526084016104a0565b612e09826001613b6e565b965094506000935061301692505050565b60f78111612ed5576000612e2f60c08361373c565b905080876000015111612ec4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f524c505265616465723a20696e76616c696420524c502073686f7274206c697360448201527f740000000000000000000000000000000000000000000000000000000000000060648201526084016104a0565b600195509350849250613016915050565b6000612ee260f78361373c565b905080876000015111612f77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67206c69737460448201527f206c656e6774680000000000000000000000000000000000000000000000000060648201526084016104a0565b600183015160208290036101000a9004612f918183613b6e565b885111612ffa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67206c69737460448201526064016104a0565b613005826001613b6e565b965094506001935061301692505050565b9193909250565b606060008267ffffffffffffffff81111561303a5761303a6133c3565b6040519080825280601f01601f191660200182016040528015613064576020820181803683370190505b5090508051600003613077579050610bde565b60006130838587613b6e565b90506020820160005b613097602087613a2f565b8110156130ce57825182526130ad602084613b6e565b92506130ba602083613b6e565b9150806130c681613b86565b91505061308c565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b60606112af826132de565b60608182601f011015613175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016104a0565b8282840110156131e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016104a0565b8183018451101561324e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016104a0565b60608215801561326d57604051915060008252602082016040526132d5565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156132a657805183526020928301920161328e565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60606112af82602001516000846000015161301d565b60005b8381101561330f5781810151838201526020016132f7565b8381111561331e576000848401525b50505050565b6000815180845261333c8160208601602086016132f4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006112ac6020830184613324565b60006020828403121561339357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146133be57600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715613415576134156133c3565b60405290565b600082601f83011261342c57600080fd5b813567ffffffffffffffff80821115613447576134476133c3565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561348d5761348d6133c3565b816040528381528660208588010111156134a657600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156134de57600080fd5b6134e78661339a565b945060208601359350604086013567ffffffffffffffff808216821461350c57600080fd5b909350606087013590811515821461352357600080fd5b9092506080870135908082111561353957600080fd5b506135468882890161341b565b9150509295509295909350565b60006080828403121561356557600080fd5b50919050565b60008083601f84011261357d57600080fd5b50813567ffffffffffffffff81111561359557600080fd5b6020830191508360208285010111156135ad57600080fd5b9250929050565b600080600080600060e086880312156135cc57600080fd5b853567ffffffffffffffff808211156135e457600080fd5b9087019060c0828a0312156135f857600080fd5b6136006133f2565b823581526136106020840161339a565b60208201526136216040840161339a565b6040820152606083013560608201526080830135608082015260a08301358281111561364c57600080fd5b6136588b82860161341b565b60a0830152509650602088013595506136748960408a01613553565b945060c088013591508082111561368a57600080fd5b506136978882890161356b565b969995985093965092949392505050565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516136fc8160498501602087016132f4565b919091016049019695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561374e5761374e61370d565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261379157613791613753565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156137e5576137e561370d565b500590565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156138245761382461370d565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156138585761385861370d565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561389f5761389f61370d565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156138da576138da61370d565b600087129250878205871284841616156138f6576138f661370d565b8785058712818416161561390c5761390c61370d565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038413811516156139545761395461370d565b827f80000000000000000000000000000000000000000000000000000000000000000384128116156139885761398861370d565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139c6576139c661370d565b500290565b600067ffffffffffffffff8083168185168083038211156139ee576139ee61370d565b01949350505050565b60006fffffffffffffffffffffffffffffffff80831681851681830481118215151615613a2657613a2661370d565b02949350505050565b600082613a3e57613a3e613753565b500490565b60008451613a558184602089016132f4565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551613a91816001850160208a016132f4565b60019201918201528351613aac8160028401602088016132f4565b0160020195945050505050565b600060408284031215613acb57600080fd5b6040516040810181811067ffffffffffffffff82111715613aee57613aee6133c3565b604052825181526020928301519281019290925250919050565b600060808284031215613b1a57600080fd5b6040516080810181811067ffffffffffffffff82111715613b3d57613b3d6133c3565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b60008219821115613b8157613b8161370d565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613bb757613bb761370d565b5060010190565b600082613bcd57613bcd613753565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152613c4c60c0830184613324565b98975050505050505050565b80516020808301519190811015613565577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b600060ff831680613cad57613cad613753565b8060ff84160691505092915050565b600060ff821660ff841680821015613cd657613cd661370d565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + "devdoc": { + "version": 1, + "kind": "dev", + "methods": { + "constructor": { + "params": { + "_finalizationPeriodSeconds": "Output finalization time in seconds.", + "_l2Oracle": "Address of the L2OutputOracle contract." + } + }, + "depositTransaction(address,uint256,uint64,bool,bytes)": { + "params": { + "_data": "Data to trigger the recipient with.", + "_gasLimit": "Minimum L2 gas limit (can be greater than or equal to this value).", + "_isCreation": "Whether or not the transaction is a contract creation.", + "_to": "Target address on L2.", + "_value": "ETH value to send to the recipient." + } + }, + "finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes)": { + "params": { + "_l2BlockNumber": "L2 block number of the outputRoot.", + "_outputRootProof": "Inclusion proof of the withdrawer contracts storage root.", + "_tx": "Withdrawal transaction to finalize.", + "_withdrawalProof": "Inclusion proof for the given withdrawal in the withdrawer contract." + } + }, + "isBlockFinalized(uint256)": { + "params": { + "_l2BlockNumber": "The number of the L2 block." + } + }, + "version()": { + "returns": { + "_0": "Semver contract version as a string." + } + } + }, + "events": { + "TransactionDeposited(address,address,uint256,bytes)": { + "params": { + "from": "Address that triggered the deposit transaction.", + "opaqueData": "ABI encoded deposit data to be parsed off-chain.", + "to": "Address that the deposit transaction is directed to.", + "version": "Version of this deposit transaction event." + } + }, + "WithdrawalFinalized(bytes32,bool)": { + "params": { + "success": "Whether the withdrawal transaction was successful.", + "withdrawalHash": "Hash of the withdrawal transaction." + } + } + } + }, + "userdoc": { + "version": 1, + "kind": "user", + "methods": { + "BASE_FEE_MAX_CHANGE_DENOMINATOR()": { + "notice": "Denominator that determines max change on fee per block." + }, + "ELASTICITY_MULTIPLIER()": { + "notice": "Along with the resource limit, determines the target resource limit." + }, + "FINALIZATION_PERIOD_SECONDS()": { + "notice": "Minimum time (in seconds) that must elapse before a withdrawal can be finalized." + }, + "INITIAL_BASE_FEE()": { + "notice": "Initial base fee value." + }, + "L2_ORACLE()": { + "notice": "Address of the L2OutputOracle." + }, + "MAX_RESOURCE_LIMIT()": { + "notice": "Maximum amount of the resource that can be used within this block." + }, + "MINIMUM_BASE_FEE()": { + "notice": "Minimum base fee value, cannot go lower than this." + }, + "TARGET_RESOURCE_LIMIT()": { + "notice": "Target amount of the resource that should be used within this block." + }, + "depositTransaction(address,uint256,uint64,bool,bytes)": { + "notice": "Accepts deposits of ETH and data, and emits a TransactionDeposited event for use in deriving deposit transactions. Note that if a deposit is made by a contract, its address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider using the CrossDomainMessenger contracts for a simpler developer experience." + }, + "finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes)": { + "notice": "Finalizes a withdrawal transaction." + }, + "finalizedWithdrawals(bytes32)": { + "notice": "A list of withdrawal hashes which have been successfully finalized." + }, + "initialize()": { + "notice": "Initializer;" + }, + "isBlockFinalized(uint256)": { + "notice": "Determine if a given block number is finalized. Reverts if the call to L2_ORACLE.getL2Output reverts. Returns a boolean otherwise." + }, + "l2Sender()": { + "notice": "Address of the L2 account which initiated a withdrawal in this transaction. If the of this variable is the default L2 sender address, then we are NOT inside of a call to finalizeWithdrawalTransaction." + }, + "params()": { + "notice": "EIP-1559 style gas parameters." + }, + "version()": { + "notice": "Returns the full semver contract version." + } + }, + "events": { + "TransactionDeposited(address,address,uint256,bytes)": { + "notice": "Emitted when a transaction is deposited from L1 to L2. The parameters of this event are read by the rollup node and used to derive deposit transactions on L2." + }, + "WithdrawalFinalized(bytes32,bool)": { + "notice": "Emitted when a withdrawal transaction is finalized." + } + }, + "notice": "The OptimismPortal is a low-level contract responsible for passing messages between L1 and L2. Messages sent directly to the OptimismPortal have no form of replayability. Users are encouraged to use the L1CrossDomainMessenger for a higher-level interface." + }, + "storageLayout": { + "storage": [ + { + "astId": 25872, + "contract": "contracts/L1/OptimismPortal.sol:OptimismPortal", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 25875, + "contract": "contracts/L1/OptimismPortal.sol:OptimismPortal", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 1389, + "contract": "contracts/L1/OptimismPortal.sol:OptimismPortal", + "label": "params", + "offset": 0, + "slot": "1", + "type": "t_struct(ResourceParams)1359_storage" + }, + { + "astId": 1394, + "contract": "contracts/L1/OptimismPortal.sol:OptimismPortal", + "label": "__gap", + "offset": 0, + "slot": "2", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 961, + "contract": "contracts/L1/OptimismPortal.sol:OptimismPortal", + "label": "l2Sender", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 974, + "contract": "contracts/L1/OptimismPortal.sol:OptimismPortal", + "label": "finalizedWithdrawals", + "offset": 0, + "slot": "52", + "type": "t_mapping(t_bytes32,t_bool)" + }, + { + "astId": 979, + "contract": "contracts/L1/OptimismPortal.sol:OptimismPortal", + "label": "__gap", + "offset": 0, + "slot": "53", + "type": "t_array(t_uint256)48_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)48_storage": { + "encoding": "inplace", + "label": "uint256[48]", + "numberOfBytes": "1536" + }, + "t_array(t_uint256)49_storage": { + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_bool)": { + "encoding": "mapping", + "label": "mapping(bytes32 => bool)", + "numberOfBytes": "32" + }, + "t_struct(ResourceParams)1359_storage": { + "encoding": "inplace", + "label": "struct ResourceMetering.ResourceParams", + "numberOfBytes": "32" + }, + "t_uint128": { + "encoding": "inplace", + "label": "uint128", + "numberOfBytes": "16" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/op-bindings/hardhat/testdata/deployments/mainnet/KromaPortalProxy.json b/op-bindings/hardhat/testdata/deployments/alpha/OptimismPortalProxy.json similarity index 89% rename from op-bindings/hardhat/testdata/deployments/mainnet/KromaPortalProxy.json rename to op-bindings/hardhat/testdata/deployments/alpha/OptimismPortalProxy.json index ad7b16fba..e2d373ed6 100644 --- a/op-bindings/hardhat/testdata/deployments/mainnet/KromaPortalProxy.json +++ b/op-bindings/hardhat/testdata/deployments/alpha/OptimismPortalProxy.json @@ -1,5 +1,5 @@ { - "address": "0x9C818e93C0884f75f48d93a9BDB2E994f8d77b86", + "address": "0xf39Acf72E84af85b191BF03f7B9BcAb102Bd9172", "abi": [ { "inputs": [ @@ -129,41 +129,41 @@ "type": "receive" } ], - "transactionHash": "0xf471319166c06a71c89d8b404d91d4736cd353876c7899b7d5624e089b311e7f", + "transactionHash": "0x3aa85561932d72b07ac16a88536b21fea5e8a93bf3b87c81f635b8622c634042", "receipt": { "to": null, - "from": "0x4935E310f69695c9A6e96d3992028CAbF082f686", - "contractAddress": "0x9C818e93C0884f75f48d93a9BDB2E994f8d77b86", - "transactionIndex": 32, - "gasUsed": "523960", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000040000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x654b2e79be3cc8f187e5f1a3d4d09cd82da51ed404800e6897e4b8488c7c2304", - "transactionHash": "0xf471319166c06a71c89d8b404d91d4736cd353876c7899b7d5624e089b311e7f", + "from": "0xCFf7a9856DB3C60AB546b8F43dC5D1A4336786A0", + "contractAddress": "0xf39Acf72E84af85b191BF03f7B9BcAb102Bd9172", + "transactionIndex": 0, + "gasUsed": "523812", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000020000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000004000000000", + "blockHash": "0x3b98b3141f805127ca40450d4feb5267fbeb61c7b81418bb97fb0488484554c4", + "transactionHash": "0x3aa85561932d72b07ac16a88536b21fea5e8a93bf3b87c81f635b8622c634042", "logs": [ { - "transactionIndex": 32, - "blockNumber": 3197630, - "transactionHash": "0xf471319166c06a71c89d8b404d91d4736cd353876c7899b7d5624e089b311e7f", - "address": "0x9C818e93C0884f75f48d93a9BDB2E994f8d77b86", + "transactionIndex": 0, + "blockNumber": 7355245, + "transactionHash": "0x3aa85561932d72b07ac16a88536b21fea5e8a93bf3b87c81f635b8622c634042", + "address": "0xf39Acf72E84af85b191BF03f7B9BcAb102Bd9172", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099cf5fdc7217485ee5668bb3353aee3f99acea9", - "logIndex": 12, - "blockHash": "0x654b2e79be3cc8f187e5f1a3d4d09cd82da51ed404800e6897e4b8488c7c2304" + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cff7a9856db3c60ab546b8f43dc5d1a4336786a0", + "logIndex": 0, + "blockHash": "0x3b98b3141f805127ca40450d4feb5267fbeb61c7b81418bb97fb0488484554c4" } ], - "blockNumber": 3197630, - "cumulativeGasUsed": "4654042", + "blockNumber": 7355245, + "cumulativeGasUsed": "523812", "status": 1, "byzantium": true }, "args": [ - "0x099CF5fdC7217485Ee5668bb3353aEe3f99ACEA9" + "0xCFf7a9856DB3C60AB546b8F43dC5D1A4336786A0" ], "numDeployments": 1, - "solcInputHash": "a67bc50cc418906a9d06161576e06aa8", - "metadata": "{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"events\":{\"AdminChanged(address,address)\":{\"params\":{\"newAdmin\":\"The new owner of the contract\",\"previousAdmin\":\"The previous owner of the contract\"}},\"Upgraded(address)\":{\"params\":{\"implementation\":\"The address of the implementation contract\"}}},\"kind\":\"dev\",\"methods\":{\"admin()\":{\"returns\":{\"_0\":\"Owner address.\"}},\"changeAdmin(address)\":{\"params\":{\"_admin\":\"New owner of the proxy contract.\"}},\"constructor\":{\"params\":{\"_admin\":\"Address of the initial contract admin. Admin as the ability to access the transparent proxy interface.\"}},\"implementation()\":{\"returns\":{\"_0\":\"Implementation address.\"}},\"upgradeTo(address)\":{\"params\":{\"_implementation\":\"Address of the implementation contract.\"}},\"upgradeToAndCall(address,bytes)\":{\"params\":{\"_data\":\"Calldata to delegatecall the new implementation with.\",\"_implementation\":\"Address of the implementation contract.\"}}},\"title\":\"Proxy\",\"version\":1},\"userdoc\":{\"events\":{\"AdminChanged(address,address)\":{\"notice\":\"An event that is emitted each time the owner is upgraded. This event is part of the EIP-1967 specification.\"},\"Upgraded(address)\":{\"notice\":\"An event that is emitted each time the implementation is changed. This event is part of the EIP-1967 specification.\"}},\"kind\":\"user\",\"methods\":{\"admin()\":{\"notice\":\"Gets the owner of the proxy contract.\"},\"changeAdmin(address)\":{\"notice\":\"Changes the owner of the proxy contract. Only callable by the owner.\"},\"constructor\":{\"notice\":\"Sets the initial admin during contract deployment. Admin address is stored at the EIP-1967 admin storage slot so that accidental storage collision with the implementation is not possible.\"},\"implementation()\":{\"notice\":\"Queries the implementation address.\"},\"upgradeTo(address)\":{\"notice\":\"Set the implementation contract address. The code at the given address will execute when this contract is called.\"},\"upgradeToAndCall(address,bytes)\":{\"notice\":\"Set the implementation and call a function in a single transaction. Useful to ensure atomic execution of initialization-based upgrades.\"}},\"notice\":\"Proxy is a transparent proxy that passes through the call if the caller is the owner or if the caller is address(0), meaning that the call originated from an off-chain simulation.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/universal/Proxy.sol\":\"Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[\":@openzeppelin/=node_modules/@openzeppelin/\",\":@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\":@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\":@rari-capital/=node_modules/@rari-capital/\",\":@rari-capital/solmate/=node_modules/@rari-capital/solmate/\",\":ds-test/=node_modules/ds-test/src/\",\":forge-std/=node_modules/forge-std/src/\"]},\"sources\":{\"contracts/universal/Proxy.sol\":{\"keccak256\":\"0xfa08635f1866139673ac4fe7b07330f752f93800075b895d8fcb8484f4a3f753\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8f2247604d527f560edbb851c43b6c16b37e34972ddb305e16dd73623b8288cd\",\"dweb:/ipfs/QmfM8sLAZrxrnqyRdt1XJ5LyJh4wKbeEqk3VkvxG7BDqFj\"]}},\"version\":1}", + "solcInputHash": "cd42cb04f3b6a78e5824c9f427d0a55d", + "metadata": "{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"events\":{\"AdminChanged(address,address)\":{\"params\":{\"newAdmin\":\"The new owner of the contract\",\"previousAdmin\":\"The previous owner of the contract\"}},\"Upgraded(address)\":{\"params\":{\"implementation\":\"The address of the implementation contract\"}}},\"kind\":\"dev\",\"methods\":{\"admin()\":{\"returns\":{\"_0\":\"Owner address.\"}},\"changeAdmin(address)\":{\"params\":{\"_admin\":\"New owner of the proxy contract.\"}},\"constructor\":{\"params\":{\"_admin\":\"Address of the initial contract admin. Admin as the ability to access the transparent proxy interface.\"}},\"implementation()\":{\"returns\":{\"_0\":\"Implementation address.\"}},\"upgradeTo(address)\":{\"params\":{\"_implementation\":\"Address of the implementation contract.\"}},\"upgradeToAndCall(address,bytes)\":{\"params\":{\"_data\":\"Calldata to delegatecall the new implementation with.\",\"_implementation\":\"Address of the implementation contract.\"}}},\"title\":\"Proxy\",\"version\":1},\"userdoc\":{\"events\":{\"AdminChanged(address,address)\":{\"notice\":\"An event that is emitted each time the owner is upgraded. This event is part of the EIP-1967 specification.\"},\"Upgraded(address)\":{\"notice\":\"An event that is emitted each time the implementation is changed. This event is part of the EIP-1967 specification.\"}},\"kind\":\"user\",\"methods\":{\"admin()\":{\"notice\":\"Gets the owner of the proxy contract.\"},\"changeAdmin(address)\":{\"notice\":\"Changes the owner of the proxy contract. Only callable by the owner.\"},\"constructor\":{\"notice\":\"Sets the initial admin during contract deployment. Admin address is stored at the EIP-1967 admin storage slot so that accidental storage collision with the implementation is not possible.\"},\"implementation()\":{\"notice\":\"Queries the implementation address.\"},\"upgradeTo(address)\":{\"notice\":\"Set the implementation contract address. The code at the given address will execute when this contract is called.\"},\"upgradeToAndCall(address,bytes)\":{\"notice\":\"Set the implementation and call a function in a single transaction. Useful to ensure atomic execution of initialization-based upgrades.\"}},\"notice\":\"Proxy is a transparent proxy that passes through the call if the caller is the owner or if the caller is address(0), meaning that the call originated from an off-chain simulation.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/universal/Proxy.sol\":\"Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@eth-optimism/contracts-periphery/=node_modules/@eth-optimism/contracts-periphery/contracts/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\":@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\":@rari-capital/=node_modules/@rari-capital/\",\":@rari-capital/solmate/=node_modules/@rari-capital/solmate/\",\":contracts/=contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":excessively-safe-call/=node_modules/excessively-safe-call/\",\":forge-std/=node_modules/forge-std/src/\"]},\"sources\":{\"contracts/universal/Proxy.sol\":{\"keccak256\":\"0xfa08635f1866139673ac4fe7b07330f752f93800075b895d8fcb8484f4a3f753\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8f2247604d527f560edbb851c43b6c16b37e34972ddb305e16dd73623b8288cd\",\"dweb:/ipfs/QmfM8sLAZrxrnqyRdt1XJ5LyJh4wKbeEqk3VkvxG7BDqFj\"]}},\"version\":1}", "bytecode": "0x608060405234801561001057600080fd5b5060405161091838038061091883398101604081905261002f916100b2565b6100388161003e565b506100e2565b60006100566000805160206108f88339815191525490565b6000805160206108f8833981519152839055604080516001600160a01b038084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b6000602082840312156100c457600080fd5b81516001600160a01b03811681146100db57600080fd5b9392505050565b610807806100f16000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106d9565b610224565b6100a86100a33660046106f4565b610296565b6040516100b59190610777565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106d9565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ea565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060b565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006106357fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038390556040805173ffffffffffffffffffffffffffffffffffffffff8084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d457600080fd5b919050565b6000602082840312156106eb57600080fd5b610412826106b0565b60008060006040848603121561070957600080fd5b610712846106b0565b9250602084013567ffffffffffffffff8082111561072f57600080fd5b818601915086601f83011261074357600080fd5b81358181111561075257600080fd5b87602082850101111561076457600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a457858101830151858201604001528201610788565b818111156107b6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106d9565b610224565b6100a86100a33660046106f4565b610296565b6040516100b59190610777565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106d9565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ea565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060b565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006106357fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038390556040805173ffffffffffffffffffffffffffffffffffffffff8084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d457600080fd5b919050565b6000602082840312156106eb57600080fd5b610412826106b0565b60008060006040848603121561070957600080fd5b610712846106b0565b9250602084013567ffffffffffffffff8082111561072f57600080fd5b818601915086601f83011261074357600080fd5b81358181111561075257600080fd5b87602082850101111561076457600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a457858101830151858201604001528201610788565b818111156107b6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", "devdoc": { @@ -250,4 +250,4 @@ }, "notice": "Proxy is a transparent proxy that passes through the call if the caller is the owner or if the caller is address(0), meaning that the call originated from an off-chain simulation." } -} +} \ No newline at end of file diff --git a/op-bindings/hardhat/testdata/deployments/goerli/OptimismPortal.json b/op-bindings/hardhat/testdata/deployments/goerli/OptimismPortal.json new file mode 100644 index 000000000..23e2f8ae4 --- /dev/null +++ b/op-bindings/hardhat/testdata/deployments/goerli/OptimismPortal.json @@ -0,0 +1,674 @@ +{ + "address": "0x79C6C6b1844e3db7C30107f189CFb095Bd2c4B5d", + "abi": [ + { + "inputs": [ + { + "internalType": "contract L2OutputOracle", + "name": "_l2Oracle", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_finalizationPeriodSeconds", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "version", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "opaqueData", + "type": "bytes" + } + ], + "name": "TransactionDeposited", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "withdrawalHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "name": "WithdrawalFinalized", + "type": "event" + }, + { + "inputs": [], + "name": "BASE_FEE_MAX_CHANGE_DENOMINATOR", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ELASTICITY_MULTIPLIER", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "FINALIZATION_PERIOD_SECONDS", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "INITIAL_BASE_FEE", + "outputs": [ + { + "internalType": "uint128", + "name": "", + "type": "uint128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "L2_ORACLE", + "outputs": [ + { + "internalType": "contract L2OutputOracle", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_RESOURCE_LIMIT", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MINIMUM_BASE_FEE", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "TARGET_RESOURCE_LIMIT", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "_gasLimit", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "_isCreation", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "depositTransaction", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct Types.WithdrawalTransaction", + "name": "_tx", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_l2BlockNumber", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "version", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "stateRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "withdrawerStorageRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "latestBlockhash", + "type": "bytes32" + } + ], + "internalType": "struct Types.OutputRootProof", + "name": "_outputRootProof", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_withdrawalProof", + "type": "bytes" + } + ], + "name": "finalizeWithdrawalTransaction", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "finalizedWithdrawals", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_l2BlockNumber", + "type": "uint256" + } + ], + "name": "isBlockFinalized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2Sender", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "params", + "outputs": [ + { + "internalType": "uint128", + "name": "prevBaseFee", + "type": "uint128" + }, + { + "internalType": "uint64", + "name": "prevBoughtGas", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "prevBlockNum", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x3ac590c822271c4ee52c3327f8154518b3a2d0ca0d4aeacbf74bc2a7a9bf0d5b", + "receipt": { + "to": null, + "from": "0xCFf7a9856DB3C60AB546b8F43dC5D1A4336786A0", + "contractAddress": "0x79C6C6b1844e3db7C30107f189CFb095Bd2c4B5d", + "transactionIndex": 0, + "gasUsed": "3481823", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000", + "blockHash": "0xd2afc46aa8ad4b9d42ff65f9e0b2e76a9864bdda53838da89d4ecead4ef54242", + "transactionHash": "0x3ac590c822271c4ee52c3327f8154518b3a2d0ca0d4aeacbf74bc2a7a9bf0d5b", + "logs": [ + { + "transactionIndex": 0, + "blockNumber": 7355246, + "transactionHash": "0x3ac590c822271c4ee52c3327f8154518b3a2d0ca0d4aeacbf74bc2a7a9bf0d5b", + "address": "0x79C6C6b1844e3db7C30107f189CFb095Bd2c4B5d", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 0, + "blockHash": "0xd2afc46aa8ad4b9d42ff65f9e0b2e76a9864bdda53838da89d4ecead4ef54242" + } + ], + "blockNumber": 7355246, + "cumulativeGasUsed": "3481823", + "status": 1, + "byzantium": true + }, + "args": [ + "0x1Bf3F468e52aA31fd19BaF006B23c327c8fc7198", + 2 + ], + "numDeployments": 1, + "solcInputHash": "cd42cb04f3b6a78e5824c9f427d0a55d", + "metadata": "{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract L2OutputOracle\",\"name\":\"_l2Oracle\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"opaqueData\",\"type\":\"bytes\"}],\"name\":\"TransactionDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"name\":\"WithdrawalFinalized\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BASE_FEE_MAX_CHANGE_DENOMINATOR\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ELASTICITY_MULTIPLIER\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FINALIZATION_PERIOD_SECONDS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INITIAL_BASE_FEE\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_ORACLE\",\"outputs\":[{\"internalType\":\"contract L2OutputOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_RESOURCE_LIMIT\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINIMUM_BASE_FEE\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TARGET_RESOURCE_LIMIT\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"_isCreation\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"depositTransaction\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Types.WithdrawalTransaction\",\"name\":\"_tx\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawerStorageRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"latestBlockhash\",\"type\":\"bytes32\"}],\"internalType\":\"struct Types.OutputRootProof\",\"name\":\"_outputRootProof\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_withdrawalProof\",\"type\":\"bytes\"}],\"name\":\"finalizeWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"finalizedWithdrawals\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"isBlockFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"params\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"prevBaseFee\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"prevBoughtGas\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"prevBlockNum\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"custom:proxied\":\"@title OptimismPortal\",\"events\":{\"TransactionDeposited(address,address,uint256,bytes)\":{\"params\":{\"from\":\"Address that triggered the deposit transaction.\",\"opaqueData\":\"ABI encoded deposit data to be parsed off-chain.\",\"to\":\"Address that the deposit transaction is directed to.\",\"version\":\"Version of this deposit transaction event.\"}},\"WithdrawalFinalized(bytes32,bool)\":{\"params\":{\"success\":\"Whether the withdrawal transaction was successful.\",\"withdrawalHash\":\"Hash of the withdrawal transaction.\"}}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"custom:semver\":\"0.0.1\",\"params\":{\"_finalizationPeriodSeconds\":\"Output finalization time in seconds.\",\"_l2Oracle\":\"Address of the L2OutputOracle contract.\"}},\"depositTransaction(address,uint256,uint64,bool,bytes)\":{\"params\":{\"_data\":\"Data to trigger the recipient with.\",\"_gasLimit\":\"Minimum L2 gas limit (can be greater than or equal to this value).\",\"_isCreation\":\"Whether or not the transaction is a contract creation.\",\"_to\":\"Target address on L2.\",\"_value\":\"ETH value to send to the recipient.\"}},\"finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes)\":{\"params\":{\"_l2BlockNumber\":\"L2 block number of the outputRoot.\",\"_outputRootProof\":\"Inclusion proof of the withdrawer contracts storage root.\",\"_tx\":\"Withdrawal transaction to finalize.\",\"_withdrawalProof\":\"Inclusion proof for the given withdrawal in the withdrawer contract.\"}},\"isBlockFinalized(uint256)\":{\"params\":{\"_l2BlockNumber\":\"The number of the L2 block.\"}},\"version()\":{\"returns\":{\"_0\":\"Semver contract version as a string.\"}}},\"version\":1},\"userdoc\":{\"events\":{\"TransactionDeposited(address,address,uint256,bytes)\":{\"notice\":\"Emitted when a transaction is deposited from L1 to L2. The parameters of this event are read by the rollup node and used to derive deposit transactions on L2.\"},\"WithdrawalFinalized(bytes32,bool)\":{\"notice\":\"Emitted when a withdrawal transaction is finalized.\"}},\"kind\":\"user\",\"methods\":{\"BASE_FEE_MAX_CHANGE_DENOMINATOR()\":{\"notice\":\"Denominator that determines max change on fee per block.\"},\"ELASTICITY_MULTIPLIER()\":{\"notice\":\"Along with the resource limit, determines the target resource limit.\"},\"FINALIZATION_PERIOD_SECONDS()\":{\"notice\":\"Minimum time (in seconds) that must elapse before a withdrawal can be finalized.\"},\"INITIAL_BASE_FEE()\":{\"notice\":\"Initial base fee value.\"},\"L2_ORACLE()\":{\"notice\":\"Address of the L2OutputOracle.\"},\"MAX_RESOURCE_LIMIT()\":{\"notice\":\"Maximum amount of the resource that can be used within this block.\"},\"MINIMUM_BASE_FEE()\":{\"notice\":\"Minimum base fee value, cannot go lower than this.\"},\"TARGET_RESOURCE_LIMIT()\":{\"notice\":\"Target amount of the resource that should be used within this block.\"},\"depositTransaction(address,uint256,uint64,bool,bytes)\":{\"notice\":\"Accepts deposits of ETH and data, and emits a TransactionDeposited event for use in deriving deposit transactions. Note that if a deposit is made by a contract, its address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider using the CrossDomainMessenger contracts for a simpler developer experience.\"},\"finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes)\":{\"notice\":\"Finalizes a withdrawal transaction.\"},\"finalizedWithdrawals(bytes32)\":{\"notice\":\"A list of withdrawal hashes which have been successfully finalized.\"},\"initialize()\":{\"notice\":\"Initializer;\"},\"isBlockFinalized(uint256)\":{\"notice\":\"Determine if a given block number is finalized. Reverts if the call to L2_ORACLE.getL2Output reverts. Returns a boolean otherwise.\"},\"l2Sender()\":{\"notice\":\"Address of the L2 account which initiated a withdrawal in this transaction. If the of this variable is the default L2 sender address, then we are NOT inside of a call to finalizeWithdrawalTransaction.\"},\"params()\":{\"notice\":\"EIP-1559 style gas parameters.\"},\"version()\":{\"notice\":\"Returns the full semver contract version.\"}},\"notice\":\"The OptimismPortal is a low-level contract responsible for passing messages between L1 and L2. Messages sent directly to the OptimismPortal have no form of replayability. Users are encouraged to use the L1CrossDomainMessenger for a higher-level interface.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L1/OptimismPortal.sol\":\"OptimismPortal\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@eth-optimism/contracts-periphery/=node_modules/@eth-optimism/contracts-periphery/contracts/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\":@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\":@rari-capital/=node_modules/@rari-capital/\",\":@rari-capital/solmate/=node_modules/@rari-capital/solmate/\",\":contracts/=contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":excessively-safe-call/=node_modules/excessively-safe-call/\",\":forge-std/=node_modules/forge-std/src/\"]},\"sources\":{\"contracts/L1/L2OutputOracle.sol\":{\"keccak256\":\"0xe3242f566b5c1ae0e983e734e053552b7ef53d73f23575b5c6bbad4505aacc61\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://45451a37d695b27f1e8d80f50a75d54be55b406538b24d913cb210c021a77876\",\"dweb:/ipfs/QmUqgkGNkDBZhGJQJjKdHWwuFUhg7Cu1qPpYUcRFWSi3Pr\"]},\"contracts/L1/OptimismPortal.sol\":{\"keccak256\":\"0xbdfc47a8ef7a1665d8aa25dabcc0281860ef88c5c9646a230e53af0d27248456\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0cad521349efcdd4ca4a0a937ce126cf40417f53373bf3235182f7d9a97df358\",\"dweb:/ipfs/QmbydUJzEtjR4xaPicsjFk5MunHz41peVCRrNR7GPDBEq2\"]},\"contracts/L1/ResourceMetering.sol\":{\"keccak256\":\"0xcbb34b35a67da37c07bc9ddf900012b94605491e6845a8811fd5d6d9fff8aed6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://84f801cd1c3d30f13a9a537c550898ffb170a810d640e2138ff6efe16c76a6ca\",\"dweb:/ipfs/QmYR49Qv7nJey69r726QmkpAWwqukAN7CBXj3xn5KxHUcV\"]},\"contracts/libraries/Burn.sol\":{\"keccak256\":\"0x54233b226ba6919dc46d438bc790108d8f855001002a1b9c3c37aed7a83e5f3f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4051a4baca357a9191a6c9e3aa1593a17b69dd7915966e23e4cb269e9c1d9ed4\",\"dweb:/ipfs/QmadKjGKvxm53abVHQdsxrXBc8e9jXywu6vvhkAgjsx59J\"]},\"contracts/libraries/Bytes.sol\":{\"keccak256\":\"0x90538c876448b34513ece8e91dc3d541291f17263813f2baf7a0e93b09993f31\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://16bd9e3249cd8659fdfe03a4c77b4d72ff9d3abbde81054dcd37710d1e176e8f\",\"dweb:/ipfs/QmbQ9VBUJfzWUK2KneSFNjtiH4dmPKChsZSQVNFAXJrrrZ\"]},\"contracts/libraries/Encoding.sol\":{\"keccak256\":\"0xca8dce21b608bac08ae75d42879e90f5e7865fb29587df181a22a3b14ce21985\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29b093d22061b4c499566cb35ce2755cce241ab9f02716cf9cdbdd81f9c47871\",\"dweb:/ipfs/QmdF4DHQUEeEeW67ugmEC3AHn6QrBBNYtwV7UaHaSTe2pa\"]},\"contracts/libraries/Hashing.sol\":{\"keccak256\":\"0xef5d0156a50f96bf32d34ef7a217872791b1b3c11baa9c13183a6388356a918d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7790ae2e79906d26924f7b69e8a3610031db48cef4b6e306e923431def8ba86\",\"dweb:/ipfs/QmSGJEBv5XsDtsr2QTJnwGKXAXxqZafYGeZcRKKfw1yrUc\"]},\"contracts/libraries/Types.sol\":{\"keccak256\":\"0x93045c0c97287a12e1bdde0685e26f185411b81b93b9df15c8cce90bccdcf77c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0c90b59d09f92aba5ab0862264efe2beb0f77fba750867f8d686a1f39ee6af2c\",\"dweb:/ipfs/QmW7Zj5d7NgDi5Mdv6jptJgfsUj8LvGroud9p2Z7vhcKLC\"]},\"contracts/libraries/rlp/RLPReader.sol\":{\"keccak256\":\"0xef51cf7340f3e3f6ff9f651d6b284831a38f1631635c5d72121ad9498caf15b3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://034c29eee4bc5ed4f0d013162d20c17cbc0ba5d26fd0cd477bcac0235e8266f0\",\"dweb:/ipfs/QmQZ1eFbqkVKAkKc4mXUCbGrdD6rE4sgzbzbSzS8RC4SCX\"]},\"contracts/libraries/rlp/RLPWriter.sol\":{\"keccak256\":\"0x5aa9d21c5b41c9786f23153f819d561ae809a1d55c7b0d423dfeafdfbacedc78\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://921c44e6a0982b9a4011900fda1bda2c06b7a85894967de98b407a83fe9f90c0\",\"dweb:/ipfs/QmSsHLKDUQ82kpKdqB6VntVGKuPDb4W9VdotsubuqWBzio\"]},\"contracts/libraries/trie/MerkleTrie.sol\":{\"keccak256\":\"0xbbf5b9e6b2ea942038ca5ed5722352c499019b0a0026edbda9a70f777aa2600d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2222d31689b9a41747a0082c8c8689ca7560ca69528f3901c73ca0d2efc2985f\",\"dweb:/ipfs/QmXHEZtsUkrGLGT9R5kHETRNwPURCVnrKKvbbmHpDUUHVj\"]},\"contracts/libraries/trie/SecureMerkleTrie.sol\":{\"keccak256\":\"0xd27ad3665179493bab93a4316bcd2a780bfec524f774226420e931acf8043ebb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3ec639edab8c22e020dd7a108f69d7dc99f2e9d0bb9075e9aa41d4bd1f5cc03\",\"dweb:/ipfs/QmR9fMgKEVLNm4LPbpSEX9AepmELxX6JXNm2o8tCXceBSF\"]},\"contracts/universal/Semver.sol\":{\"keccak256\":\"0x8215e8fbaace5e06fdf0be26cd8ec224847cf03e89bd78dc8ba3ec2cb429d4fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cfe4869ad9a1a10aee499ed4ac74a19f9f95dd9173efa656f6b1728f6912a9ad\",\"dweb:/ipfs/QmbiKSxpNnKQv8jwEvGUJkksaLPp8UU8N1twbDimM3RhXr\"]},\"contracts/vendor/AddressAliasHelper.sol\":{\"keccak256\":\"0x6ecb83b4ec80fbe49c22f4f95d90482de64660ef5d422a19f4d4b04df31c1237\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1d0885be6e473962f9a0622176a22300165ac0cc1a1d7f2e22b11c3d656ace88\",\"dweb:/ipfs/QmPRa3KmRpXW5P9ykveKRDgYN5zYo4cYLAYSnoqHX3KnXR\"]},\"node_modules/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"node_modules/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"node_modules/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"node_modules/@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x32c202bd28995dd20c4347b7c6467a6d3241c74c8ad3edcbb610cd9205916c45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8179c356adb19e70d6b31a1eedc8c5c7f0c00e669e2540f4099e3844c6074d30\",\"dweb:/ipfs/QmWFbivarEobbqhS1go64ootVuHfVohBseerYy9FTEd1W2\"]},\"node_modules/@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xc995bddbca1ae19788db9f8b61e63385edd3fddf89693b612d5abd1a275974d2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab84f13e6e6e0823854a0cddd49e96df052092d5919f95587607f0ed28a64cb6\",\"dweb:/ipfs/QmbNtqAq23ZDjCzHukQaa7B3y6rcobscm6FZF5PMQXcnVr\"]},\"node_modules/@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689\",\"dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy\"]},\"node_modules/@rari-capital/solmate/src/utils/FixedPointMathLib.sol\":{\"keccak256\":\"0x622fcd8a49e132df5ec7651cc6ae3aaf0cf59bdcd67a9a804a1b9e2485113b7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af77088eb606427d4c55e578984a615779c86bc30646a20f7bb27299ba390f7c\",\"dweb:/ipfs/QmZGQdhdQDtHc7gZXWrKXgA3govc74X8U63BiWhPQK3mK8\"]},\"node_modules/excessively-safe-call/src/ExcessivelySafeCall.sol\":{\"keccak256\":\"0x7d9d432e8f02168bf3f790e3dabcf36402782acf7ffa476cabe86fc4d8962eb2\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://1adc13e7f399f500ea5f81480ad149a50408fde7990a2c6347e6377486f389dc\",\"dweb:/ipfs/QmSvm5TUBJqknsqNJLLHqNS4MLSH5k3vNrbquVg6ZKSfx9\"]}},\"version\":1}", + "bytecode": "0x6101206040523480156200001257600080fd5b506040516200401238038062004012833981016040819052620000359162000261565b6000608081905260a052600160c0526001600160a01b0382166101005260e08190526200006162000069565b50506200029d565b600054610100900460ff16158080156200008a5750600054600160ff909116105b80620000ba5750620000a730620001af60201b6200127e1760201c565b158015620000ba575060005460ff166001145b620001235760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000147576000805461ff0019166101001790555b603380546001600160a01b03191661dead17905562000165620001be565b8015620001ac576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6001600160a01b03163b151590565b600054610100900460ff166200022b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016200011a565b60408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b0217600155565b600080604083850312156200027557600080fd5b82516001600160a01b03811681146200028d57600080fd5b6020939093015192949293505050565b60805160a05160c05160e05161010051613d1b620002f76000396000818161013401528181610b690152610d900152600081816103bd015261155701526000610918015260006108ef015260006108c60152613d1b6000f3fe6080604052600436106100f65760003560e01c8063a14238e71161008a578063cff0ab9611610059578063cff0ab96146102f7578063e9e05c4214610398578063f4daa291146103ab578063fdc9fe1d146103df57600080fd5b8063a14238e71461026d578063c4fc4798146102ad578063ca3e99ba146102cd578063cd7c9789146102e257600080fd5b80636bb0291e116100c65780636bb0291e146102005780638129fc1c14610215578063867ead131461022a5780639bf62d821461024057600080fd5b80621c2ff61461012257806313620abd1461018057806354fd4d50146101b957806364b79208146101db57600080fd5b3661011d5761011b3334620186a06000604051806020016040528060008152506103f2565b005b600080fd5b34801561012e57600080fd5b506101567f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018c57600080fd5b50610198633b9aca0081565b6040516fffffffffffffffffffffffffffffffff9091168152602001610177565b3480156101c557600080fd5b506101ce6108bf565b604051610177919061336e565b3480156101e757600080fd5b506101f2627a120081565b604051908152602001610177565b34801561020c57600080fd5b506101f2600481565b34801561022157600080fd5b5061011b610962565b34801561023657600080fd5b506101f261271081565b34801561024c57600080fd5b506033546101569073ffffffffffffffffffffffffffffffffffffffff1681565b34801561027957600080fd5b5061029d610288366004613381565b60346020526000908152604090205460ff1681565b6040519015158152602001610177565b3480156102b957600080fd5b5061029d6102c8366004613381565b610b20565b3480156102d957600080fd5b506101f2610be5565b3480156102ee57600080fd5b506101f2600881565b34801561030357600080fd5b5060015461035f906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610177565b61011b6103a63660046134c6565b6103f2565b3480156103b757600080fd5b506101f27f000000000000000000000000000000000000000000000000000000000000000081565b61011b6103ed3660046135b4565b610bf6565b8260005a905083156104a95773ffffffffffffffffffffffffffffffffffffffff8716156104a957604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b333281146104ca575033731111000000000000000000000000000000001111015b600034888888886040516020016104e59594939291906136a8565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3284604051610555919061336e565b60405180910390a45050600154600090610595907801000000000000000000000000000000000000000000000000900467ffffffffffffffff164361373c565b9050801561071e5760006105ad6004627a1200613782565b6001546105d89190700100000000000000000000000000000000900467ffffffffffffffff166137ea565b9050600060086105ec6004627a1200613782565b60015461060c9085906fffffffffffffffffffffffffffffffff1661385e565b6106169190613782565b6106209190613782565b60015490915060009061066c906106569061064e9085906fffffffffffffffffffffffffffffffff1661391a565b61271061129a565b6fffffffffffffffffffffffffffffffff6112b5565b905060018411156106df576106dc610656670de0b6b3a76400006106c8610694600883613782565b6106a690670de0b6b3a76400006137ea565b6106b160018a61373c565b6106c390670de0b6b3a764000061398e565b6112c4565b6106d2908561385e565b61064e9190613782565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054849190601090610751908490700100000000000000000000000000000000900467ffffffffffffffff166139cb565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550627a1200600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff16131561082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d6974000060648201526084016104a0565b600154600090610859906fffffffffffffffffffffffffffffffff1667ffffffffffffffff86166139f7565b6fffffffffffffffffffffffffffffffff169050600061087d48633b9aca006112f5565b6108879083613a2f565b905060005a610896908661373c565b9050808211156108b2576108b26108ad828461373c565b611305565b5050505050505050505050565b60606108ea7f0000000000000000000000000000000000000000000000000000000000000000611333565b6109137f0000000000000000000000000000000000000000000000000000000000000000611333565b61093c7f0000000000000000000000000000000000000000000000000000000000000000611333565b60405160200161094e93929190613a43565b604051602081830303815290604052905090565b600054610100900460ff16158080156109825750600054600160ff909116105b8061099c5750303b15801561099c575060005460ff166001145b610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104a0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610a8657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055610aba611470565b8015610b1d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101829052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae557906024016040805180830381865afa158015610baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd39190613ab9565b9050610bde81611553565b9392505050565b610bf36004627a1200613782565b81565b60335473ffffffffffffffffffffffffffffffffffffffff1661dead14610c9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e0060648201526084016104a0565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610d5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084016104a0565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae557906024016040805180830381865afa158015610deb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0f9190613ab9565b9050610e1a81611553565b610ea6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4f7074696d69736d506f7274616c3a2070726f706f73616c206973206e6f742060448201527f7965742066696e616c697a65640000000000000000000000000000000000000060648201526084016104a0565b610ebd610eb836869003860186613b08565b61158d565b815114610f4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084016104a0565b6000610f57876115e9565b9050610f9e81866040013586868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061161992505050565b61102a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f66000000000000000000000000000060648201526084016104a0565b60008181526034602052604090205460ff16156110c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a6564000000000000000000000060648201526084016104a0565b600081815260346020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055608087015161111290614e2090613b6e565b5a10156111a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a20696e73756666696369656e742067617360448201527f20746f2066696e616c697a65207769746864726177616c00000000000000000060648201526084016104a0565b8660200151603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000611206886040015189608001518a6060015160008c60a001516116e0565b50603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915082907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061126c90841515815260200190565b60405180910390a25050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000818312156112aa57816112ac565b825b90505b92915050565b60008183126112aa57816112ac565b60006112ac670de0b6b3a7640000836112dc8661176b565b6112e6919061385e565b6112f09190613782565b6119af565b6000818310156112aa57816112ac565b6000805a90505b825a611318908361373c565b101561132e5761132782613b86565b915061130c565b505050565b60608160000361137657505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156113a0578061138a81613b86565b91506113999050600a83613a2f565b915061137a565b60008167ffffffffffffffff8111156113bb576113bb6133c3565b6040519080825280601f01601f1916602001820160405280156113e5576020820181803683370190505b5090505b8415611468576113fa60018361373c565b9150611407600a86613bbe565b611412906030613b6e565b60f81b81838151811061142757611427613bd2565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611461600a86613a2f565b94506113e9565b949350505050565b600054610100900460ff16611507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104a0565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b60007f000000000000000000000000000000000000000000000000000000000000000082602001516115859190613b6e565b421192915050565b600081600001518260200151836040015184606001516040516020016115cc949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a088015193516000976115cc979096959101613c01565b604080516020810185905260009181018290528190606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830181905292506116d79101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f01000000000000000000000000000000000000000000000000000000000000006020830152908587611bee565b95945050505050565b6000606060008060008661ffff1667ffffffffffffffff811115611706576117066133c3565b6040519080825280601f01601f191660200182016040528015611730576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115611751578692505b828152826000602083013e90999098509650505050505050565b60008082136117d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016104a0565b600060606117e384611c12565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136119e057506000919050565b680755bf798b4a1bf1e58212611a52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016104a0565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b600080611bfa86611ce8565b9050611c0881868686611d1a565b9695505050505050565b6000808211611c7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016104a0565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60608180519060200120604051602001611d0491815260200190565b6040516020818303038152906040529050919050565b6000806000611d2a878686611d57565b91509150818015611d4c57508051602080830191909120875191880191909120145b979650505050505050565b600060606000611d6685611e72565b90506000806000611d78848a89611f6d565b81519295509093509150158080611d8c5750815b611e18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2070726f76696465642070726f6f6620697320696e60448201527f76616c696400000000000000000000000000000000000000000000000000000060648201526084016104a0565b600081611e345760405180602001604052806000815250611e60565b611e6086611e4360018861373c565b81518110611e5357611e53613bd2565b60200260200101516124f6565b919b919a509098505050505050505050565b60606000611e7f83612520565b90506000815167ffffffffffffffff811115611e9d57611e9d6133c3565b604051908082528060200260200182016040528015611ee257816020015b6040805180820190915260608082526020820152815260200190600190039081611ebb5790505b50905060005b8251811015611f65576000611f15848381518110611f0857611f08613bd2565b6020026020010151612553565b90506040518060400160405280828152602001611f3183612520565b815250838381518110611f4657611f46613bd2565b6020026020010181905250508080611f5d90613b86565b915050611ee8565b509392505050565b60006060818080611f7d8761261a565b90506000869050600080611fa4604051806040016040528060608152602001606081525090565b60005b8c518110156124b2578c8181518110611fc257611fc2613bd2565b602002602001015191508284611fd89190613b6e565b9350611fe5600188613b6e565b96508360000361206657815180516020909101208514612061576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016104a0565b6121a2565b81515160201161210857815180516020909101208514612061576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c20686173680000000000000000000000000000000000000000000000000060648201526084016104a0565b8151859061211590613c58565b146121a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f652068617368000000000000000000000000000000000000000000000000000060648201526084016104a0565b6121ae60106001613b6e565b8260200151510361222057855184146124b25760008685815181106121d5576121d5613bd2565b602001015160f81c60f81b60f81c9050600083602001518260ff168151811061220057612200613bd2565b602002602001015190506122138161279d565b96506001945050506124a0565b600282602001515103612418576000612238836127d3565b905060008160008151811061224f5761224f613bd2565b016020015160f81c90506000612266600283613c9a565b612271906002613cbc565b90506000612282848360ff166127f7565b905060006122908b8a6127f7565b9050600061229e838361282d565b905060ff8516600214806122b5575060ff85166003145b1561230b578083511480156122ca5750808251145b156122dc576122d9818b613b6e565b99505b507f800000000000000000000000000000000000000000000000000000000000000099506124b2945050505050565b60ff8516158061231e575060ff85166001145b15612390578251811461235a57507f800000000000000000000000000000000000000000000000000000000000000099506124b2945050505050565b612381886020015160018151811061237457612374613bd2565b602002602001015161279d565b9a5097506124a0945050505050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e20707265666978000000000000000000000000000060648201526084016104a0565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f646500000000000000000000000000000000000000000000000060648201526084016104a0565b806124aa81613b86565b915050611fa7565b507f80000000000000000000000000000000000000000000000000000000000000008414866124e187866127f7565b909e909d50909b509950505050505050505050565b602081015180516060916112af916125109060019061373c565b81518110611f0857611f08613bd2565b6040805180820182526000808252602091820152815180830190925282518252808301908201526060906112af906128d9565b6060600080600061256385612b32565b91945092509050600081600181111561257e5761257e613cdf565b1461260b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f524c505265616465723a20696e76616c696420524c502062797465732076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016104a0565b6116d78560200151848461301d565b606060008251600261262c919061398e565b67ffffffffffffffff811115612644576126446133c3565b6040519080825280601f01601f19166020018201604052801561266e576020820181803683370190505b50905060005b835181101561279657600484828151811061269157612691613bd2565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c826126c683600261398e565b815181106126d6576126d6613bd2565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350601084828151811061271957612719613bd2565b016020015161272b919060f81c613c9a565b60f81b8261273a83600261398e565b612745906001613b6e565b8151811061275557612755613bd2565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508061278e81613b86565b915050612674565b5092915050565b600060606020836000015110156127be576127b7836130fb565b90506127ca565b6127c783612553565b90505b610bde81613c58565b60606112af6127f28360200151600081518110611f0857611f08613bd2565b61261a565b60608251821061281657506040805160208101909152600081526112af565b6112ac8383848651612828919061373c565b613106565b6000805b8084511180156128415750808351115b80156128c2575082818151811061285a5761285a613bd2565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684828151811061289957612899613bd2565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156112ac57806128d181613b86565b915050612831565b60606000806128e784612b32565b9193509091506001905081600181111561290357612903613cdf565b14612990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f524c505265616465723a20696e76616c696420524c50206c6973742076616c7560448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016104a0565b6040805160208082526104208201909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816129a95790505090506000835b8651811015612b275760208210612a6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2070726f766964656420524c50206c6973742065786360448201527f65656473206d6178206c697374206c656e67746800000000000000000000000060648201526084016104a0565b600080612aac6040518060400160405280858c60000151612a90919061373c565b8152602001858c60200151612aa59190613b6e565b9052612b32565b509150915060405180604001604052808383612ac89190613b6e565b8152602001848b60200151612add9190613b6e565b815250858581518110612af257612af2613bd2565b6020908102919091010152612b08600185613b6e565b9350612b148183613b6e565b612b1e9084613b6e565b925050506129d6565b508152949350505050565b600080600080846000015111612bca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f524c505265616465723a20524c50206974656d2063616e6e6f74206265206e7560448201527f6c6c00000000000000000000000000000000000000000000000000000000000060648201526084016104a0565b6020840151805160001a607f8111612bef576000600160009450945094505050613016565b60b78111612cab576000612c0460808361373c565b905080876000015111612c99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f524c505265616465723a20696e76616c696420524c502073686f72742073747260448201527f696e67000000000000000000000000000000000000000000000000000000000060648201526084016104a0565b60019550935060009250613016915050565b60bf8111612e1a576000612cc060b78361373c565b905080876000015111612d55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67207374726960448201527f6e67206c656e677468000000000000000000000000000000000000000000000060648201526084016104a0565b600183015160208290036101000a9004612d6f8183613b6e565b885111612dfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67207374726960448201527f6e6700000000000000000000000000000000000000000000000000000000000060648201526084016104a0565b612e09826001613b6e565b965094506000935061301692505050565b60f78111612ed5576000612e2f60c08361373c565b905080876000015111612ec4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f524c505265616465723a20696e76616c696420524c502073686f7274206c697360448201527f740000000000000000000000000000000000000000000000000000000000000060648201526084016104a0565b600195509350849250613016915050565b6000612ee260f78361373c565b905080876000015111612f77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67206c69737460448201527f206c656e6774680000000000000000000000000000000000000000000000000060648201526084016104a0565b600183015160208290036101000a9004612f918183613b6e565b885111612ffa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67206c69737460448201526064016104a0565b613005826001613b6e565b965094506001935061301692505050565b9193909250565b606060008267ffffffffffffffff81111561303a5761303a6133c3565b6040519080825280601f01601f191660200182016040528015613064576020820181803683370190505b5090508051600003613077579050610bde565b60006130838587613b6e565b90506020820160005b613097602087613a2f565b8110156130ce57825182526130ad602084613b6e565b92506130ba602083613b6e565b9150806130c681613b86565b91505061308c565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b60606112af826132de565b60608182601f011015613175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016104a0565b8282840110156131e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016104a0565b8183018451101561324e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016104a0565b60608215801561326d57604051915060008252602082016040526132d5565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156132a657805183526020928301920161328e565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60606112af82602001516000846000015161301d565b60005b8381101561330f5781810151838201526020016132f7565b8381111561331e576000848401525b50505050565b6000815180845261333c8160208601602086016132f4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006112ac6020830184613324565b60006020828403121561339357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146133be57600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715613415576134156133c3565b60405290565b600082601f83011261342c57600080fd5b813567ffffffffffffffff80821115613447576134476133c3565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561348d5761348d6133c3565b816040528381528660208588010111156134a657600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156134de57600080fd5b6134e78661339a565b945060208601359350604086013567ffffffffffffffff808216821461350c57600080fd5b909350606087013590811515821461352357600080fd5b9092506080870135908082111561353957600080fd5b506135468882890161341b565b9150509295509295909350565b60006080828403121561356557600080fd5b50919050565b60008083601f84011261357d57600080fd5b50813567ffffffffffffffff81111561359557600080fd5b6020830191508360208285010111156135ad57600080fd5b9250929050565b600080600080600060e086880312156135cc57600080fd5b853567ffffffffffffffff808211156135e457600080fd5b9087019060c0828a0312156135f857600080fd5b6136006133f2565b823581526136106020840161339a565b60208201526136216040840161339a565b6040820152606083013560608201526080830135608082015260a08301358281111561364c57600080fd5b6136588b82860161341b565b60a0830152509650602088013595506136748960408a01613553565b945060c088013591508082111561368a57600080fd5b506136978882890161356b565b969995985093965092949392505050565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516136fc8160498501602087016132f4565b919091016049019695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561374e5761374e61370d565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261379157613791613753565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156137e5576137e561370d565b500590565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156138245761382461370d565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156138585761385861370d565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561389f5761389f61370d565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156138da576138da61370d565b600087129250878205871284841616156138f6576138f661370d565b8785058712818416161561390c5761390c61370d565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038413811516156139545761395461370d565b827f80000000000000000000000000000000000000000000000000000000000000000384128116156139885761398861370d565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139c6576139c661370d565b500290565b600067ffffffffffffffff8083168185168083038211156139ee576139ee61370d565b01949350505050565b60006fffffffffffffffffffffffffffffffff80831681851681830481118215151615613a2657613a2661370d565b02949350505050565b600082613a3e57613a3e613753565b500490565b60008451613a558184602089016132f4565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551613a91816001850160208a016132f4565b60019201918201528351613aac8160028401602088016132f4565b0160020195945050505050565b600060408284031215613acb57600080fd5b6040516040810181811067ffffffffffffffff82111715613aee57613aee6133c3565b604052825181526020928301519281019290925250919050565b600060808284031215613b1a57600080fd5b6040516080810181811067ffffffffffffffff82111715613b3d57613b3d6133c3565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b60008219821115613b8157613b8161370d565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613bb757613bb761370d565b5060010190565b600082613bcd57613bcd613753565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152613c4c60c0830184613324565b98975050505050505050565b80516020808301519190811015613565577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b600060ff831680613cad57613cad613753565b8060ff84160691505092915050565b600060ff821660ff841680821015613cd657613cd661370d565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + "deployedBytecode": "0x6080604052600436106100f65760003560e01c8063a14238e71161008a578063cff0ab9611610059578063cff0ab96146102f7578063e9e05c4214610398578063f4daa291146103ab578063fdc9fe1d146103df57600080fd5b8063a14238e71461026d578063c4fc4798146102ad578063ca3e99ba146102cd578063cd7c9789146102e257600080fd5b80636bb0291e116100c65780636bb0291e146102005780638129fc1c14610215578063867ead131461022a5780639bf62d821461024057600080fd5b80621c2ff61461012257806313620abd1461018057806354fd4d50146101b957806364b79208146101db57600080fd5b3661011d5761011b3334620186a06000604051806020016040528060008152506103f2565b005b600080fd5b34801561012e57600080fd5b506101567f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018c57600080fd5b50610198633b9aca0081565b6040516fffffffffffffffffffffffffffffffff9091168152602001610177565b3480156101c557600080fd5b506101ce6108bf565b604051610177919061336e565b3480156101e757600080fd5b506101f2627a120081565b604051908152602001610177565b34801561020c57600080fd5b506101f2600481565b34801561022157600080fd5b5061011b610962565b34801561023657600080fd5b506101f261271081565b34801561024c57600080fd5b506033546101569073ffffffffffffffffffffffffffffffffffffffff1681565b34801561027957600080fd5b5061029d610288366004613381565b60346020526000908152604090205460ff1681565b6040519015158152602001610177565b3480156102b957600080fd5b5061029d6102c8366004613381565b610b20565b3480156102d957600080fd5b506101f2610be5565b3480156102ee57600080fd5b506101f2600881565b34801561030357600080fd5b5060015461035f906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610177565b61011b6103a63660046134c6565b6103f2565b3480156103b757600080fd5b506101f27f000000000000000000000000000000000000000000000000000000000000000081565b61011b6103ed3660046135b4565b610bf6565b8260005a905083156104a95773ffffffffffffffffffffffffffffffffffffffff8716156104a957604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b333281146104ca575033731111000000000000000000000000000000001111015b600034888888886040516020016104e59594939291906136a8565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3284604051610555919061336e565b60405180910390a45050600154600090610595907801000000000000000000000000000000000000000000000000900467ffffffffffffffff164361373c565b9050801561071e5760006105ad6004627a1200613782565b6001546105d89190700100000000000000000000000000000000900467ffffffffffffffff166137ea565b9050600060086105ec6004627a1200613782565b60015461060c9085906fffffffffffffffffffffffffffffffff1661385e565b6106169190613782565b6106209190613782565b60015490915060009061066c906106569061064e9085906fffffffffffffffffffffffffffffffff1661391a565b61271061129a565b6fffffffffffffffffffffffffffffffff6112b5565b905060018411156106df576106dc610656670de0b6b3a76400006106c8610694600883613782565b6106a690670de0b6b3a76400006137ea565b6106b160018a61373c565b6106c390670de0b6b3a764000061398e565b6112c4565b6106d2908561385e565b61064e9190613782565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054849190601090610751908490700100000000000000000000000000000000900467ffffffffffffffff166139cb565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550627a1200600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff16131561082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d6974000060648201526084016104a0565b600154600090610859906fffffffffffffffffffffffffffffffff1667ffffffffffffffff86166139f7565b6fffffffffffffffffffffffffffffffff169050600061087d48633b9aca006112f5565b6108879083613a2f565b905060005a610896908661373c565b9050808211156108b2576108b26108ad828461373c565b611305565b5050505050505050505050565b60606108ea7f0000000000000000000000000000000000000000000000000000000000000000611333565b6109137f0000000000000000000000000000000000000000000000000000000000000000611333565b61093c7f0000000000000000000000000000000000000000000000000000000000000000611333565b60405160200161094e93929190613a43565b604051602081830303815290604052905090565b600054610100900460ff16158080156109825750600054600160ff909116105b8061099c5750303b15801561099c575060005460ff166001145b610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104a0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610a8657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055610aba611470565b8015610b1d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101829052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae557906024016040805180830381865afa158015610baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd39190613ab9565b9050610bde81611553565b9392505050565b610bf36004627a1200613782565b81565b60335473ffffffffffffffffffffffffffffffffffffffff1661dead14610c9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e0060648201526084016104a0565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610d5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084016104a0565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae557906024016040805180830381865afa158015610deb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0f9190613ab9565b9050610e1a81611553565b610ea6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4f7074696d69736d506f7274616c3a2070726f706f73616c206973206e6f742060448201527f7965742066696e616c697a65640000000000000000000000000000000000000060648201526084016104a0565b610ebd610eb836869003860186613b08565b61158d565b815114610f4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084016104a0565b6000610f57876115e9565b9050610f9e81866040013586868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061161992505050565b61102a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f66000000000000000000000000000060648201526084016104a0565b60008181526034602052604090205460ff16156110c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a6564000000000000000000000060648201526084016104a0565b600081815260346020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055608087015161111290614e2090613b6e565b5a10156111a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a20696e73756666696369656e742067617360448201527f20746f2066696e616c697a65207769746864726177616c00000000000000000060648201526084016104a0565b8660200151603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000611206886040015189608001518a6060015160008c60a001516116e0565b50603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915082907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061126c90841515815260200190565b60405180910390a25050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000818312156112aa57816112ac565b825b90505b92915050565b60008183126112aa57816112ac565b60006112ac670de0b6b3a7640000836112dc8661176b565b6112e6919061385e565b6112f09190613782565b6119af565b6000818310156112aa57816112ac565b6000805a90505b825a611318908361373c565b101561132e5761132782613b86565b915061130c565b505050565b60608160000361137657505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156113a0578061138a81613b86565b91506113999050600a83613a2f565b915061137a565b60008167ffffffffffffffff8111156113bb576113bb6133c3565b6040519080825280601f01601f1916602001820160405280156113e5576020820181803683370190505b5090505b8415611468576113fa60018361373c565b9150611407600a86613bbe565b611412906030613b6e565b60f81b81838151811061142757611427613bd2565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611461600a86613a2f565b94506113e9565b949350505050565b600054610100900460ff16611507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104a0565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b60007f000000000000000000000000000000000000000000000000000000000000000082602001516115859190613b6e565b421192915050565b600081600001518260200151836040015184606001516040516020016115cc949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a088015193516000976115cc979096959101613c01565b604080516020810185905260009181018290528190606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830181905292506116d79101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f01000000000000000000000000000000000000000000000000000000000000006020830152908587611bee565b95945050505050565b6000606060008060008661ffff1667ffffffffffffffff811115611706576117066133c3565b6040519080825280601f01601f191660200182016040528015611730576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115611751578692505b828152826000602083013e90999098509650505050505050565b60008082136117d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016104a0565b600060606117e384611c12565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136119e057506000919050565b680755bf798b4a1bf1e58212611a52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016104a0565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b600080611bfa86611ce8565b9050611c0881868686611d1a565b9695505050505050565b6000808211611c7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016104a0565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60608180519060200120604051602001611d0491815260200190565b6040516020818303038152906040529050919050565b6000806000611d2a878686611d57565b91509150818015611d4c57508051602080830191909120875191880191909120145b979650505050505050565b600060606000611d6685611e72565b90506000806000611d78848a89611f6d565b81519295509093509150158080611d8c5750815b611e18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2070726f76696465642070726f6f6620697320696e60448201527f76616c696400000000000000000000000000000000000000000000000000000060648201526084016104a0565b600081611e345760405180602001604052806000815250611e60565b611e6086611e4360018861373c565b81518110611e5357611e53613bd2565b60200260200101516124f6565b919b919a509098505050505050505050565b60606000611e7f83612520565b90506000815167ffffffffffffffff811115611e9d57611e9d6133c3565b604051908082528060200260200182016040528015611ee257816020015b6040805180820190915260608082526020820152815260200190600190039081611ebb5790505b50905060005b8251811015611f65576000611f15848381518110611f0857611f08613bd2565b6020026020010151612553565b90506040518060400160405280828152602001611f3183612520565b815250838381518110611f4657611f46613bd2565b6020026020010181905250508080611f5d90613b86565b915050611ee8565b509392505050565b60006060818080611f7d8761261a565b90506000869050600080611fa4604051806040016040528060608152602001606081525090565b60005b8c518110156124b2578c8181518110611fc257611fc2613bd2565b602002602001015191508284611fd89190613b6e565b9350611fe5600188613b6e565b96508360000361206657815180516020909101208514612061576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016104a0565b6121a2565b81515160201161210857815180516020909101208514612061576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c20686173680000000000000000000000000000000000000000000000000060648201526084016104a0565b8151859061211590613c58565b146121a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f652068617368000000000000000000000000000000000000000000000000000060648201526084016104a0565b6121ae60106001613b6e565b8260200151510361222057855184146124b25760008685815181106121d5576121d5613bd2565b602001015160f81c60f81b60f81c9050600083602001518260ff168151811061220057612200613bd2565b602002602001015190506122138161279d565b96506001945050506124a0565b600282602001515103612418576000612238836127d3565b905060008160008151811061224f5761224f613bd2565b016020015160f81c90506000612266600283613c9a565b612271906002613cbc565b90506000612282848360ff166127f7565b905060006122908b8a6127f7565b9050600061229e838361282d565b905060ff8516600214806122b5575060ff85166003145b1561230b578083511480156122ca5750808251145b156122dc576122d9818b613b6e565b99505b507f800000000000000000000000000000000000000000000000000000000000000099506124b2945050505050565b60ff8516158061231e575060ff85166001145b15612390578251811461235a57507f800000000000000000000000000000000000000000000000000000000000000099506124b2945050505050565b612381886020015160018151811061237457612374613bd2565b602002602001015161279d565b9a5097506124a0945050505050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e20707265666978000000000000000000000000000060648201526084016104a0565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f646500000000000000000000000000000000000000000000000060648201526084016104a0565b806124aa81613b86565b915050611fa7565b507f80000000000000000000000000000000000000000000000000000000000000008414866124e187866127f7565b909e909d50909b509950505050505050505050565b602081015180516060916112af916125109060019061373c565b81518110611f0857611f08613bd2565b6040805180820182526000808252602091820152815180830190925282518252808301908201526060906112af906128d9565b6060600080600061256385612b32565b91945092509050600081600181111561257e5761257e613cdf565b1461260b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f524c505265616465723a20696e76616c696420524c502062797465732076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016104a0565b6116d78560200151848461301d565b606060008251600261262c919061398e565b67ffffffffffffffff811115612644576126446133c3565b6040519080825280601f01601f19166020018201604052801561266e576020820181803683370190505b50905060005b835181101561279657600484828151811061269157612691613bd2565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c826126c683600261398e565b815181106126d6576126d6613bd2565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350601084828151811061271957612719613bd2565b016020015161272b919060f81c613c9a565b60f81b8261273a83600261398e565b612745906001613b6e565b8151811061275557612755613bd2565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508061278e81613b86565b915050612674565b5092915050565b600060606020836000015110156127be576127b7836130fb565b90506127ca565b6127c783612553565b90505b610bde81613c58565b60606112af6127f28360200151600081518110611f0857611f08613bd2565b61261a565b60608251821061281657506040805160208101909152600081526112af565b6112ac8383848651612828919061373c565b613106565b6000805b8084511180156128415750808351115b80156128c2575082818151811061285a5761285a613bd2565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684828151811061289957612899613bd2565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156112ac57806128d181613b86565b915050612831565b60606000806128e784612b32565b9193509091506001905081600181111561290357612903613cdf565b14612990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f524c505265616465723a20696e76616c696420524c50206c6973742076616c7560448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016104a0565b6040805160208082526104208201909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816129a95790505090506000835b8651811015612b275760208210612a6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2070726f766964656420524c50206c6973742065786360448201527f65656473206d6178206c697374206c656e67746800000000000000000000000060648201526084016104a0565b600080612aac6040518060400160405280858c60000151612a90919061373c565b8152602001858c60200151612aa59190613b6e565b9052612b32565b509150915060405180604001604052808383612ac89190613b6e565b8152602001848b60200151612add9190613b6e565b815250858581518110612af257612af2613bd2565b6020908102919091010152612b08600185613b6e565b9350612b148183613b6e565b612b1e9084613b6e565b925050506129d6565b508152949350505050565b600080600080846000015111612bca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f524c505265616465723a20524c50206974656d2063616e6e6f74206265206e7560448201527f6c6c00000000000000000000000000000000000000000000000000000000000060648201526084016104a0565b6020840151805160001a607f8111612bef576000600160009450945094505050613016565b60b78111612cab576000612c0460808361373c565b905080876000015111612c99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f524c505265616465723a20696e76616c696420524c502073686f72742073747260448201527f696e67000000000000000000000000000000000000000000000000000000000060648201526084016104a0565b60019550935060009250613016915050565b60bf8111612e1a576000612cc060b78361373c565b905080876000015111612d55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67207374726960448201527f6e67206c656e677468000000000000000000000000000000000000000000000060648201526084016104a0565b600183015160208290036101000a9004612d6f8183613b6e565b885111612dfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67207374726960448201527f6e6700000000000000000000000000000000000000000000000000000000000060648201526084016104a0565b612e09826001613b6e565b965094506000935061301692505050565b60f78111612ed5576000612e2f60c08361373c565b905080876000015111612ec4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f524c505265616465723a20696e76616c696420524c502073686f7274206c697360448201527f740000000000000000000000000000000000000000000000000000000000000060648201526084016104a0565b600195509350849250613016915050565b6000612ee260f78361373c565b905080876000015111612f77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67206c69737460448201527f206c656e6774680000000000000000000000000000000000000000000000000060648201526084016104a0565b600183015160208290036101000a9004612f918183613b6e565b885111612ffa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f524c505265616465723a20696e76616c696420524c50206c6f6e67206c69737460448201526064016104a0565b613005826001613b6e565b965094506001935061301692505050565b9193909250565b606060008267ffffffffffffffff81111561303a5761303a6133c3565b6040519080825280601f01601f191660200182016040528015613064576020820181803683370190505b5090508051600003613077579050610bde565b60006130838587613b6e565b90506020820160005b613097602087613a2f565b8110156130ce57825182526130ad602084613b6e565b92506130ba602083613b6e565b9150806130c681613b86565b91505061308c565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b60606112af826132de565b60608182601f011015613175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016104a0565b8282840110156131e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016104a0565b8183018451101561324e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016104a0565b60608215801561326d57604051915060008252602082016040526132d5565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156132a657805183526020928301920161328e565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60606112af82602001516000846000015161301d565b60005b8381101561330f5781810151838201526020016132f7565b8381111561331e576000848401525b50505050565b6000815180845261333c8160208601602086016132f4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006112ac6020830184613324565b60006020828403121561339357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146133be57600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715613415576134156133c3565b60405290565b600082601f83011261342c57600080fd5b813567ffffffffffffffff80821115613447576134476133c3565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561348d5761348d6133c3565b816040528381528660208588010111156134a657600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156134de57600080fd5b6134e78661339a565b945060208601359350604086013567ffffffffffffffff808216821461350c57600080fd5b909350606087013590811515821461352357600080fd5b9092506080870135908082111561353957600080fd5b506135468882890161341b565b9150509295509295909350565b60006080828403121561356557600080fd5b50919050565b60008083601f84011261357d57600080fd5b50813567ffffffffffffffff81111561359557600080fd5b6020830191508360208285010111156135ad57600080fd5b9250929050565b600080600080600060e086880312156135cc57600080fd5b853567ffffffffffffffff808211156135e457600080fd5b9087019060c0828a0312156135f857600080fd5b6136006133f2565b823581526136106020840161339a565b60208201526136216040840161339a565b6040820152606083013560608201526080830135608082015260a08301358281111561364c57600080fd5b6136588b82860161341b565b60a0830152509650602088013595506136748960408a01613553565b945060c088013591508082111561368a57600080fd5b506136978882890161356b565b969995985093965092949392505050565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516136fc8160498501602087016132f4565b919091016049019695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561374e5761374e61370d565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261379157613791613753565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156137e5576137e561370d565b500590565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156138245761382461370d565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156138585761385861370d565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561389f5761389f61370d565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156138da576138da61370d565b600087129250878205871284841616156138f6576138f661370d565b8785058712818416161561390c5761390c61370d565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038413811516156139545761395461370d565b827f80000000000000000000000000000000000000000000000000000000000000000384128116156139885761398861370d565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139c6576139c661370d565b500290565b600067ffffffffffffffff8083168185168083038211156139ee576139ee61370d565b01949350505050565b60006fffffffffffffffffffffffffffffffff80831681851681830481118215151615613a2657613a2661370d565b02949350505050565b600082613a3e57613a3e613753565b500490565b60008451613a558184602089016132f4565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551613a91816001850160208a016132f4565b60019201918201528351613aac8160028401602088016132f4565b0160020195945050505050565b600060408284031215613acb57600080fd5b6040516040810181811067ffffffffffffffff82111715613aee57613aee6133c3565b604052825181526020928301519281019290925250919050565b600060808284031215613b1a57600080fd5b6040516080810181811067ffffffffffffffff82111715613b3d57613b3d6133c3565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b60008219821115613b8157613b8161370d565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613bb757613bb761370d565b5060010190565b600082613bcd57613bcd613753565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152613c4c60c0830184613324565b98975050505050505050565b80516020808301519190811015613565577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b600060ff831680613cad57613cad613753565b8060ff84160691505092915050565b600060ff821660ff841680821015613cd657613cd661370d565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + "devdoc": { + "version": 1, + "kind": "dev", + "methods": { + "constructor": { + "params": { + "_finalizationPeriodSeconds": "Output finalization time in seconds.", + "_l2Oracle": "Address of the L2OutputOracle contract." + } + }, + "depositTransaction(address,uint256,uint64,bool,bytes)": { + "params": { + "_data": "Data to trigger the recipient with.", + "_gasLimit": "Minimum L2 gas limit (can be greater than or equal to this value).", + "_isCreation": "Whether or not the transaction is a contract creation.", + "_to": "Target address on L2.", + "_value": "ETH value to send to the recipient." + } + }, + "finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes)": { + "params": { + "_l2BlockNumber": "L2 block number of the outputRoot.", + "_outputRootProof": "Inclusion proof of the withdrawer contracts storage root.", + "_tx": "Withdrawal transaction to finalize.", + "_withdrawalProof": "Inclusion proof for the given withdrawal in the withdrawer contract." + } + }, + "isBlockFinalized(uint256)": { + "params": { + "_l2BlockNumber": "The number of the L2 block." + } + }, + "version()": { + "returns": { + "_0": "Semver contract version as a string." + } + } + }, + "events": { + "TransactionDeposited(address,address,uint256,bytes)": { + "params": { + "from": "Address that triggered the deposit transaction.", + "opaqueData": "ABI encoded deposit data to be parsed off-chain.", + "to": "Address that the deposit transaction is directed to.", + "version": "Version of this deposit transaction event." + } + }, + "WithdrawalFinalized(bytes32,bool)": { + "params": { + "success": "Whether the withdrawal transaction was successful.", + "withdrawalHash": "Hash of the withdrawal transaction." + } + } + } + }, + "userdoc": { + "version": 1, + "kind": "user", + "methods": { + "BASE_FEE_MAX_CHANGE_DENOMINATOR()": { + "notice": "Denominator that determines max change on fee per block." + }, + "ELASTICITY_MULTIPLIER()": { + "notice": "Along with the resource limit, determines the target resource limit." + }, + "FINALIZATION_PERIOD_SECONDS()": { + "notice": "Minimum time (in seconds) that must elapse before a withdrawal can be finalized." + }, + "INITIAL_BASE_FEE()": { + "notice": "Initial base fee value." + }, + "L2_ORACLE()": { + "notice": "Address of the L2OutputOracle." + }, + "MAX_RESOURCE_LIMIT()": { + "notice": "Maximum amount of the resource that can be used within this block." + }, + "MINIMUM_BASE_FEE()": { + "notice": "Minimum base fee value, cannot go lower than this." + }, + "TARGET_RESOURCE_LIMIT()": { + "notice": "Target amount of the resource that should be used within this block." + }, + "depositTransaction(address,uint256,uint64,bool,bytes)": { + "notice": "Accepts deposits of ETH and data, and emits a TransactionDeposited event for use in deriving deposit transactions. Note that if a deposit is made by a contract, its address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider using the CrossDomainMessenger contracts for a simpler developer experience." + }, + "finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes)": { + "notice": "Finalizes a withdrawal transaction." + }, + "finalizedWithdrawals(bytes32)": { + "notice": "A list of withdrawal hashes which have been successfully finalized." + }, + "initialize()": { + "notice": "Initializer;" + }, + "isBlockFinalized(uint256)": { + "notice": "Determine if a given block number is finalized. Reverts if the call to L2_ORACLE.getL2Output reverts. Returns a boolean otherwise." + }, + "l2Sender()": { + "notice": "Address of the L2 account which initiated a withdrawal in this transaction. If the of this variable is the default L2 sender address, then we are NOT inside of a call to finalizeWithdrawalTransaction." + }, + "params()": { + "notice": "EIP-1559 style gas parameters." + }, + "version()": { + "notice": "Returns the full semver contract version." + } + }, + "events": { + "TransactionDeposited(address,address,uint256,bytes)": { + "notice": "Emitted when a transaction is deposited from L1 to L2. The parameters of this event are read by the rollup node and used to derive deposit transactions on L2." + }, + "WithdrawalFinalized(bytes32,bool)": { + "notice": "Emitted when a withdrawal transaction is finalized." + } + }, + "notice": "The OptimismPortal is a low-level contract responsible for passing messages between L1 and L2. Messages sent directly to the OptimismPortal have no form of replayability. Users are encouraged to use the L1CrossDomainMessenger for a higher-level interface." + }, + "storageLayout": { + "storage": [ + { + "astId": 25872, + "contract": "contracts/L1/OptimismPortal.sol:OptimismPortal", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 25875, + "contract": "contracts/L1/OptimismPortal.sol:OptimismPortal", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 1389, + "contract": "contracts/L1/OptimismPortal.sol:OptimismPortal", + "label": "params", + "offset": 0, + "slot": "1", + "type": "t_struct(ResourceParams)1359_storage" + }, + { + "astId": 1394, + "contract": "contracts/L1/OptimismPortal.sol:OptimismPortal", + "label": "__gap", + "offset": 0, + "slot": "2", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 961, + "contract": "contracts/L1/OptimismPortal.sol:OptimismPortal", + "label": "l2Sender", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 974, + "contract": "contracts/L1/OptimismPortal.sol:OptimismPortal", + "label": "finalizedWithdrawals", + "offset": 0, + "slot": "52", + "type": "t_mapping(t_bytes32,t_bool)" + }, + { + "astId": 979, + "contract": "contracts/L1/OptimismPortal.sol:OptimismPortal", + "label": "__gap", + "offset": 0, + "slot": "53", + "type": "t_array(t_uint256)48_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)48_storage": { + "encoding": "inplace", + "label": "uint256[48]", + "numberOfBytes": "1536" + }, + "t_array(t_uint256)49_storage": { + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_bool)": { + "encoding": "mapping", + "label": "mapping(bytes32 => bool)", + "numberOfBytes": "32" + }, + "t_struct(ResourceParams)1359_storage": { + "encoding": "inplace", + "label": "struct ResourceMetering.ResourceParams", + "numberOfBytes": "32" + }, + "t_uint128": { + "encoding": "inplace", + "label": "uint128", + "numberOfBytes": "16" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/op-bindings/hardhat/testdata/deployments/sepolia/KromaPortalProxy.json b/op-bindings/hardhat/testdata/deployments/goerli/OptimismPortalProxy.json similarity index 89% rename from op-bindings/hardhat/testdata/deployments/sepolia/KromaPortalProxy.json rename to op-bindings/hardhat/testdata/deployments/goerli/OptimismPortalProxy.json index ad7b16fba..e2d373ed6 100644 --- a/op-bindings/hardhat/testdata/deployments/sepolia/KromaPortalProxy.json +++ b/op-bindings/hardhat/testdata/deployments/goerli/OptimismPortalProxy.json @@ -1,5 +1,5 @@ { - "address": "0x9C818e93C0884f75f48d93a9BDB2E994f8d77b86", + "address": "0xf39Acf72E84af85b191BF03f7B9BcAb102Bd9172", "abi": [ { "inputs": [ @@ -129,41 +129,41 @@ "type": "receive" } ], - "transactionHash": "0xf471319166c06a71c89d8b404d91d4736cd353876c7899b7d5624e089b311e7f", + "transactionHash": "0x3aa85561932d72b07ac16a88536b21fea5e8a93bf3b87c81f635b8622c634042", "receipt": { "to": null, - "from": "0x4935E310f69695c9A6e96d3992028CAbF082f686", - "contractAddress": "0x9C818e93C0884f75f48d93a9BDB2E994f8d77b86", - "transactionIndex": 32, - "gasUsed": "523960", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000040000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x654b2e79be3cc8f187e5f1a3d4d09cd82da51ed404800e6897e4b8488c7c2304", - "transactionHash": "0xf471319166c06a71c89d8b404d91d4736cd353876c7899b7d5624e089b311e7f", + "from": "0xCFf7a9856DB3C60AB546b8F43dC5D1A4336786A0", + "contractAddress": "0xf39Acf72E84af85b191BF03f7B9BcAb102Bd9172", + "transactionIndex": 0, + "gasUsed": "523812", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000020000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000004000000000", + "blockHash": "0x3b98b3141f805127ca40450d4feb5267fbeb61c7b81418bb97fb0488484554c4", + "transactionHash": "0x3aa85561932d72b07ac16a88536b21fea5e8a93bf3b87c81f635b8622c634042", "logs": [ { - "transactionIndex": 32, - "blockNumber": 3197630, - "transactionHash": "0xf471319166c06a71c89d8b404d91d4736cd353876c7899b7d5624e089b311e7f", - "address": "0x9C818e93C0884f75f48d93a9BDB2E994f8d77b86", + "transactionIndex": 0, + "blockNumber": 7355245, + "transactionHash": "0x3aa85561932d72b07ac16a88536b21fea5e8a93bf3b87c81f635b8622c634042", + "address": "0xf39Acf72E84af85b191BF03f7B9BcAb102Bd9172", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099cf5fdc7217485ee5668bb3353aee3f99acea9", - "logIndex": 12, - "blockHash": "0x654b2e79be3cc8f187e5f1a3d4d09cd82da51ed404800e6897e4b8488c7c2304" + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cff7a9856db3c60ab546b8f43dc5d1a4336786a0", + "logIndex": 0, + "blockHash": "0x3b98b3141f805127ca40450d4feb5267fbeb61c7b81418bb97fb0488484554c4" } ], - "blockNumber": 3197630, - "cumulativeGasUsed": "4654042", + "blockNumber": 7355245, + "cumulativeGasUsed": "523812", "status": 1, "byzantium": true }, "args": [ - "0x099CF5fdC7217485Ee5668bb3353aEe3f99ACEA9" + "0xCFf7a9856DB3C60AB546b8F43dC5D1A4336786A0" ], "numDeployments": 1, - "solcInputHash": "a67bc50cc418906a9d06161576e06aa8", - "metadata": "{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"events\":{\"AdminChanged(address,address)\":{\"params\":{\"newAdmin\":\"The new owner of the contract\",\"previousAdmin\":\"The previous owner of the contract\"}},\"Upgraded(address)\":{\"params\":{\"implementation\":\"The address of the implementation contract\"}}},\"kind\":\"dev\",\"methods\":{\"admin()\":{\"returns\":{\"_0\":\"Owner address.\"}},\"changeAdmin(address)\":{\"params\":{\"_admin\":\"New owner of the proxy contract.\"}},\"constructor\":{\"params\":{\"_admin\":\"Address of the initial contract admin. Admin as the ability to access the transparent proxy interface.\"}},\"implementation()\":{\"returns\":{\"_0\":\"Implementation address.\"}},\"upgradeTo(address)\":{\"params\":{\"_implementation\":\"Address of the implementation contract.\"}},\"upgradeToAndCall(address,bytes)\":{\"params\":{\"_data\":\"Calldata to delegatecall the new implementation with.\",\"_implementation\":\"Address of the implementation contract.\"}}},\"title\":\"Proxy\",\"version\":1},\"userdoc\":{\"events\":{\"AdminChanged(address,address)\":{\"notice\":\"An event that is emitted each time the owner is upgraded. This event is part of the EIP-1967 specification.\"},\"Upgraded(address)\":{\"notice\":\"An event that is emitted each time the implementation is changed. This event is part of the EIP-1967 specification.\"}},\"kind\":\"user\",\"methods\":{\"admin()\":{\"notice\":\"Gets the owner of the proxy contract.\"},\"changeAdmin(address)\":{\"notice\":\"Changes the owner of the proxy contract. Only callable by the owner.\"},\"constructor\":{\"notice\":\"Sets the initial admin during contract deployment. Admin address is stored at the EIP-1967 admin storage slot so that accidental storage collision with the implementation is not possible.\"},\"implementation()\":{\"notice\":\"Queries the implementation address.\"},\"upgradeTo(address)\":{\"notice\":\"Set the implementation contract address. The code at the given address will execute when this contract is called.\"},\"upgradeToAndCall(address,bytes)\":{\"notice\":\"Set the implementation and call a function in a single transaction. Useful to ensure atomic execution of initialization-based upgrades.\"}},\"notice\":\"Proxy is a transparent proxy that passes through the call if the caller is the owner or if the caller is address(0), meaning that the call originated from an off-chain simulation.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/universal/Proxy.sol\":\"Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[\":@openzeppelin/=node_modules/@openzeppelin/\",\":@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\":@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\":@rari-capital/=node_modules/@rari-capital/\",\":@rari-capital/solmate/=node_modules/@rari-capital/solmate/\",\":ds-test/=node_modules/ds-test/src/\",\":forge-std/=node_modules/forge-std/src/\"]},\"sources\":{\"contracts/universal/Proxy.sol\":{\"keccak256\":\"0xfa08635f1866139673ac4fe7b07330f752f93800075b895d8fcb8484f4a3f753\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8f2247604d527f560edbb851c43b6c16b37e34972ddb305e16dd73623b8288cd\",\"dweb:/ipfs/QmfM8sLAZrxrnqyRdt1XJ5LyJh4wKbeEqk3VkvxG7BDqFj\"]}},\"version\":1}", + "solcInputHash": "cd42cb04f3b6a78e5824c9f427d0a55d", + "metadata": "{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"events\":{\"AdminChanged(address,address)\":{\"params\":{\"newAdmin\":\"The new owner of the contract\",\"previousAdmin\":\"The previous owner of the contract\"}},\"Upgraded(address)\":{\"params\":{\"implementation\":\"The address of the implementation contract\"}}},\"kind\":\"dev\",\"methods\":{\"admin()\":{\"returns\":{\"_0\":\"Owner address.\"}},\"changeAdmin(address)\":{\"params\":{\"_admin\":\"New owner of the proxy contract.\"}},\"constructor\":{\"params\":{\"_admin\":\"Address of the initial contract admin. Admin as the ability to access the transparent proxy interface.\"}},\"implementation()\":{\"returns\":{\"_0\":\"Implementation address.\"}},\"upgradeTo(address)\":{\"params\":{\"_implementation\":\"Address of the implementation contract.\"}},\"upgradeToAndCall(address,bytes)\":{\"params\":{\"_data\":\"Calldata to delegatecall the new implementation with.\",\"_implementation\":\"Address of the implementation contract.\"}}},\"title\":\"Proxy\",\"version\":1},\"userdoc\":{\"events\":{\"AdminChanged(address,address)\":{\"notice\":\"An event that is emitted each time the owner is upgraded. This event is part of the EIP-1967 specification.\"},\"Upgraded(address)\":{\"notice\":\"An event that is emitted each time the implementation is changed. This event is part of the EIP-1967 specification.\"}},\"kind\":\"user\",\"methods\":{\"admin()\":{\"notice\":\"Gets the owner of the proxy contract.\"},\"changeAdmin(address)\":{\"notice\":\"Changes the owner of the proxy contract. Only callable by the owner.\"},\"constructor\":{\"notice\":\"Sets the initial admin during contract deployment. Admin address is stored at the EIP-1967 admin storage slot so that accidental storage collision with the implementation is not possible.\"},\"implementation()\":{\"notice\":\"Queries the implementation address.\"},\"upgradeTo(address)\":{\"notice\":\"Set the implementation contract address. The code at the given address will execute when this contract is called.\"},\"upgradeToAndCall(address,bytes)\":{\"notice\":\"Set the implementation and call a function in a single transaction. Useful to ensure atomic execution of initialization-based upgrades.\"}},\"notice\":\"Proxy is a transparent proxy that passes through the call if the caller is the owner or if the caller is address(0), meaning that the call originated from an off-chain simulation.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/universal/Proxy.sol\":\"Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@eth-optimism/contracts-periphery/=node_modules/@eth-optimism/contracts-periphery/contracts/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\":@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\":@rari-capital/=node_modules/@rari-capital/\",\":@rari-capital/solmate/=node_modules/@rari-capital/solmate/\",\":contracts/=contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":excessively-safe-call/=node_modules/excessively-safe-call/\",\":forge-std/=node_modules/forge-std/src/\"]},\"sources\":{\"contracts/universal/Proxy.sol\":{\"keccak256\":\"0xfa08635f1866139673ac4fe7b07330f752f93800075b895d8fcb8484f4a3f753\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8f2247604d527f560edbb851c43b6c16b37e34972ddb305e16dd73623b8288cd\",\"dweb:/ipfs/QmfM8sLAZrxrnqyRdt1XJ5LyJh4wKbeEqk3VkvxG7BDqFj\"]}},\"version\":1}", "bytecode": "0x608060405234801561001057600080fd5b5060405161091838038061091883398101604081905261002f916100b2565b6100388161003e565b506100e2565b60006100566000805160206108f88339815191525490565b6000805160206108f8833981519152839055604080516001600160a01b038084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b6000602082840312156100c457600080fd5b81516001600160a01b03811681146100db57600080fd5b9392505050565b610807806100f16000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106d9565b610224565b6100a86100a33660046106f4565b610296565b6040516100b59190610777565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106d9565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ea565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060b565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006106357fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038390556040805173ffffffffffffffffffffffffffffffffffffffff8084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d457600080fd5b919050565b6000602082840312156106eb57600080fd5b610412826106b0565b60008060006040848603121561070957600080fd5b610712846106b0565b9250602084013567ffffffffffffffff8082111561072f57600080fd5b818601915086601f83011261074357600080fd5b81358181111561075257600080fd5b87602082850101111561076457600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a457858101830151858201604001528201610788565b818111156107b6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106d9565b610224565b6100a86100a33660046106f4565b610296565b6040516100b59190610777565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106d9565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ea565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060b565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006106357fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038390556040805173ffffffffffffffffffffffffffffffffffffffff8084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d457600080fd5b919050565b6000602082840312156106eb57600080fd5b610412826106b0565b60008060006040848603121561070957600080fd5b610712846106b0565b9250602084013567ffffffffffffffff8082111561072f57600080fd5b818601915086601f83011261074357600080fd5b81358181111561075257600080fd5b87602082850101111561076457600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a457858101830151858201604001528201610788565b818111156107b6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a", "devdoc": { @@ -250,4 +250,4 @@ }, "notice": "Proxy is a transparent proxy that passes through the call if the caller is the owner or if the caller is address(0), meaning that the call originated from an off-chain simulation." } -} +} \ No newline at end of file diff --git a/op-bindings/hardhat/testdata/deployments/mainnet/KromaPortal.json b/op-bindings/hardhat/testdata/deployments/mainnet/KromaPortal.json deleted file mode 100644 index 87791160c..000000000 --- a/op-bindings/hardhat/testdata/deployments/mainnet/KromaPortal.json +++ /dev/null @@ -1,995 +0,0 @@ -{ - "address": "0x67374ED95f585Ac6A6022516A63ba35e8D4c46cB", - "abi": [ - { - "inputs": [ - { - "internalType": "contract L2OutputOracle", - "name": "_l2Oracle", - "type": "address" - }, - { - "internalType": "address", - "name": "_guardian", - "type": "address" - }, - { - "internalType": "bool", - "name": "_paused", - "type": "bool" - }, - { - "internalType": "contract ZKMerkleTrie", - "name": "_zkMerkleTrie", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "version", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "opaqueData", - "type": "bytes" - } - ], - "name": "TransactionDeposited", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "withdrawalHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "name": "WithdrawalFinalized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "withdrawalHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "WithdrawalProven", - "type": "event" - }, - { - "inputs": [], - "name": "BASE_FEE_MAX_CHANGE_DENOMINATOR", - "outputs": [ - { - "internalType": "int256", - "name": "", - "type": "int256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ELASTICITY_MULTIPLIER", - "outputs": [ - { - "internalType": "int256", - "name": "", - "type": "int256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "GUARDIAN", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "INITIAL_BASE_FEE", - "outputs": [ - { - "internalType": "uint128", - "name": "", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "L2_ORACLE", - "outputs": [ - { - "internalType": "contract L2OutputOracle", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAXIMUM_BASE_FEE", - "outputs": [ - { - "internalType": "int256", - "name": "", - "type": "int256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_RESOURCE_LIMIT", - "outputs": [ - { - "internalType": "int256", - "name": "", - "type": "int256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MINIMUM_BASE_FEE", - "outputs": [ - { - "internalType": "int256", - "name": "", - "type": "int256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "TARGET_RESOURCE_LIMIT", - "outputs": [ - { - "internalType": "int256", - "name": "", - "type": "int256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ZK_MERKLE_TRIE", - "outputs": [ - { - "internalType": "contract ZKMerkleTrie", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "uint64", - "name": "_gasLimit", - "type": "uint64" - }, - { - "internalType": "bool", - "name": "_isCreation", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "depositTransaction", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct Types.WithdrawalTransaction", - "name": "_tx", - "type": "tuple" - } - ], - "name": "finalizeWithdrawalTransaction", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "finalizedWithdrawals", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "_paused", - "type": "bool" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_l2OutputIndex", - "type": "uint256" - } - ], - "name": "isOutputFinalized", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2Sender", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "params", - "outputs": [ - { - "internalType": "uint128", - "name": "prevBaseFee", - "type": "uint128" - }, - { - "internalType": "uint64", - "name": "prevBoughtGas", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "prevBlockNum", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct Types.WithdrawalTransaction", - "name": "_tx", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_l2OutputIndex", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "version", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "messagePasserStorageRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "latestBlockhash", - "type": "bytes32" - } - ], - "internalType": "struct Types.OutputRootProof", - "name": "_outputRootProof", - "type": "tuple" - }, - { - "internalType": "bytes[]", - "name": "_withdrawalProof", - "type": "bytes[]" - } - ], - "name": "proveWithdrawalTransaction", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "provenWithdrawals", - "outputs": [ - { - "internalType": "bytes32", - "name": "outputRoot", - "type": "bytes32" - }, - { - "internalType": "uint128", - "name": "timestamp", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "l2OutputIndex", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x2e56e5e0c3f245964f7240be3ccdd4aff3946276b73f2fa4e15abcf93caec240", - "receipt": { - "to": null, - "from": "0x4935E310f69695c9A6e96d3992028CAbF082f686", - "contractAddress": "0x67374ED95f585Ac6A6022516A63ba35e8D4c46cB", - "transactionIndex": 8, - "gasUsed": "2933844", - "logsBloom": "0x00800000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x5dbf53b533949949613775bdd332f8e8484eb5d228710aa49ccdf1b8b20ad9fe", - "transactionHash": "0x2e56e5e0c3f245964f7240be3ccdd4aff3946276b73f2fa4e15abcf93caec240", - "logs": [ - { - "transactionIndex": 8, - "blockNumber": 3197653, - "transactionHash": "0x2e56e5e0c3f245964f7240be3ccdd4aff3946276b73f2fa4e15abcf93caec240", - "address": "0x67374ED95f585Ac6A6022516A63ba35e8D4c46cB", - "topics": [ - "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 407, - "blockHash": "0x5dbf53b533949949613775bdd332f8e8484eb5d228710aa49ccdf1b8b20ad9fe" - } - ], - "blockNumber": 3197653, - "cumulativeGasUsed": "26830094", - "status": 1, - "byzantium": true - }, - "args": [ - "0x29674FCFc8F24E96dE1c0caBf6366Be9E8A00FA1", - "0x007e70a098bae84a9e1a96465aeee5af4cdc30e8", - false, - "0xDEfe9D4CAe49524Bd2cc1a12e273eE7327248b1b" - ], - "numDeployments": 1, - "solcInputHash": "a67bc50cc418906a9d06161576e06aa8", - "metadata": "{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract L2OutputOracle\",\"name\":\"_l2Oracle\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_guardian\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"},{\"internalType\":\"contract ZKMerkleTrie\",\"name\":\"_zkMerkleTrie\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"opaqueData\",\"type\":\"bytes\"}],\"name\":\"TransactionDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"name\":\"WithdrawalFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"WithdrawalProven\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BASE_FEE_MAX_CHANGE_DENOMINATOR\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ELASTICITY_MULTIPLIER\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GUARDIAN\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INITIAL_BASE_FEE\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_ORACLE\",\"outputs\":[{\"internalType\":\"contract L2OutputOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_BASE_FEE\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_RESOURCE_LIMIT\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINIMUM_BASE_FEE\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TARGET_RESOURCE_LIMIT\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ZK_MERKLE_TRIE\",\"outputs\":[{\"internalType\":\"contract ZKMerkleTrie\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"_isCreation\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"depositTransaction\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Types.WithdrawalTransaction\",\"name\":\"_tx\",\"type\":\"tuple\"}],\"name\":\"finalizeWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"finalizedWithdrawals\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"}],\"name\":\"isOutputFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"params\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"prevBaseFee\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"prevBoughtGas\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"prevBlockNum\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Types.WithdrawalTransaction\",\"name\":\"_tx\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messagePasserStorageRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"latestBlockhash\",\"type\":\"bytes32\"}],\"internalType\":\"struct Types.OutputRootProof\",\"name\":\"_outputRootProof\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"_withdrawalProof\",\"type\":\"bytes[]\"}],\"name\":\"proveWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"provenWithdrawals\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint128\",\"name\":\"timestamp\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2OutputIndex\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"custom:proxied\":\"@title KromaPortal\",\"events\":{\"Paused(address)\":{\"params\":{\"account\":\"Address of the account triggering the pause.\"}},\"TransactionDeposited(address,address,uint256,bytes)\":{\"params\":{\"from\":\"Address that triggered the deposit transaction.\",\"opaqueData\":\"ABI encoded deposit data to be parsed off-chain.\",\"to\":\"Address that the deposit transaction is directed to.\",\"version\":\"Version of this deposit transaction event.\"}},\"Unpaused(address)\":{\"params\":{\"account\":\"Address of the account triggering the unpause.\"}},\"WithdrawalFinalized(bytes32,bool)\":{\"params\":{\"success\":\"Whether the withdrawal transaction was successful.\",\"withdrawalHash\":\"Hash of the withdrawal transaction.\"}},\"WithdrawalProven(bytes32,address,address)\":{\"params\":{\"withdrawalHash\":\"Hash of the withdrawal transaction.\"}}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"custom:semver\":\"0.1.0\",\"params\":{\"_guardian\":\"Address that can pause deposits and withdrawals.\",\"_l2Oracle\":\"Address of the L2OutputOracle contract.\",\"_paused\":\"Sets the contract's pausability state.\",\"_zkMerkleTrie\":\"Address of the ZKMerkleTrie contract.\"}},\"depositTransaction(address,uint256,uint64,bool,bytes)\":{\"params\":{\"_data\":\"Data to trigger the recipient with.\",\"_gasLimit\":\"Minimum L2 gas limit (can be greater than or equal to this value).\",\"_isCreation\":\"Whether or not the transaction is a contract creation.\",\"_to\":\"Target address on L2.\",\"_value\":\"ETH value to send to the recipient.\"}},\"finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))\":{\"params\":{\"_tx\":\"Withdrawal transaction to finalize.\"}},\"isOutputFinalized(uint256)\":{\"params\":{\"_l2OutputIndex\":\"Index of the L2 output to check.\"},\"returns\":{\"_0\":\"Whether or not the output is finalized.\"}},\"proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])\":{\"params\":{\"_l2OutputIndex\":\"L2 output index to prove against.\",\"_outputRootProof\":\"Inclusion proof of the L2ToL1MessagePasser contract's storage root.\",\"_tx\":\"Withdrawal transaction to finalize.\",\"_withdrawalProof\":\"Inclusion proof of the withdrawal in L2ToL1MessagePasser contract.\"}},\"version()\":{\"returns\":{\"_0\":\"Semver contract version as a string.\"}}},\"version\":1},\"userdoc\":{\"events\":{\"Paused(address)\":{\"notice\":\"Emitted when the pause is triggered.\"},\"TransactionDeposited(address,address,uint256,bytes)\":{\"notice\":\"Emitted when a transaction is deposited from L1 to L2. The parameters of this event are read by the rollup node and used to derive deposit transactions on L2.\"},\"Unpaused(address)\":{\"notice\":\"Emitted when the pause is lifted.\"},\"WithdrawalFinalized(bytes32,bool)\":{\"notice\":\"Emitted when a withdrawal transaction is finalized.\"},\"WithdrawalProven(bytes32,address,address)\":{\"notice\":\"Emitted when a withdrawal transaction is proven.\"}},\"kind\":\"user\",\"methods\":{\"BASE_FEE_MAX_CHANGE_DENOMINATOR()\":{\"notice\":\"Denominator that determines max change on fee per block.\"},\"ELASTICITY_MULTIPLIER()\":{\"notice\":\"Along with the resource limit, determines the target resource limit.\"},\"GUARDIAN()\":{\"notice\":\"Address that has the ability to pause and unpause withdrawals.\"},\"INITIAL_BASE_FEE()\":{\"notice\":\"Initial base fee value. This value must be smaller than the MAXIMUM_BASE_FEE.\"},\"L2_ORACLE()\":{\"notice\":\"Address of the L2OutputOracle.\"},\"MAXIMUM_BASE_FEE()\":{\"notice\":\"Maximum base fee value, cannot go higher than this. It is possible for the MAXIMUM_BASE_FEE to raise to a value that is so large it will consume the entire gas limit of an L1 block.\"},\"MAX_RESOURCE_LIMIT()\":{\"notice\":\"Maximum amount of the resource that can be used within this block. This value cannot be larger than the L2 block gas limit.\"},\"MINIMUM_BASE_FEE()\":{\"notice\":\"Minimum base fee value, cannot go lower than this.\"},\"TARGET_RESOURCE_LIMIT()\":{\"notice\":\"Target amount of the resource that should be used within this block.\"},\"ZK_MERKLE_TRIE()\":{\"notice\":\"Address of the ZKMerkleTrie.\"},\"depositTransaction(address,uint256,uint64,bool,bytes)\":{\"notice\":\"Accepts deposits of ETH and data, and emits a TransactionDeposited event for use in deriving deposit transactions. Note that if a deposit is made by a contract, its address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider using the CrossDomainMessenger contracts for a simpler developer experience.\"},\"finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))\":{\"notice\":\"Finalizes a withdrawal transaction.\"},\"finalizedWithdrawals(bytes32)\":{\"notice\":\"A list of withdrawal hashes which have been successfully finalized.\"},\"initialize(bool)\":{\"notice\":\"Initializer.\"},\"isOutputFinalized(uint256)\":{\"notice\":\"Determine if a given output is finalized. Reverts if the call to L2_ORACLE.getL2Output reverts. Returns a boolean otherwise.\"},\"l2Sender()\":{\"notice\":\"Address of the L2 account which initiated a withdrawal in this transaction. If the of this variable is the default L2 sender address, then we are NOT inside of a call to finalizeWithdrawalTransaction.\"},\"params()\":{\"notice\":\"EIP-1559 style gas parameters.\"},\"pause()\":{\"notice\":\"Pause deposits and withdrawals.\"},\"paused()\":{\"notice\":\"Determines if cross domain messaging is paused. When set to true, deposits and withdrawals are paused. This may be removed in the future.\"},\"proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])\":{\"notice\":\"Proves a withdrawal transaction.\"},\"provenWithdrawals(bytes32)\":{\"notice\":\"A mapping of withdrawal hashes to `ProvenWithdrawal` data.\"},\"unpause()\":{\"notice\":\"Unpause deposits and withdrawals.\"},\"version()\":{\"notice\":\"Returns the full semver contract version.\"}},\"notice\":\"The KromaPortal is a low-level contract responsible for passing messages between L1 and L2. Messages sent directly to the KromaPortal have no form of replayability. Users are encouraged to use the L1CrossDomainMessenger for a higher-level interface.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L1/KromaPortal.sol\":\"KromaPortal\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[\":@openzeppelin/=node_modules/@openzeppelin/\",\":@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\":@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\":@rari-capital/=node_modules/@rari-capital/\",\":@rari-capital/solmate/=node_modules/@rari-capital/solmate/\",\":ds-test/=node_modules/ds-test/src/\",\":forge-std/=node_modules/forge-std/src/\"]},\"sources\":{\"contracts/L1/KromaPortal.sol\":{\"keccak256\":\"0x2cf7c6c9dedaccd1386ce1216ab9364e04ad4aaf394ee4d98beb0e08466ad241\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4bb85e38cf7264a4b7369926c0b012de7943a6245518256b8bb430ae86197fd9\",\"dweb:/ipfs/QmdwTARqNDgpMfUsj7KM5igPpGkFEa4t8N55aPAheoXi7a\"]},\"contracts/L1/L2OutputOracle.sol\":{\"keccak256\":\"0xa1d82ec51f8844704161300fae575273244aa1ea7a3e7d2ead5abae234d3f189\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46d83103ecf1ca3e19c29bfe5f2073898ce5041a6928813b772ac15108f70b65\",\"dweb:/ipfs/QmQECJo66iByfSTz1aFnoi2MyaH8dM8qkQmATkALsNXaUH\"]},\"contracts/L1/ResourceMetering.sol\":{\"keccak256\":\"0xaa05964bb715e4f4a2ca4351fac8c17cd56c898a5b06d0529dfe2c130e904c3a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5c7ee5f5b4ab1f44c25d0ddb5ce1194326e9039f410d42451b6c2ff8f34a36b2\",\"dweb:/ipfs/QmT5bgHmJvhzyYPQjN8tZx2NF6pkDQAPaVm6YSFGEur8HX\"]},\"contracts/L1/ZKMerkleTrie.sol\":{\"keccak256\":\"0x76d1f50a111d76701e366e94144e746a4555ffbf22b2809d4f7aa2bb24ffd04f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://17a65bd3989fa5cc75a98f8990ff4cd44588f7adb1881ecdd449a7a498bc469b\",\"dweb:/ipfs/QmP93i19wpgip1TnuE6R2oF2JCDLMHY6tACBu6MbgeVffA\"]},\"contracts/L1/ZKTrieHasher.sol\":{\"keccak256\":\"0x52e3c93de6d4d8bf5bb5f73be5fedb32b79f23307eb30c3390040ca72e725c77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37867a8bc167ad83fdcd96080f5d6371074142d4a0ea9b9cea52c21d3005160d\",\"dweb:/ipfs/Qmdddps2tC7MjpU1t2JLLCdBScqtm8Vo5okdpGC4eMBuBp\"]},\"contracts/libraries/Arithmetic.sol\":{\"keccak256\":\"0xc8858039f87e48e6f18c1af8bc0b03e57cfef564acddfd06e4d91e3db7ac5ed6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2fc79af1e844aa6dc1c68067bfe1d359df8d4e9a3e8881afb3bcfcbf68071714\",\"dweb:/ipfs/QmcNC4k8zmvwj4kZizSenTiWbx2DJQPbwqXXLF4iMbkRVD\"]},\"contracts/libraries/Burn.sol\":{\"keccak256\":\"0x54233b226ba6919dc46d438bc790108d8f855001002a1b9c3c37aed7a83e5f3f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4051a4baca357a9191a6c9e3aa1593a17b69dd7915966e23e4cb269e9c1d9ed4\",\"dweb:/ipfs/QmadKjGKvxm53abVHQdsxrXBc8e9jXywu6vvhkAgjsx59J\"]},\"contracts/libraries/Bytes.sol\":{\"keccak256\":\"0x6c1cfe3d09a093f5946a87a9a60e469d4510e0749e218c4247b214fc09900b33\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://adf1fe4dd501f443a4a253b3940f0931732fc5074b57c8c9a5ca33a76e09de74\",\"dweb:/ipfs/QmQca2QpGggadP85yJyWC1teJxPxmKiKwdnA75Rrr7jygz\"]},\"contracts/libraries/Bytes32.sol\":{\"keccak256\":\"0x049480281697fdb3e7cd108523813a5d5d3b25fdfbad5a5007d9b9590e64d956\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://89eebd28a45c4987226a10f023ddf2413e58c7593fe6fcc71cebbf18cc915a2f\",\"dweb:/ipfs/QmX9FEyvhXsxnxc1wdPGjA4kNGQvM4MN99krqEF7o5JGqc\"]},\"contracts/libraries/Constants.sol\":{\"keccak256\":\"0x9c6d82ef1ac9000ecf82fc50d79c7c45ab47c4fc7134718f59e7758de353b78d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c1b4d724f0de9c75583a4773c8d2ed907e2825761f84e7a4be43d05333283d22\",\"dweb:/ipfs/QmV8mXdnxibKYZD6S2NuHs9rUr9ssycHCWLND7Vb5YesKS\"]},\"contracts/libraries/Encoding.sol\":{\"keccak256\":\"0x62b48e2410e5de762b523ab2e5b7d006d8de90a6cf54610f341c7540ef7e078a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d40020eb9d54a0cbb7f2c3d931dd46ca02dd39944992d593415396a4069ccfd4\",\"dweb:/ipfs/QmNLrubUT9eBFovTnvQ734F17czWcnrRD1ecbghDxFJYg2\"]},\"contracts/libraries/Hashing.sol\":{\"keccak256\":\"0xf55d324c131040d21ec4031164e9f52cafc555103316911a294d9d22e2341579\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6661f4acf60bcf3ac85d2a225a0d939c23bfd73bee905cbbf3cae81f81f9c37\",\"dweb:/ipfs/QmerGDC7VjZy8gWcuPDpXz4aGKymucQzPX181gpWaiANsk\"]},\"contracts/libraries/NodeReader.sol\":{\"keccak256\":\"0xb36a0ca36c4073666f7f52aca9378149e0fd9e3ef364d1620658cfae093a68c1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4c76340f02f9a2bb9b03c2a112f8664366384fed68ccf400b6c95b1e77bad94\",\"dweb:/ipfs/QmQ3Z6KD1qFjBx7BzUfVoXqhBymPm5wz7zwnKp9XKJpEdJ\"]},\"contracts/libraries/SafeCall.sol\":{\"keccak256\":\"0xe7d372c88a0e20a273308284b7b64c0e4d7e779db4d7124027061a64724328b0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://16d72abcd5d94fab5cf2089fb12fe20bdb74fcc46e2f8dfabbd350a5bd323609\",\"dweb:/ipfs/QmTnxeCfmGBFnBHyVQhnDb7YpVPMBQTrXKKrnvbC1WX45g\"]},\"contracts/libraries/Types.sol\":{\"keccak256\":\"0x9ea7ca3626c37b7c35794bf5f10fea4eb1fe5d6badb3c50e6cb82ca85cd2de71\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://366304792f6a228ff74ee2dd32640cdd12f4e7bc6c5697743e565053c90d23f1\",\"dweb:/ipfs/QmXXVLqwR6cH7z6reVpa8sz2KvGuKR6CmCVKsPXYPrmZaz\"]},\"contracts/libraries/rlp/RLPWriter.sol\":{\"keccak256\":\"0x5aa9d21c5b41c9786f23153f819d561ae809a1d55c7b0d423dfeafdfbacedc78\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://921c44e6a0982b9a4011900fda1bda2c06b7a85894967de98b407a83fe9f90c0\",\"dweb:/ipfs/QmSsHLKDUQ82kpKdqB6VntVGKuPDb4W9VdotsubuqWBzio\"]},\"contracts/universal/Semver.sol\":{\"keccak256\":\"0x979b13465de4996a1105850abbf48abe7f71d5e18a8d4af318597ee14c165fdf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d0881ed7d8371fe1c12b931334e107746fa97d9ecd6aa3c0fca0c0db8581474e\",\"dweb:/ipfs/QmQ9UFwZgWkyFAHrzTtS7m6rghZ8nP9QybEuJ5y9vux5Gv\"]},\"contracts/vendor/AddressAliasHelper.sol\":{\"keccak256\":\"0x6ecb83b4ec80fbe49c22f4f95d90482de64660ef5d422a19f4d4b04df31c1237\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1d0885be6e473962f9a0622176a22300165ac0cc1a1d7f2e22b11c3d656ace88\",\"dweb:/ipfs/QmPRa3KmRpXW5P9ykveKRDgYN5zYo4cYLAYSnoqHX3KnXR\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"node_modules/@openzeppelin/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f\",\"dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"node_modules/@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0xaf159a8b1923ad2a26d516089bceca9bdeaeacd04be50983ea00ba63070f08a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f2cf1c531122bc7ca96b8c8db6a60deae60441e5223065e792553d4849b5638\",\"dweb:/ipfs/QmPBdJmBBABMDCfyDjCbdxgiqRavgiSL88SYPGibgbPas9\"]},\"node_modules/@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929\",\"dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC\"]},\"node_modules/@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689\",\"dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy\"]},\"node_modules/@rari-capital/solmate/src/utils/FixedPointMathLib.sol\":{\"keccak256\":\"0x622fcd8a49e132df5ec7651cc6ae3aaf0cf59bdcd67a9a804a1b9e2485113b7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af77088eb606427d4c55e578984a615779c86bc30646a20f7bb27299ba390f7c\",\"dweb:/ipfs/QmZGQdhdQDtHc7gZXWrKXgA3govc74X8U63BiWhPQK3mK8\"]}},\"version\":1}", - "bytecode": "0x6101406040523480156200001257600080fd5b506040516200367138038062003671833981016040819052620000359162000296565b60006080819052600160a05260c0526001600160a01b0380851660e052838116610100528116610120526200006a8262000074565b5050505062000302565b600054610100900460ff1615808015620000955750600054600160ff909116105b80620000c55750620000b230620001cb60201b62001afa1760201c565b158015620000c5575060005460ff166001145b6200012e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000152576000805461ff0019166101001790555b603280546001600160a01b03191661dead1790556035805483151560ff1990911617905562000180620001da565b8015620001c7576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054610100900460ff16620002475760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000125565b60408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b0217600155565b6001600160a01b03811681146200029357600080fd5b50565b60008060008060808587031215620002ad57600080fd5b8451620002ba816200027d565b6020860151909450620002cd816200027d565b60408601519093508015158114620002e457600080fd5b6060860151909250620002f7816200027d565b939692955090935050565b60805160a05160c05160e05161010051610120516132e062000391600039600081816102af0152610d0301526000818161038c015281816107db015261105c0152600081816101c1015281816109f601528181610bbd01528181610fb80152818161130a015281816115480152611fc201526000610f2301526000610efa01526000610ed101526132e06000f3fe6080604052600436106101835760003560e01c8063724c184c116100d6578063ca3e99ba1161007f578063d53a822f11610059578063d53a822f14610523578063e965084c14610543578063e9e05c42146105cf57600080fd5b8063ca3e99ba14610458578063cd7c97891461046d578063cff0ab961461048257600080fd5b80638c3152e9116100b05780638c3152e9146103db5780639bf62d82146103fb578063a14238e71461042857600080fd5b8063724c184c1461037a5780638456cb59146103ae578063867ead13146103c357600080fd5b80635865b6071161013857806364b792081161011257806364b792081461032d5780636bb0291e146103455780636dbffb781461035a57600080fd5b80635865b6071461029d5780635c1f2827146102d15780635c975abb1461030357600080fd5b80633f4ba83a116101695780633f4ba83a146102465780634870496f1461025b57806354fd4d501461027b57600080fd5b80621c2ff6146101af57806313620abd1461020d57600080fd5b366101aa576101a83334620186a06000604051806020016040528060008152506105dd565b005b600080fd5b3480156101bb57600080fd5b506101e37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021957600080fd5b50610225633b9aca0081565b6040516fffffffffffffffffffffffffffffffff9091168152602001610204565b34801561025257600080fd5b506101a86107c3565b34801561026757600080fd5b506101a8610276366004612938565b6108cc565b34801561028757600080fd5b50610290610eca565b6040516102049190612a8e565b3480156102a957600080fd5b506101e37f000000000000000000000000000000000000000000000000000000000000000081565b3480156102dd57600080fd5b506102f56fffffffffffffffffffffffffffffffff81565b604051908152602001610204565b34801561030f57600080fd5b5060355461031d9060ff1681565b6040519015158152602001610204565b34801561033957600080fd5b506102f56301312d0081565b34801561035157600080fd5b506102f5600a81565b34801561036657600080fd5b5061031d610375366004612aa1565b610f6d565b34801561038657600080fd5b506101e37f000000000000000000000000000000000000000000000000000000000000000081565b3480156103ba57600080fd5b506101a8611044565b3480156103cf57600080fd5b506102f5633b9aca0081565b3480156103e757600080fd5b506101a86103f6366004612aba565b61114a565b34801561040757600080fd5b506032546101e39073ffffffffffffffffffffffffffffffffffffffff1681565b34801561043457600080fd5b5061031d610443366004612aa1565b60336020526000908152604090205460ff1681565b34801561046457600080fd5b506102f5611915565b34801561047957600080fd5b506102f5600881565b34801561048e57600080fd5b506001546104ea906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610204565b34801561052f57600080fd5b506101a861053e366004612b00565b611927565b34801561054f57600080fd5b506105a161055e366004612aa1565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610204565b6101a86105dd366004612b1d565b8260005a905083156106785773ffffffffffffffffffffffffffffffffffffffff8716156106785760405162461bcd60e51b815260206004820152603e60248201527f4b616e766173506f7274616c3a206d7573742073656e6420746f20616464726560448201527f7373283029207768656e206372656174696e67206120636f6e7472616374000060648201526084015b60405180910390fd5b6152088567ffffffffffffffff1610156106fa5760405162461bcd60e51b815260206004820152603660248201527f4b616e766173506f7274616c3a20676173206c696d6974206d75737420636f7660448201527f657220696e737472696e7369632067617320636f737400000000000000000000606482015260840161066f565b3332811461071b575033731111000000000000000000000000000000001111015b60003488888888604051602001610736959493929190612ba5565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516107a69190612a8e565b60405180910390a450506107ba8282611b16565b50505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461086e5760405162461bcd60e51b815260206004820152602760248201527f4b616e766173506f7274616c3a206f6e6c7920677561726469616e2063616e2060448201527f756e706175736500000000000000000000000000000000000000000000000000606482015260840161066f565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b60355460ff161561091f5760405162461bcd60e51b815260206004820152601460248201527f4b616e766173506f7274616c3a20706175736564000000000000000000000000604482015260640161066f565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff16036109c45760405162461bcd60e51b815260206004820152603d60248201527f4b616e766173506f7274616c3a20796f752063616e6e6f742073656e64206d6560448201527f73736167657320746f2074686520706f7274616c20636f6e7472616374000000606482015260840161066f565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610a52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a769190612c2a565b519050610a90610a8b36869003860186612c8f565b611df5565b8114610b045760405162461bcd60e51b815260206004820152602760248201527f4b616e766173506f7274616c3a20696e76616c6964206f757470757420726f6f60448201527f742070726f6f6600000000000000000000000000000000000000000000000000606482015260840161066f565b6000610b0f87611e51565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c415750805160408083015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610c19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3d9190612c2a565b5114155b610cb35760405162461bcd60e51b815260206004820152603560248201527f4b616e766173506f7274616c3a207769746864726177616c206861736820686160448201527f7320616c7265616479206265656e2070726f76656e0000000000000000000000606482015260840161066f565b60408051602080820185905260008284015282518083038401815260608301808552815191909201207f12e64a7200000000000000000000000000000000000000000000000000000000909152917f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16916312e64a7291610d559185918b918b918e013590606401612d3e565b602060405180830381865afa158015610d72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d969190612e3f565b610e085760405162461bcd60e51b815260206004820152603060248201527f4b616e766173506f7274616c3a20696e76616c6964207769746864726177616c60448201527f20696e636c7573696f6e2070726f6f6600000000000000000000000000000000606482015260840161066f565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6060610ef57f0000000000000000000000000000000000000000000000000000000000000000611e81565b610f1e7f0000000000000000000000000000000000000000000000000000000000000000611e81565b610f477f0000000000000000000000000000000000000000000000000000000000000000611e81565b604051602001610f5993929190612e5c565b604051602081830303815290604052905090565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810182905260009061103e9073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa158015610fff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110239190612c2a565b602001516fffffffffffffffffffffffffffffffff16611fbe565b92915050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146110ef5760405162461bcd60e51b815260206004820152602560248201527f4b616e766173506f7274616c3a206f6e6c7920677561726469616e2063616e2060448201527f7061757365000000000000000000000000000000000000000000000000000000606482015260840161066f565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016108c2565b60355460ff161561119d5760405162461bcd60e51b815260206004820152601460248201527f4b616e766173506f7274616c3a20706175736564000000000000000000000000604482015260640161066f565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead1461122c5760405162461bcd60e51b815260206004820152603d60248201527f4b616e766173506f7274616c3a2063616e206f6e6c792074726967676572206f60448201527f6e65207769746864726177616c20706572207472616e73616374696f6e000000606482015260840161066f565b600061123782611e51565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036113085760405162461bcd60e51b815260206004820152603060248201527f4b616e766173506f7274616c3a207769746864726177616c20686173206e6f7460448201527f206265656e2070726f76656e2079657400000000000000000000000000000000606482015260840161066f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611373573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113979190612ed2565b81602001516fffffffffffffffffffffffffffffffff1610156114485760405162461bcd60e51b815260206004820152604960248201527f4b616e766173506f7274616c3a207769746864726177616c2074696d6573746160448201527f6d70206c657373207468616e204c32204f7261636c65207374617274696e672060648201527f74696d657374616d700000000000000000000000000000000000000000000000608482015260a40161066f565b61146781602001516fffffffffffffffffffffffffffffffff16611fbe565b6114ff5760405162461bcd60e51b815260206004820152604360248201527f4b616e766173506f7274616c3a2070726f76656e207769746864726177616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a40161066f565b60408181015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156115a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c89190612c2a565b82518151919250146116685760405162461bcd60e51b815260206004820152604760248201527f4b616e766173506f7274616c3a206f757470757420726f6f742070726f76656e60448201527f206973206e6f74207468652073616d652061732063757272656e74206f75747060648201527f757420726f6f7400000000000000000000000000000000000000000000000000608482015260a40161066f565b61168781602001516fffffffffffffffffffffffffffffffff16611fbe565b61171f5760405162461bcd60e51b815260206004820152604360248201527f4b616e766173506f7274616c3a20636865636b706f696e74206f75747075742060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a40161066f565b60008381526033602052604090205460ff16156117a45760405162461bcd60e51b815260206004820152603360248201527f4b616e766173506f7274616c3a207769746864726177616c2068617320616c7260448201527f65616479206265656e2066696e616c697a656400000000000000000000000000606482015260840161066f565b600083815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908601516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558501516080860151606087015160a088015161184693929190612061565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b906118ab90841515815260200190565b60405180910390a2801580156118c15750326001145b1561190e5760405162461bcd60e51b815260206004820152601f60248201527f4b616e766173506f7274616c3a207769746864726177616c206661696c656400604482015260640161066f565b5050505050565b611924600a6301312d00612f49565b81565b600054610100900460ff16158080156119475750600054600160ff909116105b806119615750303b158015611961575060005460ff166001145b6119d35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161066f565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611a3157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055603580548315157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909116179055611a936120bb565b8015611af657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600154600090611b4c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643612fb1565b90508015611c84576000611b65600a6301312d00612f49565b600154611b909190700100000000000000000000000000000000900467ffffffffffffffff16612fc8565b905060006008611ba5600a6301312d00612f49565b611baf919061303c565b600154611bcf9084906fffffffffffffffffffffffffffffffff1661303c565b611bd99190612f49565b600154909150600090611c1e90611c039084906fffffffffffffffffffffffffffffffff166130f8565b633b9aca006fffffffffffffffffffffffffffffffff612184565b90506001841115611c4557611c42611c03826008611c3d600189612fb1565b612199565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054849190601090611cb7908490700100000000000000000000000000000000900467ffffffffffffffff1661316c565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506301312d00600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315611d7a5760405162461bcd60e51b815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d69740000606482015260840161066f565b600154600090611da6906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8616613198565b90506000611db848633b9aca006121ee565b611dc290836131d5565b905060005a611dd19086612fb1565b905080821115611ded57611ded611de88284612fb1565b612207565b505050505050565b60008160000151826020015183604001518460600151604051602001611e34949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611e349790969591016131e9565b606081600003611ec457505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611eee5780611ed881613240565b9150611ee79050600a836131d5565b9150611ec8565b60008167ffffffffffffffff811115611f0957611f09612790565b6040519080825280601f01601f191660200182016040528015611f33576020820181803683370190505b5090505b8415611fb657611f48600183612fb1565b9150611f55600a86613278565b611f6090603061328c565b60f81b818381518110611f7557611f756132a4565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611faf600a866131d5565b9450611f37565b949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f4daa2916040518163ffffffff1660e01b8152600401602060405180830381865afa15801561202b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204f9190612ed2565b612059908361328c565b421192915050565b600080603f60c88601604002045a10156120a4576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080845160208601878a5af19695505050505050565b600054610100900460ff166121385760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161066f565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6000611fb66121938585612235565b83612245565b6000670de0b6b3a76400006121da6121b18583612f49565b6121c390670de0b6b3a7640000612fc8565b6121d585670de0b6b3a764000061303c565b612254565b6121e4908661303c565b611fb69190612f49565b6000818310156121fe5781612200565b825b9392505050565b6000805a90505b825a61221a9083612fb1565b10156122305761222982613240565b915061220e565b505050565b6000818312156121fe5781612200565b60008183126121fe5781612200565b6000612200670de0b6b3a76400008361226c86612285565b612276919061303c565b6122809190612f49565b6124af565b60008082136122d65760405162461bcd60e51b815260206004820152600960248201527f554e444546494e45440000000000000000000000000000000000000000000000604482015260640161066f565b600060606122e3846126d4565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136124e057506000919050565b680755bf798b4a1bf1e582126125385760405162461bcd60e51b815260206004820152600c60248201527f4558505f4f564552464c4f570000000000000000000000000000000000000000604482015260640161066f565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60008082116127255760405162461bcd60e51b815260206004820152600960248201527f554e444546494e45440000000000000000000000000000000000000000000000604482015260640161066f565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146127e357600080fd5b919050565b600082601f8301126127f957600080fd5b813567ffffffffffffffff8082111561281457612814612790565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561285a5761285a612790565b8160405283815286602085880101111561287357600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060c082840312156128a557600080fd5b60405160c0810167ffffffffffffffff82821081831117156128c9576128c9612790565b81604052829350843583526128e0602086016127bf565b60208401526128f1604086016127bf565b6040840152606085013560608401526080850135608084015260a085013591508082111561291e57600080fd5b5061292b858286016127e8565b60a0830152505092915050565b600080600080600085870360e081121561295157600080fd5b863567ffffffffffffffff8082111561296957600080fd5b6129758a838b01612893565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156129ae57600080fd5b60408901955060c08901359250808311156129c857600080fd5b828901925089601f8401126129dc57600080fd5b82359150808211156129ed57600080fd5b508860208260051b8401011115612a0357600080fd5b959894975092955050506020019190565b60005b83811015612a2f578181015183820152602001612a17565b83811115612a3e576000848401525b50505050565b60008151808452612a5c816020860160208601612a14565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122006020830184612a44565b600060208284031215612ab357600080fd5b5035919050565b600060208284031215612acc57600080fd5b813567ffffffffffffffff811115612ae357600080fd5b611fb684828501612893565b8015158114612afd57600080fd5b50565b600060208284031215612b1257600080fd5b813561220081612aef565b600080600080600060a08688031215612b3557600080fd5b612b3e866127bf565b945060208601359350604086013567ffffffffffffffff8082168214612b6357600080fd5b909350606087013590612b7582612aef565b90925060808701359080821115612b8b57600080fd5b50612b98888289016127e8565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251612bf9816049850160208701612a14565b919091016049019695505050505050565b80516fffffffffffffffffffffffffffffffff811681146127e357600080fd5b600060608284031215612c3c57600080fd5b6040516060810181811067ffffffffffffffff82111715612c5f57612c5f612790565b60405282518152612c7260208401612c0a565b6020820152612c8360408401612c0a565b60408201529392505050565b600060808284031215612ca157600080fd5b6040516080810181811067ffffffffffffffff82111715612cc457612cc4612790565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8481526000602060808184015280608084015260018060a085015260c0840160c060408601528087825260e08601905060e08860051b87010191508860005b89811015612e27577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2088850301835281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18c3603018112612dde57600080fd5b8b01868101903567ffffffffffffffff811115612dfa57600080fd5b803603821315612e0957600080fd5b612e14868284612cf5565b9550505091850191908501908401612d7d565b50505080935050505082606083015295945050505050565b600060208284031215612e5157600080fd5b815161220081612aef565b60008451612e6e818460208901612a14565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612eaa816001850160208a01612a14565b60019201918201528351612ec5816002840160208801612a14565b0160020195945050505050565b600060208284031215612ee457600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082612f5857612f58612eeb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615612fac57612fac612f1a565b500590565b600082821015612fc357612fc3612f1a565b500390565b6000808312837f80000000000000000000000000000000000000000000000000000000000000000183128115161561300257613002612f1a565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01831381161561303657613036612f1a565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561307d5761307d612f1a565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156130b8576130b8612f1a565b600087129250878205871284841616156130d4576130d4612f1a565b878505871281841616156130ea576130ea612f1a565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0384138115161561313257613132612f1a565b827f800000000000000000000000000000000000000000000000000000000000000003841281161561316657613166612f1a565b50500190565b600067ffffffffffffffff80831681851680830382111561318f5761318f612f1a565b01949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156131d0576131d0612f1a565b500290565b6000826131e4576131e4612eeb565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261323460c0830184612a44565b98975050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361327157613271612f1a565b5060010190565b60008261328757613287612eeb565b500690565b6000821982111561329f5761329f612f1a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a", - "deployedBytecode": "0x6080604052600436106101835760003560e01c8063724c184c116100d6578063ca3e99ba1161007f578063d53a822f11610059578063d53a822f14610523578063e965084c14610543578063e9e05c42146105cf57600080fd5b8063ca3e99ba14610458578063cd7c97891461046d578063cff0ab961461048257600080fd5b80638c3152e9116100b05780638c3152e9146103db5780639bf62d82146103fb578063a14238e71461042857600080fd5b8063724c184c1461037a5780638456cb59146103ae578063867ead13146103c357600080fd5b80635865b6071161013857806364b792081161011257806364b792081461032d5780636bb0291e146103455780636dbffb781461035a57600080fd5b80635865b6071461029d5780635c1f2827146102d15780635c975abb1461030357600080fd5b80633f4ba83a116101695780633f4ba83a146102465780634870496f1461025b57806354fd4d501461027b57600080fd5b80621c2ff6146101af57806313620abd1461020d57600080fd5b366101aa576101a83334620186a06000604051806020016040528060008152506105dd565b005b600080fd5b3480156101bb57600080fd5b506101e37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021957600080fd5b50610225633b9aca0081565b6040516fffffffffffffffffffffffffffffffff9091168152602001610204565b34801561025257600080fd5b506101a86107c3565b34801561026757600080fd5b506101a8610276366004612938565b6108cc565b34801561028757600080fd5b50610290610eca565b6040516102049190612a8e565b3480156102a957600080fd5b506101e37f000000000000000000000000000000000000000000000000000000000000000081565b3480156102dd57600080fd5b506102f56fffffffffffffffffffffffffffffffff81565b604051908152602001610204565b34801561030f57600080fd5b5060355461031d9060ff1681565b6040519015158152602001610204565b34801561033957600080fd5b506102f56301312d0081565b34801561035157600080fd5b506102f5600a81565b34801561036657600080fd5b5061031d610375366004612aa1565b610f6d565b34801561038657600080fd5b506101e37f000000000000000000000000000000000000000000000000000000000000000081565b3480156103ba57600080fd5b506101a8611044565b3480156103cf57600080fd5b506102f5633b9aca0081565b3480156103e757600080fd5b506101a86103f6366004612aba565b61114a565b34801561040757600080fd5b506032546101e39073ffffffffffffffffffffffffffffffffffffffff1681565b34801561043457600080fd5b5061031d610443366004612aa1565b60336020526000908152604090205460ff1681565b34801561046457600080fd5b506102f5611915565b34801561047957600080fd5b506102f5600881565b34801561048e57600080fd5b506001546104ea906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610204565b34801561052f57600080fd5b506101a861053e366004612b00565b611927565b34801561054f57600080fd5b506105a161055e366004612aa1565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610204565b6101a86105dd366004612b1d565b8260005a905083156106785773ffffffffffffffffffffffffffffffffffffffff8716156106785760405162461bcd60e51b815260206004820152603e60248201527f4b616e766173506f7274616c3a206d7573742073656e6420746f20616464726560448201527f7373283029207768656e206372656174696e67206120636f6e7472616374000060648201526084015b60405180910390fd5b6152088567ffffffffffffffff1610156106fa5760405162461bcd60e51b815260206004820152603660248201527f4b616e766173506f7274616c3a20676173206c696d6974206d75737420636f7660448201527f657220696e737472696e7369632067617320636f737400000000000000000000606482015260840161066f565b3332811461071b575033731111000000000000000000000000000000001111015b60003488888888604051602001610736959493929190612ba5565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516107a69190612a8e565b60405180910390a450506107ba8282611b16565b50505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461086e5760405162461bcd60e51b815260206004820152602760248201527f4b616e766173506f7274616c3a206f6e6c7920677561726469616e2063616e2060448201527f756e706175736500000000000000000000000000000000000000000000000000606482015260840161066f565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b60355460ff161561091f5760405162461bcd60e51b815260206004820152601460248201527f4b616e766173506f7274616c3a20706175736564000000000000000000000000604482015260640161066f565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff16036109c45760405162461bcd60e51b815260206004820152603d60248201527f4b616e766173506f7274616c3a20796f752063616e6e6f742073656e64206d6560448201527f73736167657320746f2074686520706f7274616c20636f6e7472616374000000606482015260840161066f565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610a52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a769190612c2a565b519050610a90610a8b36869003860186612c8f565b611df5565b8114610b045760405162461bcd60e51b815260206004820152602760248201527f4b616e766173506f7274616c3a20696e76616c6964206f757470757420726f6f60448201527f742070726f6f6600000000000000000000000000000000000000000000000000606482015260840161066f565b6000610b0f87611e51565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c415750805160408083015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610c19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3d9190612c2a565b5114155b610cb35760405162461bcd60e51b815260206004820152603560248201527f4b616e766173506f7274616c3a207769746864726177616c206861736820686160448201527f7320616c7265616479206265656e2070726f76656e0000000000000000000000606482015260840161066f565b60408051602080820185905260008284015282518083038401815260608301808552815191909201207f12e64a7200000000000000000000000000000000000000000000000000000000909152917f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16916312e64a7291610d559185918b918b918e013590606401612d3e565b602060405180830381865afa158015610d72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d969190612e3f565b610e085760405162461bcd60e51b815260206004820152603060248201527f4b616e766173506f7274616c3a20696e76616c6964207769746864726177616c60448201527f20696e636c7573696f6e2070726f6f6600000000000000000000000000000000606482015260840161066f565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6060610ef57f0000000000000000000000000000000000000000000000000000000000000000611e81565b610f1e7f0000000000000000000000000000000000000000000000000000000000000000611e81565b610f477f0000000000000000000000000000000000000000000000000000000000000000611e81565b604051602001610f5993929190612e5c565b604051602081830303815290604052905090565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810182905260009061103e9073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa158015610fff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110239190612c2a565b602001516fffffffffffffffffffffffffffffffff16611fbe565b92915050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146110ef5760405162461bcd60e51b815260206004820152602560248201527f4b616e766173506f7274616c3a206f6e6c7920677561726469616e2063616e2060448201527f7061757365000000000000000000000000000000000000000000000000000000606482015260840161066f565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016108c2565b60355460ff161561119d5760405162461bcd60e51b815260206004820152601460248201527f4b616e766173506f7274616c3a20706175736564000000000000000000000000604482015260640161066f565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead1461122c5760405162461bcd60e51b815260206004820152603d60248201527f4b616e766173506f7274616c3a2063616e206f6e6c792074726967676572206f60448201527f6e65207769746864726177616c20706572207472616e73616374696f6e000000606482015260840161066f565b600061123782611e51565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036113085760405162461bcd60e51b815260206004820152603060248201527f4b616e766173506f7274616c3a207769746864726177616c20686173206e6f7460448201527f206265656e2070726f76656e2079657400000000000000000000000000000000606482015260840161066f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611373573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113979190612ed2565b81602001516fffffffffffffffffffffffffffffffff1610156114485760405162461bcd60e51b815260206004820152604960248201527f4b616e766173506f7274616c3a207769746864726177616c2074696d6573746160448201527f6d70206c657373207468616e204c32204f7261636c65207374617274696e672060648201527f74696d657374616d700000000000000000000000000000000000000000000000608482015260a40161066f565b61146781602001516fffffffffffffffffffffffffffffffff16611fbe565b6114ff5760405162461bcd60e51b815260206004820152604360248201527f4b616e766173506f7274616c3a2070726f76656e207769746864726177616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a40161066f565b60408181015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156115a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c89190612c2a565b82518151919250146116685760405162461bcd60e51b815260206004820152604760248201527f4b616e766173506f7274616c3a206f757470757420726f6f742070726f76656e60448201527f206973206e6f74207468652073616d652061732063757272656e74206f75747060648201527f757420726f6f7400000000000000000000000000000000000000000000000000608482015260a40161066f565b61168781602001516fffffffffffffffffffffffffffffffff16611fbe565b61171f5760405162461bcd60e51b815260206004820152604360248201527f4b616e766173506f7274616c3a20636865636b706f696e74206f75747075742060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a40161066f565b60008381526033602052604090205460ff16156117a45760405162461bcd60e51b815260206004820152603360248201527f4b616e766173506f7274616c3a207769746864726177616c2068617320616c7260448201527f65616479206265656e2066696e616c697a656400000000000000000000000000606482015260840161066f565b600083815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908601516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558501516080860151606087015160a088015161184693929190612061565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b906118ab90841515815260200190565b60405180910390a2801580156118c15750326001145b1561190e5760405162461bcd60e51b815260206004820152601f60248201527f4b616e766173506f7274616c3a207769746864726177616c206661696c656400604482015260640161066f565b5050505050565b611924600a6301312d00612f49565b81565b600054610100900460ff16158080156119475750600054600160ff909116105b806119615750303b158015611961575060005460ff166001145b6119d35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161066f565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611a3157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055603580548315157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909116179055611a936120bb565b8015611af657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600154600090611b4c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643612fb1565b90508015611c84576000611b65600a6301312d00612f49565b600154611b909190700100000000000000000000000000000000900467ffffffffffffffff16612fc8565b905060006008611ba5600a6301312d00612f49565b611baf919061303c565b600154611bcf9084906fffffffffffffffffffffffffffffffff1661303c565b611bd99190612f49565b600154909150600090611c1e90611c039084906fffffffffffffffffffffffffffffffff166130f8565b633b9aca006fffffffffffffffffffffffffffffffff612184565b90506001841115611c4557611c42611c03826008611c3d600189612fb1565b612199565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054849190601090611cb7908490700100000000000000000000000000000000900467ffffffffffffffff1661316c565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506301312d00600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315611d7a5760405162461bcd60e51b815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d69740000606482015260840161066f565b600154600090611da6906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8616613198565b90506000611db848633b9aca006121ee565b611dc290836131d5565b905060005a611dd19086612fb1565b905080821115611ded57611ded611de88284612fb1565b612207565b505050505050565b60008160000151826020015183604001518460600151604051602001611e34949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611e349790969591016131e9565b606081600003611ec457505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611eee5780611ed881613240565b9150611ee79050600a836131d5565b9150611ec8565b60008167ffffffffffffffff811115611f0957611f09612790565b6040519080825280601f01601f191660200182016040528015611f33576020820181803683370190505b5090505b8415611fb657611f48600183612fb1565b9150611f55600a86613278565b611f6090603061328c565b60f81b818381518110611f7557611f756132a4565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611faf600a866131d5565b9450611f37565b949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f4daa2916040518163ffffffff1660e01b8152600401602060405180830381865afa15801561202b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204f9190612ed2565b612059908361328c565b421192915050565b600080603f60c88601604002045a10156120a4576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080845160208601878a5af19695505050505050565b600054610100900460ff166121385760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161066f565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6000611fb66121938585612235565b83612245565b6000670de0b6b3a76400006121da6121b18583612f49565b6121c390670de0b6b3a7640000612fc8565b6121d585670de0b6b3a764000061303c565b612254565b6121e4908661303c565b611fb69190612f49565b6000818310156121fe5781612200565b825b9392505050565b6000805a90505b825a61221a9083612fb1565b10156122305761222982613240565b915061220e565b505050565b6000818312156121fe5781612200565b60008183126121fe5781612200565b6000612200670de0b6b3a76400008361226c86612285565b612276919061303c565b6122809190612f49565b6124af565b60008082136122d65760405162461bcd60e51b815260206004820152600960248201527f554e444546494e45440000000000000000000000000000000000000000000000604482015260640161066f565b600060606122e3846126d4565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136124e057506000919050565b680755bf798b4a1bf1e582126125385760405162461bcd60e51b815260206004820152600c60248201527f4558505f4f564552464c4f570000000000000000000000000000000000000000604482015260640161066f565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60008082116127255760405162461bcd60e51b815260206004820152600960248201527f554e444546494e45440000000000000000000000000000000000000000000000604482015260640161066f565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146127e357600080fd5b919050565b600082601f8301126127f957600080fd5b813567ffffffffffffffff8082111561281457612814612790565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561285a5761285a612790565b8160405283815286602085880101111561287357600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060c082840312156128a557600080fd5b60405160c0810167ffffffffffffffff82821081831117156128c9576128c9612790565b81604052829350843583526128e0602086016127bf565b60208401526128f1604086016127bf565b6040840152606085013560608401526080850135608084015260a085013591508082111561291e57600080fd5b5061292b858286016127e8565b60a0830152505092915050565b600080600080600085870360e081121561295157600080fd5b863567ffffffffffffffff8082111561296957600080fd5b6129758a838b01612893565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156129ae57600080fd5b60408901955060c08901359250808311156129c857600080fd5b828901925089601f8401126129dc57600080fd5b82359150808211156129ed57600080fd5b508860208260051b8401011115612a0357600080fd5b959894975092955050506020019190565b60005b83811015612a2f578181015183820152602001612a17565b83811115612a3e576000848401525b50505050565b60008151808452612a5c816020860160208601612a14565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122006020830184612a44565b600060208284031215612ab357600080fd5b5035919050565b600060208284031215612acc57600080fd5b813567ffffffffffffffff811115612ae357600080fd5b611fb684828501612893565b8015158114612afd57600080fd5b50565b600060208284031215612b1257600080fd5b813561220081612aef565b600080600080600060a08688031215612b3557600080fd5b612b3e866127bf565b945060208601359350604086013567ffffffffffffffff8082168214612b6357600080fd5b909350606087013590612b7582612aef565b90925060808701359080821115612b8b57600080fd5b50612b98888289016127e8565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251612bf9816049850160208701612a14565b919091016049019695505050505050565b80516fffffffffffffffffffffffffffffffff811681146127e357600080fd5b600060608284031215612c3c57600080fd5b6040516060810181811067ffffffffffffffff82111715612c5f57612c5f612790565b60405282518152612c7260208401612c0a565b6020820152612c8360408401612c0a565b60408201529392505050565b600060808284031215612ca157600080fd5b6040516080810181811067ffffffffffffffff82111715612cc457612cc4612790565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8481526000602060808184015280608084015260018060a085015260c0840160c060408601528087825260e08601905060e08860051b87010191508860005b89811015612e27577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2088850301835281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18c3603018112612dde57600080fd5b8b01868101903567ffffffffffffffff811115612dfa57600080fd5b803603821315612e0957600080fd5b612e14868284612cf5565b9550505091850191908501908401612d7d565b50505080935050505082606083015295945050505050565b600060208284031215612e5157600080fd5b815161220081612aef565b60008451612e6e818460208901612a14565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612eaa816001850160208a01612a14565b60019201918201528351612ec5816002840160208801612a14565b0160020195945050505050565b600060208284031215612ee457600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082612f5857612f58612eeb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615612fac57612fac612f1a565b500590565b600082821015612fc357612fc3612f1a565b500390565b6000808312837f80000000000000000000000000000000000000000000000000000000000000000183128115161561300257613002612f1a565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01831381161561303657613036612f1a565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561307d5761307d612f1a565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156130b8576130b8612f1a565b600087129250878205871284841616156130d4576130d4612f1a565b878505871281841616156130ea576130ea612f1a565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0384138115161561313257613132612f1a565b827f800000000000000000000000000000000000000000000000000000000000000003841281161561316657613166612f1a565b50500190565b600067ffffffffffffffff80831681851680830382111561318f5761318f612f1a565b01949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156131d0576131d0612f1a565b500290565b6000826131e4576131e4612eeb565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261323460c0830184612a44565b98975050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361327157613271612f1a565b5060010190565b60008261328757613287612eeb565b500690565b6000821982111561329f5761329f612f1a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a", - "devdoc": { - "version": 1, - "kind": "dev", - "methods": { - "constructor": { - "params": { - "_guardian": "Address that can pause deposits and withdrawals.", - "_l2Oracle": "Address of the L2OutputOracle contract.", - "_paused": "Sets the contract's pausability state.", - "_zkMerkleTrie": "Address of the ZKMerkleTrie contract." - } - }, - "depositTransaction(address,uint256,uint64,bool,bytes)": { - "params": { - "_data": "Data to trigger the recipient with.", - "_gasLimit": "Minimum L2 gas limit (can be greater than or equal to this value).", - "_isCreation": "Whether or not the transaction is a contract creation.", - "_to": "Target address on L2.", - "_value": "ETH value to send to the recipient." - } - }, - "finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))": { - "params": { - "_tx": "Withdrawal transaction to finalize." - } - }, - "isOutputFinalized(uint256)": { - "params": { - "_l2OutputIndex": "Index of the L2 output to check." - }, - "returns": { - "_0": "Whether or not the output is finalized." - } - }, - "proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])": { - "params": { - "_l2OutputIndex": "L2 output index to prove against.", - "_outputRootProof": "Inclusion proof of the L2ToL1MessagePasser contract's storage root.", - "_tx": "Withdrawal transaction to finalize.", - "_withdrawalProof": "Inclusion proof of the withdrawal in L2ToL1MessagePasser contract." - } - }, - "version()": { - "returns": { - "_0": "Semver contract version as a string." - } - } - }, - "events": { - "Paused(address)": { - "params": { - "account": "Address of the account triggering the pause." - } - }, - "TransactionDeposited(address,address,uint256,bytes)": { - "params": { - "from": "Address that triggered the deposit transaction.", - "opaqueData": "ABI encoded deposit data to be parsed off-chain.", - "to": "Address that the deposit transaction is directed to.", - "version": "Version of this deposit transaction event." - } - }, - "Unpaused(address)": { - "params": { - "account": "Address of the account triggering the unpause." - } - }, - "WithdrawalFinalized(bytes32,bool)": { - "params": { - "success": "Whether the withdrawal transaction was successful.", - "withdrawalHash": "Hash of the withdrawal transaction." - } - }, - "WithdrawalProven(bytes32,address,address)": { - "params": { - "withdrawalHash": "Hash of the withdrawal transaction." - } - } - } - }, - "userdoc": { - "version": 1, - "kind": "user", - "methods": { - "BASE_FEE_MAX_CHANGE_DENOMINATOR()": { - "notice": "Denominator that determines max change on fee per block." - }, - "ELASTICITY_MULTIPLIER()": { - "notice": "Along with the resource limit, determines the target resource limit." - }, - "GUARDIAN()": { - "notice": "Address that has the ability to pause and unpause withdrawals." - }, - "INITIAL_BASE_FEE()": { - "notice": "Initial base fee value. This value must be smaller than the MAXIMUM_BASE_FEE." - }, - "L2_ORACLE()": { - "notice": "Address of the L2OutputOracle." - }, - "MAXIMUM_BASE_FEE()": { - "notice": "Maximum base fee value, cannot go higher than this. It is possible for the MAXIMUM_BASE_FEE to raise to a value that is so large it will consume the entire gas limit of an L1 block." - }, - "MAX_RESOURCE_LIMIT()": { - "notice": "Maximum amount of the resource that can be used within this block. This value cannot be larger than the L2 block gas limit." - }, - "MINIMUM_BASE_FEE()": { - "notice": "Minimum base fee value, cannot go lower than this." - }, - "TARGET_RESOURCE_LIMIT()": { - "notice": "Target amount of the resource that should be used within this block." - }, - "ZK_MERKLE_TRIE()": { - "notice": "Address of the ZKMerkleTrie." - }, - "depositTransaction(address,uint256,uint64,bool,bytes)": { - "notice": "Accepts deposits of ETH and data, and emits a TransactionDeposited event for use in deriving deposit transactions. Note that if a deposit is made by a contract, its address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider using the CrossDomainMessenger contracts for a simpler developer experience." - }, - "finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))": { - "notice": "Finalizes a withdrawal transaction." - }, - "finalizedWithdrawals(bytes32)": { - "notice": "A list of withdrawal hashes which have been successfully finalized." - }, - "initialize(bool)": { - "notice": "Initializer." - }, - "isOutputFinalized(uint256)": { - "notice": "Determine if a given output is finalized. Reverts if the call to L2_ORACLE.getL2Output reverts. Returns a boolean otherwise." - }, - "l2Sender()": { - "notice": "Address of the L2 account which initiated a withdrawal in this transaction. If the of this variable is the default L2 sender address, then we are NOT inside of a call to finalizeWithdrawalTransaction." - }, - "params()": { - "notice": "EIP-1559 style gas parameters." - }, - "pause()": { - "notice": "Pause deposits and withdrawals." - }, - "paused()": { - "notice": "Determines if cross domain messaging is paused. When set to true, deposits and withdrawals are paused. This may be removed in the future." - }, - "proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])": { - "notice": "Proves a withdrawal transaction." - }, - "provenWithdrawals(bytes32)": { - "notice": "A mapping of withdrawal hashes to `ProvenWithdrawal` data." - }, - "unpause()": { - "notice": "Unpause deposits and withdrawals." - }, - "version()": { - "notice": "Returns the full semver contract version." - } - }, - "events": { - "Paused(address)": { - "notice": "Emitted when the pause is triggered." - }, - "TransactionDeposited(address,address,uint256,bytes)": { - "notice": "Emitted when a transaction is deposited from L1 to L2. The parameters of this event are read by the rollup node and used to derive deposit transactions on L2." - }, - "Unpaused(address)": { - "notice": "Emitted when the pause is lifted." - }, - "WithdrawalFinalized(bytes32,bool)": { - "notice": "Emitted when a withdrawal transaction is finalized." - }, - "WithdrawalProven(bytes32,address,address)": { - "notice": "Emitted when a withdrawal transaction is proven." - } - }, - "notice": "The KromaPortal is a low-level contract responsible for passing messages between L1 and L2. Messages sent directly to the KromaPortal have no form of replayability. Users are encouraged to use the L1CrossDomainMessenger for a higher-level interface." - }, - "storageLayout": { - "storage": [ - { - "astId": 46293, - "contract": "contracts/L1/KromaPortal.sol:KromaPortal", - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8" - }, - { - "astId": 46296, - "contract": "contracts/L1/KromaPortal.sol:KromaPortal", - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 2556, - "contract": "contracts/L1/KromaPortal.sol:KromaPortal", - "label": "params", - "offset": 0, - "slot": "1", - "type": "t_struct(ResourceParams)2512_storage" - }, - { - "astId": 2561, - "contract": "contracts/L1/KromaPortal.sol:KromaPortal", - "label": "__gap", - "offset": 0, - "slot": "2", - "type": "t_array(t_uint256)48_storage" - }, - { - "astId": 1080, - "contract": "contracts/L1/KromaPortal.sol:KromaPortal", - "label": "l2Sender", - "offset": 0, - "slot": "50", - "type": "t_address" - }, - { - "astId": 1085, - "contract": "contracts/L1/KromaPortal.sol:KromaPortal", - "label": "finalizedWithdrawals", - "offset": 0, - "slot": "51", - "type": "t_mapping(t_bytes32,t_bool)" - }, - { - "astId": 1091, - "contract": "contracts/L1/KromaPortal.sol:KromaPortal", - "label": "provenWithdrawals", - "offset": 0, - "slot": "52", - "type": "t_mapping(t_bytes32,t_struct(ProvenWithdrawal)1058_storage)" - }, - { - "astId": 1094, - "contract": "contracts/L1/KromaPortal.sol:KromaPortal", - "label": "paused", - "offset": 0, - "slot": "53", - "type": "t_bool" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint256)48_storage": { - "encoding": "inplace", - "label": "uint256[48]", - "numberOfBytes": "1536", - "base": "t_uint256" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bool)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_bytes32,t_struct(ProvenWithdrawal)1058_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct KromaPortal.ProvenWithdrawal)", - "numberOfBytes": "32", - "value": "t_struct(ProvenWithdrawal)1058_storage" - }, - "t_struct(ProvenWithdrawal)1058_storage": { - "encoding": "inplace", - "label": "struct KromaPortal.ProvenWithdrawal", - "numberOfBytes": "64", - "members": [ - { - "astId": 1053, - "contract": "contracts/L1/KromaPortal.sol:KromaPortal", - "label": "outputRoot", - "offset": 0, - "slot": "0", - "type": "t_bytes32" - }, - { - "astId": 1055, - "contract": "contracts/L1/KromaPortal.sol:KromaPortal", - "label": "timestamp", - "offset": 0, - "slot": "1", - "type": "t_uint128" - }, - { - "astId": 1057, - "contract": "contracts/L1/KromaPortal.sol:KromaPortal", - "label": "l2OutputIndex", - "offset": 16, - "slot": "1", - "type": "t_uint128" - } - ] - }, - "t_struct(ResourceParams)2512_storage": { - "encoding": "inplace", - "label": "struct ResourceMetering.ResourceParams", - "numberOfBytes": "32", - "members": [ - { - "astId": 2507, - "contract": "contracts/L1/KromaPortal.sol:KromaPortal", - "label": "prevBaseFee", - "offset": 0, - "slot": "0", - "type": "t_uint128" - }, - { - "astId": 2509, - "contract": "contracts/L1/KromaPortal.sol:KromaPortal", - "label": "prevBoughtGas", - "offset": 16, - "slot": "0", - "type": "t_uint64" - }, - { - "astId": 2511, - "contract": "contracts/L1/KromaPortal.sol:KromaPortal", - "label": "prevBlockNum", - "offset": 24, - "slot": "0", - "type": "t_uint64" - } - ] - }, - "t_uint128": { - "encoding": "inplace", - "label": "uint128", - "numberOfBytes": "16" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "encoding": "inplace", - "label": "uint64", - "numberOfBytes": "8" - }, - "t_uint8": { - "encoding": "inplace", - "label": "uint8", - "numberOfBytes": "1" - } - } - } -} diff --git a/op-bindings/hardhat/testdata/deployments/sepolia/KromaPortal.json b/op-bindings/hardhat/testdata/deployments/sepolia/KromaPortal.json deleted file mode 100644 index 87791160c..000000000 --- a/op-bindings/hardhat/testdata/deployments/sepolia/KromaPortal.json +++ /dev/null @@ -1,995 +0,0 @@ -{ - "address": "0x67374ED95f585Ac6A6022516A63ba35e8D4c46cB", - "abi": [ - { - "inputs": [ - { - "internalType": "contract L2OutputOracle", - "name": "_l2Oracle", - "type": "address" - }, - { - "internalType": "address", - "name": "_guardian", - "type": "address" - }, - { - "internalType": "bool", - "name": "_paused", - "type": "bool" - }, - { - "internalType": "contract ZKMerkleTrie", - "name": "_zkMerkleTrie", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "version", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "opaqueData", - "type": "bytes" - } - ], - "name": "TransactionDeposited", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "withdrawalHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "name": "WithdrawalFinalized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "withdrawalHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "WithdrawalProven", - "type": "event" - }, - { - "inputs": [], - "name": "BASE_FEE_MAX_CHANGE_DENOMINATOR", - "outputs": [ - { - "internalType": "int256", - "name": "", - "type": "int256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ELASTICITY_MULTIPLIER", - "outputs": [ - { - "internalType": "int256", - "name": "", - "type": "int256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "GUARDIAN", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "INITIAL_BASE_FEE", - "outputs": [ - { - "internalType": "uint128", - "name": "", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "L2_ORACLE", - "outputs": [ - { - "internalType": "contract L2OutputOracle", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAXIMUM_BASE_FEE", - "outputs": [ - { - "internalType": "int256", - "name": "", - "type": "int256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_RESOURCE_LIMIT", - "outputs": [ - { - "internalType": "int256", - "name": "", - "type": "int256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MINIMUM_BASE_FEE", - "outputs": [ - { - "internalType": "int256", - "name": "", - "type": "int256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "TARGET_RESOURCE_LIMIT", - "outputs": [ - { - "internalType": "int256", - "name": "", - "type": "int256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ZK_MERKLE_TRIE", - "outputs": [ - { - "internalType": "contract ZKMerkleTrie", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "uint64", - "name": "_gasLimit", - "type": "uint64" - }, - { - "internalType": "bool", - "name": "_isCreation", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "depositTransaction", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct Types.WithdrawalTransaction", - "name": "_tx", - "type": "tuple" - } - ], - "name": "finalizeWithdrawalTransaction", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "finalizedWithdrawals", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "_paused", - "type": "bool" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_l2OutputIndex", - "type": "uint256" - } - ], - "name": "isOutputFinalized", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "l2Sender", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "params", - "outputs": [ - { - "internalType": "uint128", - "name": "prevBaseFee", - "type": "uint128" - }, - { - "internalType": "uint64", - "name": "prevBoughtGas", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "prevBlockNum", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct Types.WithdrawalTransaction", - "name": "_tx", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_l2OutputIndex", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "version", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "messagePasserStorageRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "latestBlockhash", - "type": "bytes32" - } - ], - "internalType": "struct Types.OutputRootProof", - "name": "_outputRootProof", - "type": "tuple" - }, - { - "internalType": "bytes[]", - "name": "_withdrawalProof", - "type": "bytes[]" - } - ], - "name": "proveWithdrawalTransaction", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "provenWithdrawals", - "outputs": [ - { - "internalType": "bytes32", - "name": "outputRoot", - "type": "bytes32" - }, - { - "internalType": "uint128", - "name": "timestamp", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "l2OutputIndex", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "transactionHash": "0x2e56e5e0c3f245964f7240be3ccdd4aff3946276b73f2fa4e15abcf93caec240", - "receipt": { - "to": null, - "from": "0x4935E310f69695c9A6e96d3992028CAbF082f686", - "contractAddress": "0x67374ED95f585Ac6A6022516A63ba35e8D4c46cB", - "transactionIndex": 8, - "gasUsed": "2933844", - "logsBloom": "0x00800000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x5dbf53b533949949613775bdd332f8e8484eb5d228710aa49ccdf1b8b20ad9fe", - "transactionHash": "0x2e56e5e0c3f245964f7240be3ccdd4aff3946276b73f2fa4e15abcf93caec240", - "logs": [ - { - "transactionIndex": 8, - "blockNumber": 3197653, - "transactionHash": "0x2e56e5e0c3f245964f7240be3ccdd4aff3946276b73f2fa4e15abcf93caec240", - "address": "0x67374ED95f585Ac6A6022516A63ba35e8D4c46cB", - "topics": [ - "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 407, - "blockHash": "0x5dbf53b533949949613775bdd332f8e8484eb5d228710aa49ccdf1b8b20ad9fe" - } - ], - "blockNumber": 3197653, - "cumulativeGasUsed": "26830094", - "status": 1, - "byzantium": true - }, - "args": [ - "0x29674FCFc8F24E96dE1c0caBf6366Be9E8A00FA1", - "0x007e70a098bae84a9e1a96465aeee5af4cdc30e8", - false, - "0xDEfe9D4CAe49524Bd2cc1a12e273eE7327248b1b" - ], - "numDeployments": 1, - "solcInputHash": "a67bc50cc418906a9d06161576e06aa8", - "metadata": "{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract L2OutputOracle\",\"name\":\"_l2Oracle\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_guardian\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"},{\"internalType\":\"contract ZKMerkleTrie\",\"name\":\"_zkMerkleTrie\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"opaqueData\",\"type\":\"bytes\"}],\"name\":\"TransactionDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"name\":\"WithdrawalFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"WithdrawalProven\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BASE_FEE_MAX_CHANGE_DENOMINATOR\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ELASTICITY_MULTIPLIER\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GUARDIAN\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INITIAL_BASE_FEE\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_ORACLE\",\"outputs\":[{\"internalType\":\"contract L2OutputOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_BASE_FEE\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_RESOURCE_LIMIT\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINIMUM_BASE_FEE\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TARGET_RESOURCE_LIMIT\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ZK_MERKLE_TRIE\",\"outputs\":[{\"internalType\":\"contract ZKMerkleTrie\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"_isCreation\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"depositTransaction\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Types.WithdrawalTransaction\",\"name\":\"_tx\",\"type\":\"tuple\"}],\"name\":\"finalizeWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"finalizedWithdrawals\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"}],\"name\":\"isOutputFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"params\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"prevBaseFee\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"prevBoughtGas\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"prevBlockNum\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Types.WithdrawalTransaction\",\"name\":\"_tx\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messagePasserStorageRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"latestBlockhash\",\"type\":\"bytes32\"}],\"internalType\":\"struct Types.OutputRootProof\",\"name\":\"_outputRootProof\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"_withdrawalProof\",\"type\":\"bytes[]\"}],\"name\":\"proveWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"provenWithdrawals\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint128\",\"name\":\"timestamp\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2OutputIndex\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"custom:proxied\":\"@title KromaPortal\",\"events\":{\"Paused(address)\":{\"params\":{\"account\":\"Address of the account triggering the pause.\"}},\"TransactionDeposited(address,address,uint256,bytes)\":{\"params\":{\"from\":\"Address that triggered the deposit transaction.\",\"opaqueData\":\"ABI encoded deposit data to be parsed off-chain.\",\"to\":\"Address that the deposit transaction is directed to.\",\"version\":\"Version of this deposit transaction event.\"}},\"Unpaused(address)\":{\"params\":{\"account\":\"Address of the account triggering the unpause.\"}},\"WithdrawalFinalized(bytes32,bool)\":{\"params\":{\"success\":\"Whether the withdrawal transaction was successful.\",\"withdrawalHash\":\"Hash of the withdrawal transaction.\"}},\"WithdrawalProven(bytes32,address,address)\":{\"params\":{\"withdrawalHash\":\"Hash of the withdrawal transaction.\"}}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"custom:semver\":\"0.1.0\",\"params\":{\"_guardian\":\"Address that can pause deposits and withdrawals.\",\"_l2Oracle\":\"Address of the L2OutputOracle contract.\",\"_paused\":\"Sets the contract's pausability state.\",\"_zkMerkleTrie\":\"Address of the ZKMerkleTrie contract.\"}},\"depositTransaction(address,uint256,uint64,bool,bytes)\":{\"params\":{\"_data\":\"Data to trigger the recipient with.\",\"_gasLimit\":\"Minimum L2 gas limit (can be greater than or equal to this value).\",\"_isCreation\":\"Whether or not the transaction is a contract creation.\",\"_to\":\"Target address on L2.\",\"_value\":\"ETH value to send to the recipient.\"}},\"finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))\":{\"params\":{\"_tx\":\"Withdrawal transaction to finalize.\"}},\"isOutputFinalized(uint256)\":{\"params\":{\"_l2OutputIndex\":\"Index of the L2 output to check.\"},\"returns\":{\"_0\":\"Whether or not the output is finalized.\"}},\"proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])\":{\"params\":{\"_l2OutputIndex\":\"L2 output index to prove against.\",\"_outputRootProof\":\"Inclusion proof of the L2ToL1MessagePasser contract's storage root.\",\"_tx\":\"Withdrawal transaction to finalize.\",\"_withdrawalProof\":\"Inclusion proof of the withdrawal in L2ToL1MessagePasser contract.\"}},\"version()\":{\"returns\":{\"_0\":\"Semver contract version as a string.\"}}},\"version\":1},\"userdoc\":{\"events\":{\"Paused(address)\":{\"notice\":\"Emitted when the pause is triggered.\"},\"TransactionDeposited(address,address,uint256,bytes)\":{\"notice\":\"Emitted when a transaction is deposited from L1 to L2. The parameters of this event are read by the rollup node and used to derive deposit transactions on L2.\"},\"Unpaused(address)\":{\"notice\":\"Emitted when the pause is lifted.\"},\"WithdrawalFinalized(bytes32,bool)\":{\"notice\":\"Emitted when a withdrawal transaction is finalized.\"},\"WithdrawalProven(bytes32,address,address)\":{\"notice\":\"Emitted when a withdrawal transaction is proven.\"}},\"kind\":\"user\",\"methods\":{\"BASE_FEE_MAX_CHANGE_DENOMINATOR()\":{\"notice\":\"Denominator that determines max change on fee per block.\"},\"ELASTICITY_MULTIPLIER()\":{\"notice\":\"Along with the resource limit, determines the target resource limit.\"},\"GUARDIAN()\":{\"notice\":\"Address that has the ability to pause and unpause withdrawals.\"},\"INITIAL_BASE_FEE()\":{\"notice\":\"Initial base fee value. This value must be smaller than the MAXIMUM_BASE_FEE.\"},\"L2_ORACLE()\":{\"notice\":\"Address of the L2OutputOracle.\"},\"MAXIMUM_BASE_FEE()\":{\"notice\":\"Maximum base fee value, cannot go higher than this. It is possible for the MAXIMUM_BASE_FEE to raise to a value that is so large it will consume the entire gas limit of an L1 block.\"},\"MAX_RESOURCE_LIMIT()\":{\"notice\":\"Maximum amount of the resource that can be used within this block. This value cannot be larger than the L2 block gas limit.\"},\"MINIMUM_BASE_FEE()\":{\"notice\":\"Minimum base fee value, cannot go lower than this.\"},\"TARGET_RESOURCE_LIMIT()\":{\"notice\":\"Target amount of the resource that should be used within this block.\"},\"ZK_MERKLE_TRIE()\":{\"notice\":\"Address of the ZKMerkleTrie.\"},\"depositTransaction(address,uint256,uint64,bool,bytes)\":{\"notice\":\"Accepts deposits of ETH and data, and emits a TransactionDeposited event for use in deriving deposit transactions. Note that if a deposit is made by a contract, its address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider using the CrossDomainMessenger contracts for a simpler developer experience.\"},\"finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))\":{\"notice\":\"Finalizes a withdrawal transaction.\"},\"finalizedWithdrawals(bytes32)\":{\"notice\":\"A list of withdrawal hashes which have been successfully finalized.\"},\"initialize(bool)\":{\"notice\":\"Initializer.\"},\"isOutputFinalized(uint256)\":{\"notice\":\"Determine if a given output is finalized. Reverts if the call to L2_ORACLE.getL2Output reverts. Returns a boolean otherwise.\"},\"l2Sender()\":{\"notice\":\"Address of the L2 account which initiated a withdrawal in this transaction. If the of this variable is the default L2 sender address, then we are NOT inside of a call to finalizeWithdrawalTransaction.\"},\"params()\":{\"notice\":\"EIP-1559 style gas parameters.\"},\"pause()\":{\"notice\":\"Pause deposits and withdrawals.\"},\"paused()\":{\"notice\":\"Determines if cross domain messaging is paused. When set to true, deposits and withdrawals are paused. This may be removed in the future.\"},\"proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])\":{\"notice\":\"Proves a withdrawal transaction.\"},\"provenWithdrawals(bytes32)\":{\"notice\":\"A mapping of withdrawal hashes to `ProvenWithdrawal` data.\"},\"unpause()\":{\"notice\":\"Unpause deposits and withdrawals.\"},\"version()\":{\"notice\":\"Returns the full semver contract version.\"}},\"notice\":\"The KromaPortal is a low-level contract responsible for passing messages between L1 and L2. Messages sent directly to the KromaPortal have no form of replayability. Users are encouraged to use the L1CrossDomainMessenger for a higher-level interface.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L1/KromaPortal.sol\":\"KromaPortal\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[\":@openzeppelin/=node_modules/@openzeppelin/\",\":@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\":@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\":@rari-capital/=node_modules/@rari-capital/\",\":@rari-capital/solmate/=node_modules/@rari-capital/solmate/\",\":ds-test/=node_modules/ds-test/src/\",\":forge-std/=node_modules/forge-std/src/\"]},\"sources\":{\"contracts/L1/KromaPortal.sol\":{\"keccak256\":\"0x2cf7c6c9dedaccd1386ce1216ab9364e04ad4aaf394ee4d98beb0e08466ad241\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4bb85e38cf7264a4b7369926c0b012de7943a6245518256b8bb430ae86197fd9\",\"dweb:/ipfs/QmdwTARqNDgpMfUsj7KM5igPpGkFEa4t8N55aPAheoXi7a\"]},\"contracts/L1/L2OutputOracle.sol\":{\"keccak256\":\"0xa1d82ec51f8844704161300fae575273244aa1ea7a3e7d2ead5abae234d3f189\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46d83103ecf1ca3e19c29bfe5f2073898ce5041a6928813b772ac15108f70b65\",\"dweb:/ipfs/QmQECJo66iByfSTz1aFnoi2MyaH8dM8qkQmATkALsNXaUH\"]},\"contracts/L1/ResourceMetering.sol\":{\"keccak256\":\"0xaa05964bb715e4f4a2ca4351fac8c17cd56c898a5b06d0529dfe2c130e904c3a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5c7ee5f5b4ab1f44c25d0ddb5ce1194326e9039f410d42451b6c2ff8f34a36b2\",\"dweb:/ipfs/QmT5bgHmJvhzyYPQjN8tZx2NF6pkDQAPaVm6YSFGEur8HX\"]},\"contracts/L1/ZKMerkleTrie.sol\":{\"keccak256\":\"0x76d1f50a111d76701e366e94144e746a4555ffbf22b2809d4f7aa2bb24ffd04f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://17a65bd3989fa5cc75a98f8990ff4cd44588f7adb1881ecdd449a7a498bc469b\",\"dweb:/ipfs/QmP93i19wpgip1TnuE6R2oF2JCDLMHY6tACBu6MbgeVffA\"]},\"contracts/L1/ZKTrieHasher.sol\":{\"keccak256\":\"0x52e3c93de6d4d8bf5bb5f73be5fedb32b79f23307eb30c3390040ca72e725c77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37867a8bc167ad83fdcd96080f5d6371074142d4a0ea9b9cea52c21d3005160d\",\"dweb:/ipfs/Qmdddps2tC7MjpU1t2JLLCdBScqtm8Vo5okdpGC4eMBuBp\"]},\"contracts/libraries/Arithmetic.sol\":{\"keccak256\":\"0xc8858039f87e48e6f18c1af8bc0b03e57cfef564acddfd06e4d91e3db7ac5ed6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2fc79af1e844aa6dc1c68067bfe1d359df8d4e9a3e8881afb3bcfcbf68071714\",\"dweb:/ipfs/QmcNC4k8zmvwj4kZizSenTiWbx2DJQPbwqXXLF4iMbkRVD\"]},\"contracts/libraries/Burn.sol\":{\"keccak256\":\"0x54233b226ba6919dc46d438bc790108d8f855001002a1b9c3c37aed7a83e5f3f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4051a4baca357a9191a6c9e3aa1593a17b69dd7915966e23e4cb269e9c1d9ed4\",\"dweb:/ipfs/QmadKjGKvxm53abVHQdsxrXBc8e9jXywu6vvhkAgjsx59J\"]},\"contracts/libraries/Bytes.sol\":{\"keccak256\":\"0x6c1cfe3d09a093f5946a87a9a60e469d4510e0749e218c4247b214fc09900b33\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://adf1fe4dd501f443a4a253b3940f0931732fc5074b57c8c9a5ca33a76e09de74\",\"dweb:/ipfs/QmQca2QpGggadP85yJyWC1teJxPxmKiKwdnA75Rrr7jygz\"]},\"contracts/libraries/Bytes32.sol\":{\"keccak256\":\"0x049480281697fdb3e7cd108523813a5d5d3b25fdfbad5a5007d9b9590e64d956\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://89eebd28a45c4987226a10f023ddf2413e58c7593fe6fcc71cebbf18cc915a2f\",\"dweb:/ipfs/QmX9FEyvhXsxnxc1wdPGjA4kNGQvM4MN99krqEF7o5JGqc\"]},\"contracts/libraries/Constants.sol\":{\"keccak256\":\"0x9c6d82ef1ac9000ecf82fc50d79c7c45ab47c4fc7134718f59e7758de353b78d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c1b4d724f0de9c75583a4773c8d2ed907e2825761f84e7a4be43d05333283d22\",\"dweb:/ipfs/QmV8mXdnxibKYZD6S2NuHs9rUr9ssycHCWLND7Vb5YesKS\"]},\"contracts/libraries/Encoding.sol\":{\"keccak256\":\"0x62b48e2410e5de762b523ab2e5b7d006d8de90a6cf54610f341c7540ef7e078a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d40020eb9d54a0cbb7f2c3d931dd46ca02dd39944992d593415396a4069ccfd4\",\"dweb:/ipfs/QmNLrubUT9eBFovTnvQ734F17czWcnrRD1ecbghDxFJYg2\"]},\"contracts/libraries/Hashing.sol\":{\"keccak256\":\"0xf55d324c131040d21ec4031164e9f52cafc555103316911a294d9d22e2341579\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6661f4acf60bcf3ac85d2a225a0d939c23bfd73bee905cbbf3cae81f81f9c37\",\"dweb:/ipfs/QmerGDC7VjZy8gWcuPDpXz4aGKymucQzPX181gpWaiANsk\"]},\"contracts/libraries/NodeReader.sol\":{\"keccak256\":\"0xb36a0ca36c4073666f7f52aca9378149e0fd9e3ef364d1620658cfae093a68c1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4c76340f02f9a2bb9b03c2a112f8664366384fed68ccf400b6c95b1e77bad94\",\"dweb:/ipfs/QmQ3Z6KD1qFjBx7BzUfVoXqhBymPm5wz7zwnKp9XKJpEdJ\"]},\"contracts/libraries/SafeCall.sol\":{\"keccak256\":\"0xe7d372c88a0e20a273308284b7b64c0e4d7e779db4d7124027061a64724328b0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://16d72abcd5d94fab5cf2089fb12fe20bdb74fcc46e2f8dfabbd350a5bd323609\",\"dweb:/ipfs/QmTnxeCfmGBFnBHyVQhnDb7YpVPMBQTrXKKrnvbC1WX45g\"]},\"contracts/libraries/Types.sol\":{\"keccak256\":\"0x9ea7ca3626c37b7c35794bf5f10fea4eb1fe5d6badb3c50e6cb82ca85cd2de71\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://366304792f6a228ff74ee2dd32640cdd12f4e7bc6c5697743e565053c90d23f1\",\"dweb:/ipfs/QmXXVLqwR6cH7z6reVpa8sz2KvGuKR6CmCVKsPXYPrmZaz\"]},\"contracts/libraries/rlp/RLPWriter.sol\":{\"keccak256\":\"0x5aa9d21c5b41c9786f23153f819d561ae809a1d55c7b0d423dfeafdfbacedc78\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://921c44e6a0982b9a4011900fda1bda2c06b7a85894967de98b407a83fe9f90c0\",\"dweb:/ipfs/QmSsHLKDUQ82kpKdqB6VntVGKuPDb4W9VdotsubuqWBzio\"]},\"contracts/universal/Semver.sol\":{\"keccak256\":\"0x979b13465de4996a1105850abbf48abe7f71d5e18a8d4af318597ee14c165fdf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d0881ed7d8371fe1c12b931334e107746fa97d9ecd6aa3c0fca0c0db8581474e\",\"dweb:/ipfs/QmQ9UFwZgWkyFAHrzTtS7m6rghZ8nP9QybEuJ5y9vux5Gv\"]},\"contracts/vendor/AddressAliasHelper.sol\":{\"keccak256\":\"0x6ecb83b4ec80fbe49c22f4f95d90482de64660ef5d422a19f4d4b04df31c1237\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1d0885be6e473962f9a0622176a22300165ac0cc1a1d7f2e22b11c3d656ace88\",\"dweb:/ipfs/QmPRa3KmRpXW5P9ykveKRDgYN5zYo4cYLAYSnoqHX3KnXR\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"node_modules/@openzeppelin/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f\",\"dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"node_modules/@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0xaf159a8b1923ad2a26d516089bceca9bdeaeacd04be50983ea00ba63070f08a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f2cf1c531122bc7ca96b8c8db6a60deae60441e5223065e792553d4849b5638\",\"dweb:/ipfs/QmPBdJmBBABMDCfyDjCbdxgiqRavgiSL88SYPGibgbPas9\"]},\"node_modules/@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929\",\"dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC\"]},\"node_modules/@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689\",\"dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy\"]},\"node_modules/@rari-capital/solmate/src/utils/FixedPointMathLib.sol\":{\"keccak256\":\"0x622fcd8a49e132df5ec7651cc6ae3aaf0cf59bdcd67a9a804a1b9e2485113b7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af77088eb606427d4c55e578984a615779c86bc30646a20f7bb27299ba390f7c\",\"dweb:/ipfs/QmZGQdhdQDtHc7gZXWrKXgA3govc74X8U63BiWhPQK3mK8\"]}},\"version\":1}", - "bytecode": "0x6101406040523480156200001257600080fd5b506040516200367138038062003671833981016040819052620000359162000296565b60006080819052600160a05260c0526001600160a01b0380851660e052838116610100528116610120526200006a8262000074565b5050505062000302565b600054610100900460ff1615808015620000955750600054600160ff909116105b80620000c55750620000b230620001cb60201b62001afa1760201c565b158015620000c5575060005460ff166001145b6200012e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000152576000805461ff0019166101001790555b603280546001600160a01b03191661dead1790556035805483151560ff1990911617905562000180620001da565b8015620001c7576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054610100900460ff16620002475760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000125565b60408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b0217600155565b6001600160a01b03811681146200029357600080fd5b50565b60008060008060808587031215620002ad57600080fd5b8451620002ba816200027d565b6020860151909450620002cd816200027d565b60408601519093508015158114620002e457600080fd5b6060860151909250620002f7816200027d565b939692955090935050565b60805160a05160c05160e05161010051610120516132e062000391600039600081816102af0152610d0301526000818161038c015281816107db015261105c0152600081816101c1015281816109f601528181610bbd01528181610fb80152818161130a015281816115480152611fc201526000610f2301526000610efa01526000610ed101526132e06000f3fe6080604052600436106101835760003560e01c8063724c184c116100d6578063ca3e99ba1161007f578063d53a822f11610059578063d53a822f14610523578063e965084c14610543578063e9e05c42146105cf57600080fd5b8063ca3e99ba14610458578063cd7c97891461046d578063cff0ab961461048257600080fd5b80638c3152e9116100b05780638c3152e9146103db5780639bf62d82146103fb578063a14238e71461042857600080fd5b8063724c184c1461037a5780638456cb59146103ae578063867ead13146103c357600080fd5b80635865b6071161013857806364b792081161011257806364b792081461032d5780636bb0291e146103455780636dbffb781461035a57600080fd5b80635865b6071461029d5780635c1f2827146102d15780635c975abb1461030357600080fd5b80633f4ba83a116101695780633f4ba83a146102465780634870496f1461025b57806354fd4d501461027b57600080fd5b80621c2ff6146101af57806313620abd1461020d57600080fd5b366101aa576101a83334620186a06000604051806020016040528060008152506105dd565b005b600080fd5b3480156101bb57600080fd5b506101e37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021957600080fd5b50610225633b9aca0081565b6040516fffffffffffffffffffffffffffffffff9091168152602001610204565b34801561025257600080fd5b506101a86107c3565b34801561026757600080fd5b506101a8610276366004612938565b6108cc565b34801561028757600080fd5b50610290610eca565b6040516102049190612a8e565b3480156102a957600080fd5b506101e37f000000000000000000000000000000000000000000000000000000000000000081565b3480156102dd57600080fd5b506102f56fffffffffffffffffffffffffffffffff81565b604051908152602001610204565b34801561030f57600080fd5b5060355461031d9060ff1681565b6040519015158152602001610204565b34801561033957600080fd5b506102f56301312d0081565b34801561035157600080fd5b506102f5600a81565b34801561036657600080fd5b5061031d610375366004612aa1565b610f6d565b34801561038657600080fd5b506101e37f000000000000000000000000000000000000000000000000000000000000000081565b3480156103ba57600080fd5b506101a8611044565b3480156103cf57600080fd5b506102f5633b9aca0081565b3480156103e757600080fd5b506101a86103f6366004612aba565b61114a565b34801561040757600080fd5b506032546101e39073ffffffffffffffffffffffffffffffffffffffff1681565b34801561043457600080fd5b5061031d610443366004612aa1565b60336020526000908152604090205460ff1681565b34801561046457600080fd5b506102f5611915565b34801561047957600080fd5b506102f5600881565b34801561048e57600080fd5b506001546104ea906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610204565b34801561052f57600080fd5b506101a861053e366004612b00565b611927565b34801561054f57600080fd5b506105a161055e366004612aa1565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610204565b6101a86105dd366004612b1d565b8260005a905083156106785773ffffffffffffffffffffffffffffffffffffffff8716156106785760405162461bcd60e51b815260206004820152603e60248201527f4b616e766173506f7274616c3a206d7573742073656e6420746f20616464726560448201527f7373283029207768656e206372656174696e67206120636f6e7472616374000060648201526084015b60405180910390fd5b6152088567ffffffffffffffff1610156106fa5760405162461bcd60e51b815260206004820152603660248201527f4b616e766173506f7274616c3a20676173206c696d6974206d75737420636f7660448201527f657220696e737472696e7369632067617320636f737400000000000000000000606482015260840161066f565b3332811461071b575033731111000000000000000000000000000000001111015b60003488888888604051602001610736959493929190612ba5565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516107a69190612a8e565b60405180910390a450506107ba8282611b16565b50505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461086e5760405162461bcd60e51b815260206004820152602760248201527f4b616e766173506f7274616c3a206f6e6c7920677561726469616e2063616e2060448201527f756e706175736500000000000000000000000000000000000000000000000000606482015260840161066f565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b60355460ff161561091f5760405162461bcd60e51b815260206004820152601460248201527f4b616e766173506f7274616c3a20706175736564000000000000000000000000604482015260640161066f565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff16036109c45760405162461bcd60e51b815260206004820152603d60248201527f4b616e766173506f7274616c3a20796f752063616e6e6f742073656e64206d6560448201527f73736167657320746f2074686520706f7274616c20636f6e7472616374000000606482015260840161066f565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610a52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a769190612c2a565b519050610a90610a8b36869003860186612c8f565b611df5565b8114610b045760405162461bcd60e51b815260206004820152602760248201527f4b616e766173506f7274616c3a20696e76616c6964206f757470757420726f6f60448201527f742070726f6f6600000000000000000000000000000000000000000000000000606482015260840161066f565b6000610b0f87611e51565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c415750805160408083015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610c19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3d9190612c2a565b5114155b610cb35760405162461bcd60e51b815260206004820152603560248201527f4b616e766173506f7274616c3a207769746864726177616c206861736820686160448201527f7320616c7265616479206265656e2070726f76656e0000000000000000000000606482015260840161066f565b60408051602080820185905260008284015282518083038401815260608301808552815191909201207f12e64a7200000000000000000000000000000000000000000000000000000000909152917f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16916312e64a7291610d559185918b918b918e013590606401612d3e565b602060405180830381865afa158015610d72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d969190612e3f565b610e085760405162461bcd60e51b815260206004820152603060248201527f4b616e766173506f7274616c3a20696e76616c6964207769746864726177616c60448201527f20696e636c7573696f6e2070726f6f6600000000000000000000000000000000606482015260840161066f565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6060610ef57f0000000000000000000000000000000000000000000000000000000000000000611e81565b610f1e7f0000000000000000000000000000000000000000000000000000000000000000611e81565b610f477f0000000000000000000000000000000000000000000000000000000000000000611e81565b604051602001610f5993929190612e5c565b604051602081830303815290604052905090565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810182905260009061103e9073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa158015610fff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110239190612c2a565b602001516fffffffffffffffffffffffffffffffff16611fbe565b92915050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146110ef5760405162461bcd60e51b815260206004820152602560248201527f4b616e766173506f7274616c3a206f6e6c7920677561726469616e2063616e2060448201527f7061757365000000000000000000000000000000000000000000000000000000606482015260840161066f565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016108c2565b60355460ff161561119d5760405162461bcd60e51b815260206004820152601460248201527f4b616e766173506f7274616c3a20706175736564000000000000000000000000604482015260640161066f565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead1461122c5760405162461bcd60e51b815260206004820152603d60248201527f4b616e766173506f7274616c3a2063616e206f6e6c792074726967676572206f60448201527f6e65207769746864726177616c20706572207472616e73616374696f6e000000606482015260840161066f565b600061123782611e51565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036113085760405162461bcd60e51b815260206004820152603060248201527f4b616e766173506f7274616c3a207769746864726177616c20686173206e6f7460448201527f206265656e2070726f76656e2079657400000000000000000000000000000000606482015260840161066f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611373573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113979190612ed2565b81602001516fffffffffffffffffffffffffffffffff1610156114485760405162461bcd60e51b815260206004820152604960248201527f4b616e766173506f7274616c3a207769746864726177616c2074696d6573746160448201527f6d70206c657373207468616e204c32204f7261636c65207374617274696e672060648201527f74696d657374616d700000000000000000000000000000000000000000000000608482015260a40161066f565b61146781602001516fffffffffffffffffffffffffffffffff16611fbe565b6114ff5760405162461bcd60e51b815260206004820152604360248201527f4b616e766173506f7274616c3a2070726f76656e207769746864726177616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a40161066f565b60408181015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156115a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c89190612c2a565b82518151919250146116685760405162461bcd60e51b815260206004820152604760248201527f4b616e766173506f7274616c3a206f757470757420726f6f742070726f76656e60448201527f206973206e6f74207468652073616d652061732063757272656e74206f75747060648201527f757420726f6f7400000000000000000000000000000000000000000000000000608482015260a40161066f565b61168781602001516fffffffffffffffffffffffffffffffff16611fbe565b61171f5760405162461bcd60e51b815260206004820152604360248201527f4b616e766173506f7274616c3a20636865636b706f696e74206f75747075742060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a40161066f565b60008381526033602052604090205460ff16156117a45760405162461bcd60e51b815260206004820152603360248201527f4b616e766173506f7274616c3a207769746864726177616c2068617320616c7260448201527f65616479206265656e2066696e616c697a656400000000000000000000000000606482015260840161066f565b600083815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908601516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558501516080860151606087015160a088015161184693929190612061565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b906118ab90841515815260200190565b60405180910390a2801580156118c15750326001145b1561190e5760405162461bcd60e51b815260206004820152601f60248201527f4b616e766173506f7274616c3a207769746864726177616c206661696c656400604482015260640161066f565b5050505050565b611924600a6301312d00612f49565b81565b600054610100900460ff16158080156119475750600054600160ff909116105b806119615750303b158015611961575060005460ff166001145b6119d35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161066f565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611a3157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055603580548315157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909116179055611a936120bb565b8015611af657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600154600090611b4c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643612fb1565b90508015611c84576000611b65600a6301312d00612f49565b600154611b909190700100000000000000000000000000000000900467ffffffffffffffff16612fc8565b905060006008611ba5600a6301312d00612f49565b611baf919061303c565b600154611bcf9084906fffffffffffffffffffffffffffffffff1661303c565b611bd99190612f49565b600154909150600090611c1e90611c039084906fffffffffffffffffffffffffffffffff166130f8565b633b9aca006fffffffffffffffffffffffffffffffff612184565b90506001841115611c4557611c42611c03826008611c3d600189612fb1565b612199565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054849190601090611cb7908490700100000000000000000000000000000000900467ffffffffffffffff1661316c565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506301312d00600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315611d7a5760405162461bcd60e51b815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d69740000606482015260840161066f565b600154600090611da6906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8616613198565b90506000611db848633b9aca006121ee565b611dc290836131d5565b905060005a611dd19086612fb1565b905080821115611ded57611ded611de88284612fb1565b612207565b505050505050565b60008160000151826020015183604001518460600151604051602001611e34949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611e349790969591016131e9565b606081600003611ec457505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611eee5780611ed881613240565b9150611ee79050600a836131d5565b9150611ec8565b60008167ffffffffffffffff811115611f0957611f09612790565b6040519080825280601f01601f191660200182016040528015611f33576020820181803683370190505b5090505b8415611fb657611f48600183612fb1565b9150611f55600a86613278565b611f6090603061328c565b60f81b818381518110611f7557611f756132a4565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611faf600a866131d5565b9450611f37565b949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f4daa2916040518163ffffffff1660e01b8152600401602060405180830381865afa15801561202b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204f9190612ed2565b612059908361328c565b421192915050565b600080603f60c88601604002045a10156120a4576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080845160208601878a5af19695505050505050565b600054610100900460ff166121385760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161066f565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6000611fb66121938585612235565b83612245565b6000670de0b6b3a76400006121da6121b18583612f49565b6121c390670de0b6b3a7640000612fc8565b6121d585670de0b6b3a764000061303c565b612254565b6121e4908661303c565b611fb69190612f49565b6000818310156121fe5781612200565b825b9392505050565b6000805a90505b825a61221a9083612fb1565b10156122305761222982613240565b915061220e565b505050565b6000818312156121fe5781612200565b60008183126121fe5781612200565b6000612200670de0b6b3a76400008361226c86612285565b612276919061303c565b6122809190612f49565b6124af565b60008082136122d65760405162461bcd60e51b815260206004820152600960248201527f554e444546494e45440000000000000000000000000000000000000000000000604482015260640161066f565b600060606122e3846126d4565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136124e057506000919050565b680755bf798b4a1bf1e582126125385760405162461bcd60e51b815260206004820152600c60248201527f4558505f4f564552464c4f570000000000000000000000000000000000000000604482015260640161066f565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60008082116127255760405162461bcd60e51b815260206004820152600960248201527f554e444546494e45440000000000000000000000000000000000000000000000604482015260640161066f565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146127e357600080fd5b919050565b600082601f8301126127f957600080fd5b813567ffffffffffffffff8082111561281457612814612790565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561285a5761285a612790565b8160405283815286602085880101111561287357600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060c082840312156128a557600080fd5b60405160c0810167ffffffffffffffff82821081831117156128c9576128c9612790565b81604052829350843583526128e0602086016127bf565b60208401526128f1604086016127bf565b6040840152606085013560608401526080850135608084015260a085013591508082111561291e57600080fd5b5061292b858286016127e8565b60a0830152505092915050565b600080600080600085870360e081121561295157600080fd5b863567ffffffffffffffff8082111561296957600080fd5b6129758a838b01612893565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156129ae57600080fd5b60408901955060c08901359250808311156129c857600080fd5b828901925089601f8401126129dc57600080fd5b82359150808211156129ed57600080fd5b508860208260051b8401011115612a0357600080fd5b959894975092955050506020019190565b60005b83811015612a2f578181015183820152602001612a17565b83811115612a3e576000848401525b50505050565b60008151808452612a5c816020860160208601612a14565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122006020830184612a44565b600060208284031215612ab357600080fd5b5035919050565b600060208284031215612acc57600080fd5b813567ffffffffffffffff811115612ae357600080fd5b611fb684828501612893565b8015158114612afd57600080fd5b50565b600060208284031215612b1257600080fd5b813561220081612aef565b600080600080600060a08688031215612b3557600080fd5b612b3e866127bf565b945060208601359350604086013567ffffffffffffffff8082168214612b6357600080fd5b909350606087013590612b7582612aef565b90925060808701359080821115612b8b57600080fd5b50612b98888289016127e8565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251612bf9816049850160208701612a14565b919091016049019695505050505050565b80516fffffffffffffffffffffffffffffffff811681146127e357600080fd5b600060608284031215612c3c57600080fd5b6040516060810181811067ffffffffffffffff82111715612c5f57612c5f612790565b60405282518152612c7260208401612c0a565b6020820152612c8360408401612c0a565b60408201529392505050565b600060808284031215612ca157600080fd5b6040516080810181811067ffffffffffffffff82111715612cc457612cc4612790565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8481526000602060808184015280608084015260018060a085015260c0840160c060408601528087825260e08601905060e08860051b87010191508860005b89811015612e27577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2088850301835281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18c3603018112612dde57600080fd5b8b01868101903567ffffffffffffffff811115612dfa57600080fd5b803603821315612e0957600080fd5b612e14868284612cf5565b9550505091850191908501908401612d7d565b50505080935050505082606083015295945050505050565b600060208284031215612e5157600080fd5b815161220081612aef565b60008451612e6e818460208901612a14565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612eaa816001850160208a01612a14565b60019201918201528351612ec5816002840160208801612a14565b0160020195945050505050565b600060208284031215612ee457600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082612f5857612f58612eeb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615612fac57612fac612f1a565b500590565b600082821015612fc357612fc3612f1a565b500390565b6000808312837f80000000000000000000000000000000000000000000000000000000000000000183128115161561300257613002612f1a565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01831381161561303657613036612f1a565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561307d5761307d612f1a565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156130b8576130b8612f1a565b600087129250878205871284841616156130d4576130d4612f1a565b878505871281841616156130ea576130ea612f1a565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0384138115161561313257613132612f1a565b827f800000000000000000000000000000000000000000000000000000000000000003841281161561316657613166612f1a565b50500190565b600067ffffffffffffffff80831681851680830382111561318f5761318f612f1a565b01949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156131d0576131d0612f1a565b500290565b6000826131e4576131e4612eeb565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261323460c0830184612a44565b98975050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361327157613271612f1a565b5060010190565b60008261328757613287612eeb565b500690565b6000821982111561329f5761329f612f1a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a", - "deployedBytecode": "0x6080604052600436106101835760003560e01c8063724c184c116100d6578063ca3e99ba1161007f578063d53a822f11610059578063d53a822f14610523578063e965084c14610543578063e9e05c42146105cf57600080fd5b8063ca3e99ba14610458578063cd7c97891461046d578063cff0ab961461048257600080fd5b80638c3152e9116100b05780638c3152e9146103db5780639bf62d82146103fb578063a14238e71461042857600080fd5b8063724c184c1461037a5780638456cb59146103ae578063867ead13146103c357600080fd5b80635865b6071161013857806364b792081161011257806364b792081461032d5780636bb0291e146103455780636dbffb781461035a57600080fd5b80635865b6071461029d5780635c1f2827146102d15780635c975abb1461030357600080fd5b80633f4ba83a116101695780633f4ba83a146102465780634870496f1461025b57806354fd4d501461027b57600080fd5b80621c2ff6146101af57806313620abd1461020d57600080fd5b366101aa576101a83334620186a06000604051806020016040528060008152506105dd565b005b600080fd5b3480156101bb57600080fd5b506101e37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021957600080fd5b50610225633b9aca0081565b6040516fffffffffffffffffffffffffffffffff9091168152602001610204565b34801561025257600080fd5b506101a86107c3565b34801561026757600080fd5b506101a8610276366004612938565b6108cc565b34801561028757600080fd5b50610290610eca565b6040516102049190612a8e565b3480156102a957600080fd5b506101e37f000000000000000000000000000000000000000000000000000000000000000081565b3480156102dd57600080fd5b506102f56fffffffffffffffffffffffffffffffff81565b604051908152602001610204565b34801561030f57600080fd5b5060355461031d9060ff1681565b6040519015158152602001610204565b34801561033957600080fd5b506102f56301312d0081565b34801561035157600080fd5b506102f5600a81565b34801561036657600080fd5b5061031d610375366004612aa1565b610f6d565b34801561038657600080fd5b506101e37f000000000000000000000000000000000000000000000000000000000000000081565b3480156103ba57600080fd5b506101a8611044565b3480156103cf57600080fd5b506102f5633b9aca0081565b3480156103e757600080fd5b506101a86103f6366004612aba565b61114a565b34801561040757600080fd5b506032546101e39073ffffffffffffffffffffffffffffffffffffffff1681565b34801561043457600080fd5b5061031d610443366004612aa1565b60336020526000908152604090205460ff1681565b34801561046457600080fd5b506102f5611915565b34801561047957600080fd5b506102f5600881565b34801561048e57600080fd5b506001546104ea906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610204565b34801561052f57600080fd5b506101a861053e366004612b00565b611927565b34801561054f57600080fd5b506105a161055e366004612aa1565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610204565b6101a86105dd366004612b1d565b8260005a905083156106785773ffffffffffffffffffffffffffffffffffffffff8716156106785760405162461bcd60e51b815260206004820152603e60248201527f4b616e766173506f7274616c3a206d7573742073656e6420746f20616464726560448201527f7373283029207768656e206372656174696e67206120636f6e7472616374000060648201526084015b60405180910390fd5b6152088567ffffffffffffffff1610156106fa5760405162461bcd60e51b815260206004820152603660248201527f4b616e766173506f7274616c3a20676173206c696d6974206d75737420636f7660448201527f657220696e737472696e7369632067617320636f737400000000000000000000606482015260840161066f565b3332811461071b575033731111000000000000000000000000000000001111015b60003488888888604051602001610736959493929190612ba5565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516107a69190612a8e565b60405180910390a450506107ba8282611b16565b50505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461086e5760405162461bcd60e51b815260206004820152602760248201527f4b616e766173506f7274616c3a206f6e6c7920677561726469616e2063616e2060448201527f756e706175736500000000000000000000000000000000000000000000000000606482015260840161066f565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b60355460ff161561091f5760405162461bcd60e51b815260206004820152601460248201527f4b616e766173506f7274616c3a20706175736564000000000000000000000000604482015260640161066f565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff16036109c45760405162461bcd60e51b815260206004820152603d60248201527f4b616e766173506f7274616c3a20796f752063616e6e6f742073656e64206d6560448201527f73736167657320746f2074686520706f7274616c20636f6e7472616374000000606482015260840161066f565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610a52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a769190612c2a565b519050610a90610a8b36869003860186612c8f565b611df5565b8114610b045760405162461bcd60e51b815260206004820152602760248201527f4b616e766173506f7274616c3a20696e76616c6964206f757470757420726f6f60448201527f742070726f6f6600000000000000000000000000000000000000000000000000606482015260840161066f565b6000610b0f87611e51565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c415750805160408083015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610c19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3d9190612c2a565b5114155b610cb35760405162461bcd60e51b815260206004820152603560248201527f4b616e766173506f7274616c3a207769746864726177616c206861736820686160448201527f7320616c7265616479206265656e2070726f76656e0000000000000000000000606482015260840161066f565b60408051602080820185905260008284015282518083038401815260608301808552815191909201207f12e64a7200000000000000000000000000000000000000000000000000000000909152917f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16916312e64a7291610d559185918b918b918e013590606401612d3e565b602060405180830381865afa158015610d72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d969190612e3f565b610e085760405162461bcd60e51b815260206004820152603060248201527f4b616e766173506f7274616c3a20696e76616c6964207769746864726177616c60448201527f20696e636c7573696f6e2070726f6f6600000000000000000000000000000000606482015260840161066f565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6060610ef57f0000000000000000000000000000000000000000000000000000000000000000611e81565b610f1e7f0000000000000000000000000000000000000000000000000000000000000000611e81565b610f477f0000000000000000000000000000000000000000000000000000000000000000611e81565b604051602001610f5993929190612e5c565b604051602081830303815290604052905090565b6040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810182905260009061103e9073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa158015610fff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110239190612c2a565b602001516fffffffffffffffffffffffffffffffff16611fbe565b92915050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146110ef5760405162461bcd60e51b815260206004820152602560248201527f4b616e766173506f7274616c3a206f6e6c7920677561726469616e2063616e2060448201527f7061757365000000000000000000000000000000000000000000000000000000606482015260840161066f565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016108c2565b60355460ff161561119d5760405162461bcd60e51b815260206004820152601460248201527f4b616e766173506f7274616c3a20706175736564000000000000000000000000604482015260640161066f565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead1461122c5760405162461bcd60e51b815260206004820152603d60248201527f4b616e766173506f7274616c3a2063616e206f6e6c792074726967676572206f60448201527f6e65207769746864726177616c20706572207472616e73616374696f6e000000606482015260840161066f565b600061123782611e51565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036113085760405162461bcd60e51b815260206004820152603060248201527f4b616e766173506f7274616c3a207769746864726177616c20686173206e6f7460448201527f206265656e2070726f76656e2079657400000000000000000000000000000000606482015260840161066f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611373573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113979190612ed2565b81602001516fffffffffffffffffffffffffffffffff1610156114485760405162461bcd60e51b815260206004820152604960248201527f4b616e766173506f7274616c3a207769746864726177616c2074696d6573746160448201527f6d70206c657373207468616e204c32204f7261636c65207374617274696e672060648201527f74696d657374616d700000000000000000000000000000000000000000000000608482015260a40161066f565b61146781602001516fffffffffffffffffffffffffffffffff16611fbe565b6114ff5760405162461bcd60e51b815260206004820152604360248201527f4b616e766173506f7274616c3a2070726f76656e207769746864726177616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a40161066f565b60408181015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156115a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c89190612c2a565b82518151919250146116685760405162461bcd60e51b815260206004820152604760248201527f4b616e766173506f7274616c3a206f757470757420726f6f742070726f76656e60448201527f206973206e6f74207468652073616d652061732063757272656e74206f75747060648201527f757420726f6f7400000000000000000000000000000000000000000000000000608482015260a40161066f565b61168781602001516fffffffffffffffffffffffffffffffff16611fbe565b61171f5760405162461bcd60e51b815260206004820152604360248201527f4b616e766173506f7274616c3a20636865636b706f696e74206f75747075742060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a40161066f565b60008381526033602052604090205460ff16156117a45760405162461bcd60e51b815260206004820152603360248201527f4b616e766173506f7274616c3a207769746864726177616c2068617320616c7260448201527f65616479206265656e2066696e616c697a656400000000000000000000000000606482015260840161066f565b600083815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908601516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558501516080860151606087015160a088015161184693929190612061565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b906118ab90841515815260200190565b60405180910390a2801580156118c15750326001145b1561190e5760405162461bcd60e51b815260206004820152601f60248201527f4b616e766173506f7274616c3a207769746864726177616c206661696c656400604482015260640161066f565b5050505050565b611924600a6301312d00612f49565b81565b600054610100900460ff16158080156119475750600054600160ff909116105b806119615750303b158015611961575060005460ff166001145b6119d35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161066f565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611a3157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055603580548315157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909116179055611a936120bb565b8015611af657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600154600090611b4c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643612fb1565b90508015611c84576000611b65600a6301312d00612f49565b600154611b909190700100000000000000000000000000000000900467ffffffffffffffff16612fc8565b905060006008611ba5600a6301312d00612f49565b611baf919061303c565b600154611bcf9084906fffffffffffffffffffffffffffffffff1661303c565b611bd99190612f49565b600154909150600090611c1e90611c039084906fffffffffffffffffffffffffffffffff166130f8565b633b9aca006fffffffffffffffffffffffffffffffff612184565b90506001841115611c4557611c42611c03826008611c3d600189612fb1565b612199565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054849190601090611cb7908490700100000000000000000000000000000000900467ffffffffffffffff1661316c565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506301312d00600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315611d7a5760405162461bcd60e51b815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d69740000606482015260840161066f565b600154600090611da6906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8616613198565b90506000611db848633b9aca006121ee565b611dc290836131d5565b905060005a611dd19086612fb1565b905080821115611ded57611ded611de88284612fb1565b612207565b505050505050565b60008160000151826020015183604001518460600151604051602001611e34949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611e349790969591016131e9565b606081600003611ec457505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611eee5780611ed881613240565b9150611ee79050600a836131d5565b9150611ec8565b60008167ffffffffffffffff811115611f0957611f09612790565b6040519080825280601f01601f191660200182016040528015611f33576020820181803683370190505b5090505b8415611fb657611f48600183612fb1565b9150611f55600a86613278565b611f6090603061328c565b60f81b818381518110611f7557611f756132a4565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611faf600a866131d5565b9450611f37565b949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f4daa2916040518163ffffffff1660e01b8152600401602060405180830381865afa15801561202b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204f9190612ed2565b612059908361328c565b421192915050565b600080603f60c88601604002045a10156120a4576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080845160208601878a5af19695505050505050565b600054610100900460ff166121385760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161066f565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6000611fb66121938585612235565b83612245565b6000670de0b6b3a76400006121da6121b18583612f49565b6121c390670de0b6b3a7640000612fc8565b6121d585670de0b6b3a764000061303c565b612254565b6121e4908661303c565b611fb69190612f49565b6000818310156121fe5781612200565b825b9392505050565b6000805a90505b825a61221a9083612fb1565b10156122305761222982613240565b915061220e565b505050565b6000818312156121fe5781612200565b60008183126121fe5781612200565b6000612200670de0b6b3a76400008361226c86612285565b612276919061303c565b6122809190612f49565b6124af565b60008082136122d65760405162461bcd60e51b815260206004820152600960248201527f554e444546494e45440000000000000000000000000000000000000000000000604482015260640161066f565b600060606122e3846126d4565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136124e057506000919050565b680755bf798b4a1bf1e582126125385760405162461bcd60e51b815260206004820152600c60248201527f4558505f4f564552464c4f570000000000000000000000000000000000000000604482015260640161066f565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60008082116127255760405162461bcd60e51b815260206004820152600960248201527f554e444546494e45440000000000000000000000000000000000000000000000604482015260640161066f565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146127e357600080fd5b919050565b600082601f8301126127f957600080fd5b813567ffffffffffffffff8082111561281457612814612790565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561285a5761285a612790565b8160405283815286602085880101111561287357600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060c082840312156128a557600080fd5b60405160c0810167ffffffffffffffff82821081831117156128c9576128c9612790565b81604052829350843583526128e0602086016127bf565b60208401526128f1604086016127bf565b6040840152606085013560608401526080850135608084015260a085013591508082111561291e57600080fd5b5061292b858286016127e8565b60a0830152505092915050565b600080600080600085870360e081121561295157600080fd5b863567ffffffffffffffff8082111561296957600080fd5b6129758a838b01612893565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156129ae57600080fd5b60408901955060c08901359250808311156129c857600080fd5b828901925089601f8401126129dc57600080fd5b82359150808211156129ed57600080fd5b508860208260051b8401011115612a0357600080fd5b959894975092955050506020019190565b60005b83811015612a2f578181015183820152602001612a17565b83811115612a3e576000848401525b50505050565b60008151808452612a5c816020860160208601612a14565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122006020830184612a44565b600060208284031215612ab357600080fd5b5035919050565b600060208284031215612acc57600080fd5b813567ffffffffffffffff811115612ae357600080fd5b611fb684828501612893565b8015158114612afd57600080fd5b50565b600060208284031215612b1257600080fd5b813561220081612aef565b600080600080600060a08688031215612b3557600080fd5b612b3e866127bf565b945060208601359350604086013567ffffffffffffffff8082168214612b6357600080fd5b909350606087013590612b7582612aef565b90925060808701359080821115612b8b57600080fd5b50612b98888289016127e8565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251612bf9816049850160208701612a14565b919091016049019695505050505050565b80516fffffffffffffffffffffffffffffffff811681146127e357600080fd5b600060608284031215612c3c57600080fd5b6040516060810181811067ffffffffffffffff82111715612c5f57612c5f612790565b60405282518152612c7260208401612c0a565b6020820152612c8360408401612c0a565b60408201529392505050565b600060808284031215612ca157600080fd5b6040516080810181811067ffffffffffffffff82111715612cc457612cc4612790565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8481526000602060808184015280608084015260018060a085015260c0840160c060408601528087825260e08601905060e08860051b87010191508860005b89811015612e27577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2088850301835281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18c3603018112612dde57600080fd5b8b01868101903567ffffffffffffffff811115612dfa57600080fd5b803603821315612e0957600080fd5b612e14868284612cf5565b9550505091850191908501908401612d7d565b50505080935050505082606083015295945050505050565b600060208284031215612e5157600080fd5b815161220081612aef565b60008451612e6e818460208901612a14565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612eaa816001850160208a01612a14565b60019201918201528351612ec5816002840160208801612a14565b0160020195945050505050565b600060208284031215612ee457600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082612f5857612f58612eeb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615612fac57612fac612f1a565b500590565b600082821015612fc357612fc3612f1a565b500390565b6000808312837f80000000000000000000000000000000000000000000000000000000000000000183128115161561300257613002612f1a565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01831381161561303657613036612f1a565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561307d5761307d612f1a565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156130b8576130b8612f1a565b600087129250878205871284841616156130d4576130d4612f1a565b878505871281841616156130ea576130ea612f1a565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0384138115161561313257613132612f1a565b827f800000000000000000000000000000000000000000000000000000000000000003841281161561316657613166612f1a565b50500190565b600067ffffffffffffffff80831681851680830382111561318f5761318f612f1a565b01949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156131d0576131d0612f1a565b500290565b6000826131e4576131e4612eeb565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261323460c0830184612a44565b98975050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361327157613271612f1a565b5060010190565b60008261328757613287612eeb565b500690565b6000821982111561329f5761329f612f1a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a", - "devdoc": { - "version": 1, - "kind": "dev", - "methods": { - "constructor": { - "params": { - "_guardian": "Address that can pause deposits and withdrawals.", - "_l2Oracle": "Address of the L2OutputOracle contract.", - "_paused": "Sets the contract's pausability state.", - "_zkMerkleTrie": "Address of the ZKMerkleTrie contract." - } - }, - "depositTransaction(address,uint256,uint64,bool,bytes)": { - "params": { - "_data": "Data to trigger the recipient with.", - "_gasLimit": "Minimum L2 gas limit (can be greater than or equal to this value).", - "_isCreation": "Whether or not the transaction is a contract creation.", - "_to": "Target address on L2.", - "_value": "ETH value to send to the recipient." - } - }, - "finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))": { - "params": { - "_tx": "Withdrawal transaction to finalize." - } - }, - "isOutputFinalized(uint256)": { - "params": { - "_l2OutputIndex": "Index of the L2 output to check." - }, - "returns": { - "_0": "Whether or not the output is finalized." - } - }, - "proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])": { - "params": { - "_l2OutputIndex": "L2 output index to prove against.", - "_outputRootProof": "Inclusion proof of the L2ToL1MessagePasser contract's storage root.", - "_tx": "Withdrawal transaction to finalize.", - "_withdrawalProof": "Inclusion proof of the withdrawal in L2ToL1MessagePasser contract." - } - }, - "version()": { - "returns": { - "_0": "Semver contract version as a string." - } - } - }, - "events": { - "Paused(address)": { - "params": { - "account": "Address of the account triggering the pause." - } - }, - "TransactionDeposited(address,address,uint256,bytes)": { - "params": { - "from": "Address that triggered the deposit transaction.", - "opaqueData": "ABI encoded deposit data to be parsed off-chain.", - "to": "Address that the deposit transaction is directed to.", - "version": "Version of this deposit transaction event." - } - }, - "Unpaused(address)": { - "params": { - "account": "Address of the account triggering the unpause." - } - }, - "WithdrawalFinalized(bytes32,bool)": { - "params": { - "success": "Whether the withdrawal transaction was successful.", - "withdrawalHash": "Hash of the withdrawal transaction." - } - }, - "WithdrawalProven(bytes32,address,address)": { - "params": { - "withdrawalHash": "Hash of the withdrawal transaction." - } - } - } - }, - "userdoc": { - "version": 1, - "kind": "user", - "methods": { - "BASE_FEE_MAX_CHANGE_DENOMINATOR()": { - "notice": "Denominator that determines max change on fee per block." - }, - "ELASTICITY_MULTIPLIER()": { - "notice": "Along with the resource limit, determines the target resource limit." - }, - "GUARDIAN()": { - "notice": "Address that has the ability to pause and unpause withdrawals." - }, - "INITIAL_BASE_FEE()": { - "notice": "Initial base fee value. This value must be smaller than the MAXIMUM_BASE_FEE." - }, - "L2_ORACLE()": { - "notice": "Address of the L2OutputOracle." - }, - "MAXIMUM_BASE_FEE()": { - "notice": "Maximum base fee value, cannot go higher than this. It is possible for the MAXIMUM_BASE_FEE to raise to a value that is so large it will consume the entire gas limit of an L1 block." - }, - "MAX_RESOURCE_LIMIT()": { - "notice": "Maximum amount of the resource that can be used within this block. This value cannot be larger than the L2 block gas limit." - }, - "MINIMUM_BASE_FEE()": { - "notice": "Minimum base fee value, cannot go lower than this." - }, - "TARGET_RESOURCE_LIMIT()": { - "notice": "Target amount of the resource that should be used within this block." - }, - "ZK_MERKLE_TRIE()": { - "notice": "Address of the ZKMerkleTrie." - }, - "depositTransaction(address,uint256,uint64,bool,bytes)": { - "notice": "Accepts deposits of ETH and data, and emits a TransactionDeposited event for use in deriving deposit transactions. Note that if a deposit is made by a contract, its address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider using the CrossDomainMessenger contracts for a simpler developer experience." - }, - "finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))": { - "notice": "Finalizes a withdrawal transaction." - }, - "finalizedWithdrawals(bytes32)": { - "notice": "A list of withdrawal hashes which have been successfully finalized." - }, - "initialize(bool)": { - "notice": "Initializer." - }, - "isOutputFinalized(uint256)": { - "notice": "Determine if a given output is finalized. Reverts if the call to L2_ORACLE.getL2Output reverts. Returns a boolean otherwise." - }, - "l2Sender()": { - "notice": "Address of the L2 account which initiated a withdrawal in this transaction. If the of this variable is the default L2 sender address, then we are NOT inside of a call to finalizeWithdrawalTransaction." - }, - "params()": { - "notice": "EIP-1559 style gas parameters." - }, - "pause()": { - "notice": "Pause deposits and withdrawals." - }, - "paused()": { - "notice": "Determines if cross domain messaging is paused. When set to true, deposits and withdrawals are paused. This may be removed in the future." - }, - "proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes),uint256,(bytes32,bytes32,bytes32,bytes32),bytes[])": { - "notice": "Proves a withdrawal transaction." - }, - "provenWithdrawals(bytes32)": { - "notice": "A mapping of withdrawal hashes to `ProvenWithdrawal` data." - }, - "unpause()": { - "notice": "Unpause deposits and withdrawals." - }, - "version()": { - "notice": "Returns the full semver contract version." - } - }, - "events": { - "Paused(address)": { - "notice": "Emitted when the pause is triggered." - }, - "TransactionDeposited(address,address,uint256,bytes)": { - "notice": "Emitted when a transaction is deposited from L1 to L2. The parameters of this event are read by the rollup node and used to derive deposit transactions on L2." - }, - "Unpaused(address)": { - "notice": "Emitted when the pause is lifted." - }, - "WithdrawalFinalized(bytes32,bool)": { - "notice": "Emitted when a withdrawal transaction is finalized." - }, - "WithdrawalProven(bytes32,address,address)": { - "notice": "Emitted when a withdrawal transaction is proven." - } - }, - "notice": "The KromaPortal is a low-level contract responsible for passing messages between L1 and L2. Messages sent directly to the KromaPortal have no form of replayability. Users are encouraged to use the L1CrossDomainMessenger for a higher-level interface." - }, - "storageLayout": { - "storage": [ - { - "astId": 46293, - "contract": "contracts/L1/KromaPortal.sol:KromaPortal", - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8" - }, - { - "astId": 46296, - "contract": "contracts/L1/KromaPortal.sol:KromaPortal", - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 2556, - "contract": "contracts/L1/KromaPortal.sol:KromaPortal", - "label": "params", - "offset": 0, - "slot": "1", - "type": "t_struct(ResourceParams)2512_storage" - }, - { - "astId": 2561, - "contract": "contracts/L1/KromaPortal.sol:KromaPortal", - "label": "__gap", - "offset": 0, - "slot": "2", - "type": "t_array(t_uint256)48_storage" - }, - { - "astId": 1080, - "contract": "contracts/L1/KromaPortal.sol:KromaPortal", - "label": "l2Sender", - "offset": 0, - "slot": "50", - "type": "t_address" - }, - { - "astId": 1085, - "contract": "contracts/L1/KromaPortal.sol:KromaPortal", - "label": "finalizedWithdrawals", - "offset": 0, - "slot": "51", - "type": "t_mapping(t_bytes32,t_bool)" - }, - { - "astId": 1091, - "contract": "contracts/L1/KromaPortal.sol:KromaPortal", - "label": "provenWithdrawals", - "offset": 0, - "slot": "52", - "type": "t_mapping(t_bytes32,t_struct(ProvenWithdrawal)1058_storage)" - }, - { - "astId": 1094, - "contract": "contracts/L1/KromaPortal.sol:KromaPortal", - "label": "paused", - "offset": 0, - "slot": "53", - "type": "t_bool" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint256)48_storage": { - "encoding": "inplace", - "label": "uint256[48]", - "numberOfBytes": "1536", - "base": "t_uint256" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_bool)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_bytes32,t_struct(ProvenWithdrawal)1058_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct KromaPortal.ProvenWithdrawal)", - "numberOfBytes": "32", - "value": "t_struct(ProvenWithdrawal)1058_storage" - }, - "t_struct(ProvenWithdrawal)1058_storage": { - "encoding": "inplace", - "label": "struct KromaPortal.ProvenWithdrawal", - "numberOfBytes": "64", - "members": [ - { - "astId": 1053, - "contract": "contracts/L1/KromaPortal.sol:KromaPortal", - "label": "outputRoot", - "offset": 0, - "slot": "0", - "type": "t_bytes32" - }, - { - "astId": 1055, - "contract": "contracts/L1/KromaPortal.sol:KromaPortal", - "label": "timestamp", - "offset": 0, - "slot": "1", - "type": "t_uint128" - }, - { - "astId": 1057, - "contract": "contracts/L1/KromaPortal.sol:KromaPortal", - "label": "l2OutputIndex", - "offset": 16, - "slot": "1", - "type": "t_uint128" - } - ] - }, - "t_struct(ResourceParams)2512_storage": { - "encoding": "inplace", - "label": "struct ResourceMetering.ResourceParams", - "numberOfBytes": "32", - "members": [ - { - "astId": 2507, - "contract": "contracts/L1/KromaPortal.sol:KromaPortal", - "label": "prevBaseFee", - "offset": 0, - "slot": "0", - "type": "t_uint128" - }, - { - "astId": 2509, - "contract": "contracts/L1/KromaPortal.sol:KromaPortal", - "label": "prevBoughtGas", - "offset": 16, - "slot": "0", - "type": "t_uint64" - }, - { - "astId": 2511, - "contract": "contracts/L1/KromaPortal.sol:KromaPortal", - "label": "prevBlockNum", - "offset": 24, - "slot": "0", - "type": "t_uint64" - } - ] - }, - "t_uint128": { - "encoding": "inplace", - "label": "uint128", - "numberOfBytes": "16" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint64": { - "encoding": "inplace", - "label": "uint64", - "numberOfBytes": "8" - }, - "t_uint8": { - "encoding": "inplace", - "label": "uint8", - "numberOfBytes": "1" - } - } - } -} diff --git a/op-bindings/hardhat/types.go b/op-bindings/hardhat/types.go index cf2327246..8e8e86fca 100644 --- a/op-bindings/hardhat/types.go +++ b/op-bindings/hardhat/types.go @@ -3,11 +3,10 @@ package hardhat import ( "encoding/json" + "github.com/ethereum-optimism/optimism/op-bindings/solc" "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" - - "github.com/ethereum-optimism/optimism/op-bindings/solc" ) // Deployment represents a hardhat-deploy artifact file @@ -20,7 +19,7 @@ type Deployment struct { DeployedBytecode hexutil.Bytes `json:"deployedBytecode"` Devdoc json.RawMessage `json:"devdoc"` Metadata string `json:"metadata"` - Receipt Receipt `json:"receipt"` + Receipt json.RawMessage `json:"receipt"` SolcInputHash string `json:"solcInputHash"` StorageLayout solc.StorageLayout `json:"storageLayout"` TransactionHash common.Hash `json:"transactionHash"` diff --git a/op-bindings/predeploys/dev_addresses.go b/op-bindings/predeploys/dev_addresses.go deleted file mode 100644 index 1f2c46755..000000000 --- a/op-bindings/predeploys/dev_addresses.go +++ /dev/null @@ -1,68 +0,0 @@ -package predeploys - -import "github.com/ethereum/go-ethereum/common" - -const ( - DevProxyAdmin = "0x6900000000000000000000000000000000000000" - DevWETH9 = "0x6900000000000000000000000000000000000001" - DevSystemConfig = "0x6900000000000000000000000000000000000002" - DevKromaPortal = "0x6900000000000000000000000000000000000003" - DevL2OutputOracle = "0x6900000000000000000000000000000000000004" - DevValidatorPool = "0x6900000000000000000000000000000000000005" - DevL1CrossDomainMessenger = "0x6900000000000000000000000000000000000006" - DevL1StandardBridge = "0x6900000000000000000000000000000000000007" - DevL1ERC721Bridge = "0x6900000000000000000000000000000000000008" - DevKromaMintableERC20Factory = "0x6900000000000000000000000000000000000009" - DevPoseidon2 = "0x690000000000000000000000000000000000000A" - DevZKMerkleTrie = "0x690000000000000000000000000000000000000B" - DevZKVerifier = "0x690000000000000000000000000000000000000C" - DevColosseum = "0x690000000000000000000000000000000000000D" - DevSecurityCouncil = "0x690000000000000000000000000000000000000E" - DevSecurityCouncilToken = "0x690000000000000000000000000000000000000F" - DevTimeLock = "0x6900000000000000000000000000000000000010" - DevUpgradeGovernor = "0x6900000000000000000000000000000000000011" -) - -var ( - DevProxyAdminAddr = common.HexToAddress(DevProxyAdmin) - DevWETH9Addr = common.HexToAddress(DevWETH9) - DevSystemConfigAddr = common.HexToAddress(DevSystemConfig) - DevKromaPortalAddr = common.HexToAddress(DevKromaPortal) - DevL2OutputOracleAddr = common.HexToAddress(DevL2OutputOracle) - DevValidatorPoolAddr = common.HexToAddress(DevValidatorPool) - DevL1CrossDomainMessengerAddr = common.HexToAddress(DevL1CrossDomainMessenger) - DevL1StandardBridgeAddr = common.HexToAddress(DevL1StandardBridge) - DevL1ERC721BridgeAddr = common.HexToAddress(DevL1ERC721Bridge) - DevKromaMintableERC20FactoryAddr = common.HexToAddress(DevKromaMintableERC20Factory) - DevPoseidon2Addr = common.HexToAddress(DevPoseidon2) - DevZKMerkleTrieAddr = common.HexToAddress(DevZKMerkleTrie) - DevZKVerifierAddr = common.HexToAddress(DevZKVerifier) - DevColosseumAddr = common.HexToAddress(DevColosseum) - DevSecurityCouncilAddr = common.HexToAddress(DevSecurityCouncil) - DevSecurityCouncilTokenAddr = common.HexToAddress(DevSecurityCouncilToken) - DevTimeLockAddr = common.HexToAddress(DevTimeLock) - DevUpgradeGovernorAddr = common.HexToAddress(DevUpgradeGovernor) - - DevPredeploys = make(map[string]*common.Address) -) - -func init() { - DevPredeploys["Admin"] = &DevProxyAdminAddr - DevPredeploys["WETH9"] = &DevWETH9Addr - DevPredeploys["SystemConfig"] = &DevSystemConfigAddr - DevPredeploys["KromaPortal"] = &DevKromaPortalAddr - DevPredeploys["L2OutputOracle"] = &DevL2OutputOracleAddr - DevPredeploys["ValidatorPool"] = &DevValidatorPoolAddr - DevPredeploys["L1CrossDomainMessenger"] = &DevL1CrossDomainMessengerAddr - DevPredeploys["L1StandardBridge"] = &DevL1StandardBridgeAddr - DevPredeploys["L1ERC721Bridge"] = &DevL1ERC721BridgeAddr - DevPredeploys["KromaMintableERC20Factory"] = &DevKromaMintableERC20FactoryAddr - DevPredeploys["Poseidon2"] = &DevPoseidon2Addr - DevPredeploys["ZKMerkleTrie"] = &DevZKMerkleTrieAddr - DevPredeploys["ZKVerifier"] = &DevZKVerifierAddr - DevPredeploys["Colosseum"] = &DevColosseumAddr - DevPredeploys["SecurityCouncil"] = &DevSecurityCouncilAddr - DevPredeploys["SecurityCouncilToken"] = &DevSecurityCouncilTokenAddr - DevPredeploys["TimeLock"] = &DevTimeLockAddr - DevPredeploys["UpgradeGovernor"] = &DevUpgradeGovernorAddr -} diff --git a/op-bindings/solc/types.go b/op-bindings/solc/types.go index 34c3db83f..13c6c9ecf 100644 --- a/op-bindings/solc/types.go +++ b/op-bindings/solc/types.go @@ -2,6 +2,7 @@ package solc import ( "encoding/json" + "fmt" "github.com/ethereum/go-ethereum/accounts/abi" ) @@ -36,7 +37,8 @@ type CompilerOutput struct { type CompilerOutputContracts map[string]CompilerOutputContract -// TODO(tynes): ignoring devdoc and userdoc for now +// CompilerOutputContract represents the solc compiler output for a contract. +// Ignoring some fields such as devdoc and userdoc. type CompilerOutputContract struct { Abi abi.ABI `json:"abi"` Evm CompilerOutputEvm `json:"evm"` @@ -44,11 +46,33 @@ type CompilerOutputContract struct { StorageLayout StorageLayout `json:"storageLayout"` } +// StorageLayout represents the solc compilers output storage layout for +// a contract. type StorageLayout struct { Storage []StorageLayoutEntry `json:"storage"` Types map[string]StorageLayoutType `json:"types"` } +// GetStorageLayoutEntry returns the StorageLayoutEntry where the label matches +// the provided name. +func (s *StorageLayout) GetStorageLayoutEntry(name string) (StorageLayoutEntry, error) { + for _, entry := range s.Storage { + if entry.Label == name { + return entry, nil + } + } + return StorageLayoutEntry{}, fmt.Errorf("%s not found", name) +} + +// GetStorageLayoutType returns the StorageLayoutType where the label matches +// the provided name. +func (s *StorageLayout) GetStorageLayoutType(name string) (StorageLayoutType, error) { + if ty, ok := s.Types[name]; ok { + return ty, nil + } + return StorageLayoutType{}, fmt.Errorf("%s not found", name) +} + type StorageLayoutEntry struct { AstId uint `json:"astId"` Contract string `json:"contract"` @@ -64,6 +88,7 @@ type StorageLayoutType struct { NumberOfBytes uint `json:"numberOfBytes,string"` Key string `json:"key,omitempty"` Value string `json:"value,omitempty"` + Base string `json:"base,omitempty"` } type CompilerOutputEvm struct { @@ -82,10 +107,8 @@ type CompilerOutputBytecode struct { LinkReferences LinkReferences `json:"linkReferences"` } -type ( - LinkReferences map[string]LinkReference - LinkReference map[string][]LinkReferenceOffset -) +type LinkReferences map[string]LinkReference +type LinkReference map[string][]LinkReferenceOffset type LinkReferenceOffset struct { Length uint `json:"length"` diff --git a/op-chain-ops/.gitignore b/op-chain-ops/.gitignore new file mode 100644 index 000000000..ba077a403 --- /dev/null +++ b/op-chain-ops/.gitignore @@ -0,0 +1 @@ +bin diff --git a/op-chain-ops/Makefile b/op-chain-ops/Makefile new file mode 100644 index 000000000..a4a93dc32 --- /dev/null +++ b/op-chain-ops/Makefile @@ -0,0 +1,18 @@ +all: check-l2 + +check-l2: + go build -o ./bin/check-l2 ./cmd/check-l2/main.go + +test: + go test ./... + +lint: + golangci-lint run -E goimports,sqlclosecheck,bodyclose,asciicheck,misspell,errorlint --timeout 5m -e "errors.As" -e "errors.Is" ./... + +fuzz: + go test -run NOTAREALTEST -v -fuzztime 10s -fuzz=FuzzEncodeDecodeWithdrawal ./crossdomain + go test -run NOTAREALTEST -v -fuzztime 10s -fuzz=FuzzEncodeDecodeLegacyWithdrawal ./crossdomain + go test -run NOTAREALTEST -v -fuzztime 10s -fuzz=FuzzAliasing ./crossdomain + go test -run NOTAREALTEST -v -fuzztime 10s -fuzz=FuzzVersionedNonce ./crossdomain + +.PHONY: check-l2 test fuzz diff --git a/op-chain-ops/README.md b/op-chain-ops/README.md new file mode 100644 index 000000000..56aa6cc28 --- /dev/null +++ b/op-chain-ops/README.md @@ -0,0 +1,25 @@ +# op-chain-ops + +This package contains utilities for working with chain state. + +## check-l2 + +The `check-l2` binary is used for verifying that an OP Stack L2 +has been configured correctly. It iterates over all 2048 predeployed +proxies to make sure they are configured correctly with the correct +proxy admin address. After that, it checks that all [predeploys](../op-bindings/predeploys/addresses.go) +are configured and aliased correctly. Additional contract-specific +checks ensure configuration like ownership, version, and storage +is set correctly for the predeploys. + +#### Usage + +It can be built and run using the [Makefile](./Makefile) `check-l2` target. +Run `make check-l2` to create a binary in [./bin/check-l2](./bin/check-l2) +that can be executed by providing the `--l1-rpc-url` and `--l2-rpc-url` flags. + +```sh +./bin/check-l2 \ + --l2-rpc-url http://localhost:9545 \ + --l1-rpc-url http://localhost:8545 +``` diff --git a/op-chain-ops/contracts/contracts.go b/op-chain-ops/contracts/contracts.go new file mode 100644 index 000000000..def9c3746 --- /dev/null +++ b/op-chain-ops/contracts/contracts.go @@ -0,0 +1,50 @@ +package contracts + +import ( + "github.com/ethereum/go-ethereum/common" + "github.com/urfave/cli/v2" +) + +// Addresses represents the address values of various contracts. The values can +// be easily populated via a [cli.Context]. +type Addresses struct { + AddressManager common.Address + OptimismPortal common.Address + L1StandardBridge common.Address + L1CrossDomainMessenger common.Address + CanonicalTransactionChain common.Address + StateCommitmentChain common.Address +} + +// NewAddresses populates an Addresses struct given a [cli.Context]. +// This is useful for writing scripts that interact with smart contracts. +func NewAddresses(ctx *cli.Context) (*Addresses, error) { + var addresses Addresses + var err error + + addresses.AddressManager, err = parseAddress(ctx, "address-manager-address") + if err != nil { + return nil, err + } + addresses.OptimismPortal, err = parseAddress(ctx, "optimism-portal-address") + if err != nil { + return nil, err + } + addresses.L1StandardBridge, err = parseAddress(ctx, "l1-standard-bridge-address") + if err != nil { + return nil, err + } + addresses.L1CrossDomainMessenger, err = parseAddress(ctx, "l1-crossdomain-messenger-address") + if err != nil { + return nil, err + } + addresses.CanonicalTransactionChain, err = parseAddress(ctx, "canonical-transaction-chain-address") + if err != nil { + return nil, err + } + addresses.StateCommitmentChain, err = parseAddress(ctx, "state-commitment-chain-address") + if err != nil { + return nil, err + } + return &addresses, nil +} diff --git a/op-chain-ops/crossdomain/encoding.go b/op-chain-ops/crossdomain/encoding.go index 1b3bba2b8..19a242edd 100644 --- a/op-chain-ops/crossdomain/encoding.go +++ b/op-chain-ops/crossdomain/encoding.go @@ -11,10 +11,14 @@ import ( var ( // NonceMask represents a mask used to extract version bytes from the nonce NonceMask, _ = new(big.Int).SetString("0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16) + // relayMessage0ABI represents the v0 relay message encoding + relayMessage0ABI = "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_messageNonce\",\"type\":\"uint256\"}],\"name\":\"relayMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]" // relayMessage1ABI represents the v1 relay message encoding - relayMessage0ABI = "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"relayMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]" + relayMessage1ABI = "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"relayMessage\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]" // relayMessage0 represents the ABI of relay message v0 relayMessage0 abi.ABI + // relayMessage1 represents the ABI of relay message v1 + relayMessage1 abi.ABI ) // Create the required ABIs @@ -24,11 +28,26 @@ func init() { if err != nil { panic(err) } + relayMessage1, err = abi.JSON(strings.NewReader(relayMessage1ABI)) + if err != nil { + panic(err) + } } // EncodeCrossDomainMessageV0 will encode the calldata for -// "relayMessage(uint256,address,address,uint256,uint256,bytes)", +// "relayMessage(address,address,bytes,uint256)", func EncodeCrossDomainMessageV0( + target common.Address, + sender common.Address, + message []byte, + nonce *big.Int, +) ([]byte, error) { + return relayMessage0.Pack("relayMessage", target, sender, message, nonce) +} + +// EncodeCrossDomainMessageV1 will encode the calldata for +// "relayMessage(uint256,address,address,uint256,uint256,bytes)", +func EncodeCrossDomainMessageV1( nonce *big.Int, sender common.Address, target common.Address, @@ -36,7 +55,7 @@ func EncodeCrossDomainMessageV0( gasLimit *big.Int, data []byte, ) ([]byte, error) { - return relayMessage0.Pack("relayMessage", nonce, sender, target, value, gasLimit, data) + return relayMessage1.Pack("relayMessage", nonce, sender, target, value, gasLimit, data) } // DecodeVersionedNonce will decode the version that is encoded in the nonce diff --git a/op-chain-ops/crossdomain/hashing.go b/op-chain-ops/crossdomain/hashing.go index 8b13462cf..ddc9b1b28 100644 --- a/op-chain-ops/crossdomain/hashing.go +++ b/op-chain-ops/crossdomain/hashing.go @@ -7,8 +7,25 @@ import ( "github.com/ethereum/go-ethereum/crypto" ) -// HashCrossDomainMessage computes cross domain messaging hashing scheme. +// HashCrossDomainMessageV0 computes the pre bedrock cross domain messaging +// hashing scheme. func HashCrossDomainMessageV0( + target common.Address, + sender common.Address, + data []byte, + nonce *big.Int, +) (common.Hash, error) { + encoded, err := EncodeCrossDomainMessageV0(target, sender, data, nonce) + if err != nil { + return common.Hash{}, err + } + hash := crypto.Keccak256(encoded) + return common.BytesToHash(hash), nil +} + +// HashCrossDomainMessageV1 computes the first post bedrock cross domain +// messaging hashing scheme. +func HashCrossDomainMessageV1( nonce *big.Int, sender common.Address, target common.Address, @@ -16,7 +33,7 @@ func HashCrossDomainMessageV0( gasLimit *big.Int, data []byte, ) (common.Hash, error) { - encoded, err := EncodeCrossDomainMessageV0(nonce, sender, target, value, gasLimit, data) + encoded, err := EncodeCrossDomainMessageV1(nonce, sender, target, value, gasLimit, data) if err != nil { return common.Hash{}, err } diff --git a/op-chain-ops/crossdomain/message.go b/op-chain-ops/crossdomain/message.go index 0b050ffee..4dc176e69 100644 --- a/op-chain-ops/crossdomain/message.go +++ b/op-chain-ops/crossdomain/message.go @@ -9,7 +9,9 @@ import ( // CrossDomainMessage represents a cross domain message // used by the CrossDomainMessenger. The version is encoded -// in the nonce. +// in the nonce. Version 0 messages do not have a value, +// version 1 messages have a value and the most significant +// byte of the nonce is a 1 type CrossDomainMessage struct { Nonce *big.Int `json:"nonce"` Sender common.Address `json:"sender"` @@ -48,7 +50,9 @@ func (c *CrossDomainMessage) Encode() ([]byte, error) { version := c.Version() switch version { case 0: - return EncodeCrossDomainMessageV0(c.Nonce, c.Sender, c.Target, c.Value, c.GasLimit, c.Data) + return EncodeCrossDomainMessageV0(c.Target, c.Sender, c.Data, c.Nonce) + case 1: + return EncodeCrossDomainMessageV1(c.Nonce, c.Sender, c.Target, c.Value, c.GasLimit, c.Data) default: return nil, fmt.Errorf("unknown version %d", version) } @@ -59,8 +63,16 @@ func (c *CrossDomainMessage) Hash() (common.Hash, error) { version := c.Version() switch version { case 0: - return HashCrossDomainMessageV0(c.Nonce, c.Sender, c.Target, c.Value, c.GasLimit, c.Data) + return HashCrossDomainMessageV0(c.Target, c.Sender, c.Data, c.Nonce) + case 1: + return HashCrossDomainMessageV1(c.Nonce, c.Sender, c.Target, c.Value, c.GasLimit, c.Data) default: return common.Hash{}, fmt.Errorf("unknown version %d", version) } } + +// HashV1 forces using the V1 hash even if its a legacy hash. This is used +// for the migration process. +func (c *CrossDomainMessage) HashV1() (common.Hash, error) { + return HashCrossDomainMessageV1(c.Nonce, c.Sender, c.Target, c.Value, c.GasLimit, c.Data) +} diff --git a/op-chain-ops/crossdomain/message_test.go b/op-chain-ops/crossdomain/message_test.go index 6bc2c0971..408cc290c 100644 --- a/op-chain-ops/crossdomain/message_test.go +++ b/op-chain-ops/crossdomain/message_test.go @@ -4,10 +4,11 @@ import ( "math/big" "testing" - "github.com/ethereum-optimism/optimism/op-chain-ops/crossdomain" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/stretchr/testify/require" + + "github.com/ethereum-optimism/optimism/op-chain-ops/crossdomain" ) // TestEncode tests the encoding of a CrossDomainMessage. The assertion was @@ -16,11 +17,27 @@ func TestEncode(t *testing.T) { t.Parallel() t.Run("V0", func(t *testing.T) { - expectNonce := common.Big1 - expectVersion := common.Big0 + msg := crossdomain.NewCrossDomainMessage( + crossdomain.EncodeVersionedNonce(common.Big0, common.Big0), + common.Address{}, + common.Address{19: 0x01}, + big.NewInt(0), + big.NewInt(5), + []byte{}, + ) + + require.Equal(t, uint64(0), msg.Version()) + + encoded, err := msg.Encode() + require.Nil(t, err) + expect := hexutil.MustDecode("0xcbd4ece900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000") + require.Equal(t, expect, encoded) + }) + + t.Run("V1", func(t *testing.T) { msg := crossdomain.NewCrossDomainMessage( - crossdomain.EncodeVersionedNonce(expectNonce, expectVersion), + crossdomain.EncodeVersionedNonce(common.Big1, common.Big1), common.Address{19: 0x01}, common.Address{19: 0x02}, big.NewInt(100), @@ -28,12 +45,12 @@ func TestEncode(t *testing.T) { []byte{}, ) - require.Equal(t, uint64(0), msg.Version()) + require.Equal(t, uint64(1), msg.Version()) encoded, err := msg.Encode() require.Nil(t, err) - expect := hexutil.MustDecode("0xd764ad0b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000022b00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000") + expect := hexutil.MustDecode("0xd764ad0b0001000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000022b00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000") require.Equal(t, expect, encoded) }) @@ -45,11 +62,27 @@ func TestHash(t *testing.T) { t.Parallel() t.Run("V0", func(t *testing.T) { - expectNonce := common.Big0 - expectVersion := common.Big0 + msg := crossdomain.NewCrossDomainMessage( + crossdomain.EncodeVersionedNonce(common.Big0, common.Big0), + common.Address{}, + common.Address{19: 0x01}, + big.NewInt(10), + big.NewInt(5), + []byte{}, + ) + + require.Equal(t, uint64(0), msg.Version()) + + hash, err := msg.Hash() + require.Nil(t, err) + + expect := common.HexToHash("0x5bb579a193681e7c4d43c8c2e4bc6c2c447d21ef9fa887ca23b2d3f9a0fac065") + require.Equal(t, expect, hash) + }) + t.Run("V1", func(t *testing.T) { msg := crossdomain.NewCrossDomainMessage( - crossdomain.EncodeVersionedNonce(expectNonce, expectVersion), + crossdomain.EncodeVersionedNonce(common.Big0, common.Big1), common.Address{}, common.Address{19: 0x01}, big.NewInt(0), @@ -57,12 +90,12 @@ func TestHash(t *testing.T) { []byte{}, ) - require.Equal(t, expectVersion.Uint64(), msg.Version()) + require.Equal(t, uint64(1), msg.Version()) hash, err := msg.Hash() require.Nil(t, err) - expect := common.HexToHash("0xabe2ab138bea877c082a26a761f9c999ef57748d2d0ab05a24c6e8bdd1c5fb41") + expect := common.HexToHash("0x09bbda7f59cdaccab5c41cab4600bd458b2bd7d9f8410f13316fe07e5f4237cc") require.Equal(t, expect, hash) }) } diff --git a/op-chain-ops/crossdomain/testdata/call-traces/0x26b854fe0b8f0c5ad15d5c3c1291107cc870f5d7351cfc399e23e68f22231fbe.json b/op-chain-ops/crossdomain/testdata/call-traces/0x26b854fe0b8f0c5ad15d5c3c1291107cc870f5d7351cfc399e23e68f22231fbe.json index b4d482eba..6896bb87a 100644 --- a/op-chain-ops/crossdomain/testdata/call-traces/0x26b854fe0b8f0c5ad15d5c3c1291107cc870f5d7351cfc399e23e68f22231fbe.json +++ b/op-chain-ops/crossdomain/testdata/call-traces/0x26b854fe0b8f0c5ad15d5c3c1291107cc870f5d7351cfc399e23e68f22231fbe.json @@ -1,7 +1,7 @@ { "calls": [ { - "from": "0x4200000000000000000000000000000000000009", + "from": "0x4200000000000000000000000000000000000010", "gas": "0x1647d", "gasUsed": "0x341b", "input": "0x9dc29fac0000000000000000000000009c8f005ab27adb94f3d49020a15722db2fcd9f2700000000000000000000000000000000000000000000000000232bff5f46c000", @@ -11,7 +11,7 @@ "value": "0x0" }, { - "from": "0x4200000000000000000000000000000000000009", + "from": "0x4200000000000000000000000000000000000010", "gas": "0x12fe8", "gasUsed": "0x94b", "input": "0xc01e1bd6", @@ -23,7 +23,7 @@ { "calls": [ { - "from": "0x4200000000000000000000000000000000000004", + "from": "0x4200000000000000000000000000000000000007", "gas": "0x8ea6", "gasUsed": "0x5e1e", "input": "0xcafa81dc00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000164cbd4ece900000000000000000000000099c9fc46f92e8a1c0dec1b1747d010903e884be100000000000000000000000042000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000001b04d00000000000000000000000000000000000000000000000000000000000000a41532ec340000000000000000000000009c8f005ab27adb94f3d49020a15722db2fcd9f270000000000000000000000009c8f005ab27adb94f3d49020a15722db2fcd9f2700000000000000000000000000000000000000000000000000232bff5f46c000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -33,12 +33,12 @@ "value": "0x0" } ], - "from": "0x4200000000000000000000000000000000000009", + "from": "0x4200000000000000000000000000000000000010", "gas": "0x10644", "gasUsed": "0xf29d", "input": "0x3dbb202b00000000000000000000000099c9fc46f92e8a1c0dec1b1747d010903e884be10000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a41532ec340000000000000000000000009c8f005ab27adb94f3d49020a15722db2fcd9f270000000000000000000000009c8f005ab27adb94f3d49020a15722db2fcd9f2700000000000000000000000000000000000000000000000000232bff5f46c0000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "output": "0x", - "to": "0x4200000000000000000000000000000000000004", + "to": "0x4200000000000000000000000000000000000007", "type": "CALL", "value": "0x0" } @@ -49,7 +49,7 @@ "input": "0x32b7006d000000000000000000000000deaddeaddeaddeaddeaddeaddeaddeaddead000000000000000000000000000000000000000000000000000000232bff5f46c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000", "output": "0x", "time": "112.522948ms", - "to": "0x4200000000000000000000000000000000000009", + "to": "0x4200000000000000000000000000000000000010", "type": "CALL", "value": "0x0" } diff --git a/op-chain-ops/crossdomain/testdata/call-traces/0x32d3b5a0178a33cfbf904cfd36f66a13ff8576f409f15aae86dc3ff0e101c93a.json b/op-chain-ops/crossdomain/testdata/call-traces/0x32d3b5a0178a33cfbf904cfd36f66a13ff8576f409f15aae86dc3ff0e101c93a.json index 344d9e8b9..284b4167d 100644 --- a/op-chain-ops/crossdomain/testdata/call-traces/0x32d3b5a0178a33cfbf904cfd36f66a13ff8576f409f15aae86dc3ff0e101c93a.json +++ b/op-chain-ops/crossdomain/testdata/call-traces/0x32d3b5a0178a33cfbf904cfd36f66a13ff8576f409f15aae86dc3ff0e101c93a.json @@ -1,7 +1,7 @@ { "calls": [ { - "from": "0x4200000000000000000000000000000000000009", + "from": "0x4200000000000000000000000000000000000010", "gas": "0x318ce", "gasUsed": "0x427b", "input": "0x9dc29fac0000000000000000000000003178490d60b5cceaa5a79fd4d9050c7405bab80c0000000000000000000000000000000000000000000000a3b61828488b117259", @@ -11,7 +11,7 @@ "value": "0x0" }, { - "from": "0x4200000000000000000000000000000000000009", + "from": "0x4200000000000000000000000000000000000010", "gas": "0x2d612", "gasUsed": "0xa14", "input": "0xc01e1bd6", @@ -23,7 +23,7 @@ { "calls": [ { - "from": "0x4200000000000000000000000000000000000004", + "from": "0x4200000000000000000000000000000000000007", "gas": "0x22b8c", "gasUsed": "0x5ecf", "input": "0xcafa81dc000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001a4cbd4ece900000000000000000000000099c9fc46f92e8a1c0dec1b1747d010903e884be100000000000000000000000042000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000001b04f00000000000000000000000000000000000000000000000000000000000000e4a9f9e6750000000000000000000000007fc66500c84a76ad7e9c93437bfc5ac33e2ddae900000000000000000000000076fb31fb4af56892a25e32cfc43de717950c92780000000000000000000000003178490d60b5cceaa5a79fd4d9050c7405bab80c0000000000000000000000003178490d60b5cceaa5a79fd4d9050c7405bab80c0000000000000000000000000000000000000000000000a3b61828488b11725900000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -33,12 +33,12 @@ "value": "0x0" } ], - "from": "0x4200000000000000000000000000000000000009", + "from": "0x4200000000000000000000000000000000000010", "gas": "0x2aae9", "gasUsed": "0xf705", "input": "0x3dbb202b00000000000000000000000099c9fc46f92e8a1c0dec1b1747d010903e884be10000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e4a9f9e6750000000000000000000000007fc66500c84a76ad7e9c93437bfc5ac33e2ddae900000000000000000000000076fb31fb4af56892a25e32cfc43de717950c92780000000000000000000000003178490d60b5cceaa5a79fd4d9050c7405bab80c0000000000000000000000003178490d60b5cceaa5a79fd4d9050c7405bab80c0000000000000000000000000000000000000000000000a3b61828488b11725900000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "output": "0x", - "to": "0x4200000000000000000000000000000000000004", + "to": "0x4200000000000000000000000000000000000007", "type": "CALL", "value": "0x0" } @@ -49,7 +49,7 @@ "input": "0x32b7006d00000000000000000000000076fb31fb4af56892a25e32cfc43de717950c92780000000000000000000000000000000000000000000000a3b61828488b117259000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000", "output": "0x", "time": "40.447524ms", - "to": "0x4200000000000000000000000000000000000009", + "to": "0x4200000000000000000000000000000000000010", "type": "CALL", "value": "0x0" } diff --git a/op-chain-ops/crossdomain/testdata/call-traces/0x38236157c6941ef64f4dd0dfa7efed4a82ef9fccdcdda75a8ee89cbe831b182b.json b/op-chain-ops/crossdomain/testdata/call-traces/0x38236157c6941ef64f4dd0dfa7efed4a82ef9fccdcdda75a8ee89cbe831b182b.json index db6f7efcf..e756e620a 100644 --- a/op-chain-ops/crossdomain/testdata/call-traces/0x38236157c6941ef64f4dd0dfa7efed4a82ef9fccdcdda75a8ee89cbe831b182b.json +++ b/op-chain-ops/crossdomain/testdata/call-traces/0x38236157c6941ef64f4dd0dfa7efed4a82ef9fccdcdda75a8ee89cbe831b182b.json @@ -13,7 +13,7 @@ { "calls": [ { - "from": "0x4200000000000000000000000000000000000004", + "from": "0x4200000000000000000000000000000000000007", "gas": "0x86e2", "gasUsed": "0x5ecf", "input": "0xcafa81dc000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001a4cbd4ece900000000000000000000000010e6593cdda8c58a1d0f14c5164b376352a55f2f000000000000000000000000467194771dae2967aef3ecbedd3bf9a310c76c650000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000001b05e00000000000000000000000000000000000000000000000000000000000000e4a9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000006659612eb0e2464ccadf7a5e851bcd12873f6e040000000000000000000000006659612eb0e2464ccadf7a5e851bcd12873f6e04000000000000000000000000000000000000000000021165458500521280000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -28,7 +28,7 @@ "gasUsed": "0xf705", "input": "0x3dbb202b00000000000000000000000010e6593cdda8c58a1d0f14c5164b376352a55f2f0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e4a9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000006659612eb0e2464ccadf7a5e851bcd12873f6e040000000000000000000000006659612eb0e2464ccadf7a5e851bcd12873f6e04000000000000000000000000000000000000000000021165458500521280000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "output": "0x", - "to": "0x4200000000000000000000000000000000000004", + "to": "0x4200000000000000000000000000000000000007", "type": "CALL", "value": "0x0" } diff --git a/op-chain-ops/crossdomain/testdata/call-traces/0xed57a510022157b14542491a501daed1d58003e4b274b331d2fc40dcc43f0941.json b/op-chain-ops/crossdomain/testdata/call-traces/0xed57a510022157b14542491a501daed1d58003e4b274b331d2fc40dcc43f0941.json index ec494261a..71c930e5c 100644 --- a/op-chain-ops/crossdomain/testdata/call-traces/0xed57a510022157b14542491a501daed1d58003e4b274b331d2fc40dcc43f0941.json +++ b/op-chain-ops/crossdomain/testdata/call-traces/0xed57a510022157b14542491a501daed1d58003e4b274b331d2fc40dcc43f0941.json @@ -178,7 +178,7 @@ { "calls": [ { - "from": "0x4200000000000000000000000000000000000004", + "from": "0x4200000000000000000000000000000000000007", "gas": "0x7a8c", "gasUsed": "0x5d16", "input": "0xcafa81dc00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000104cbd4ece900000000000000000000000039ea01a0298c315d149a490e34b59dbf2ec7e48f000000000000000000000000136b1ec699c62b0606854056f02dc7bb80482d630000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000001b04c0000000000000000000000000000000000000000000000000000000000000044f4f7b41a00000000000000000000000090f1cb932dbf94385434c40d53df3727f00e50b10000000000000000000000000000000000000000000001c9f23e7ccc897c65e50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -193,7 +193,7 @@ "gasUsed": "0xec03", "input": "0x3dbb202b00000000000000000000000039ea01a0298c315d149a490e34b59dbf2ec7e48f000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000002dc6c00000000000000000000000000000000000000000000000000000000000000044f4f7b41a00000000000000000000000090f1cb932dbf94385434c40d53df3727f00e50b10000000000000000000000000000000000000000000001c9f23e7ccc897c65e500000000000000000000000000000000000000000000000000000000", "output": "0x", - "to": "0x4200000000000000000000000000000000000004", + "to": "0x4200000000000000000000000000000000000007", "type": "CALL", "value": "0x0" } diff --git a/op-chain-ops/crossdomain/testdata/receipts/0x26b854fe0b8f0c5ad15d5c3c1291107cc870f5d7351cfc399e23e68f22231fbe.json b/op-chain-ops/crossdomain/testdata/receipts/0x26b854fe0b8f0c5ad15d5c3c1291107cc870f5d7351cfc399e23e68f22231fbe.json index f6099f4f9..523bca53d 100644 --- a/op-chain-ops/crossdomain/testdata/receipts/0x26b854fe0b8f0c5ad15d5c3c1291107cc870f5d7351cfc399e23e68f22231fbe.json +++ b/op-chain-ops/crossdomain/testdata/receipts/0x26b854fe0b8f0c5ad15d5c3c1291107cc870f5d7351cfc399e23e68f22231fbe.json @@ -36,7 +36,7 @@ "transactionIndex": "0x0" }, { - "address": "0x4200000000000000000000000000000000000004", + "address": "0x4200000000000000000000000000000000000007", "blockHash": "0x4f5fdc9747712cb61871d6d35618a6580671d5ddb85796c9d0790453509cf4cc", "blockNumber": "0x169900c", "data": "0x00000000000000000000000042000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000001b04d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a41532ec340000000000000000000000009c8f005ab27adb94f3d49020a15722db2fcd9f270000000000000000000000009c8f005ab27adb94f3d49020a15722db2fcd9f2700000000000000000000000000000000000000000000000000232bff5f46c0000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -50,7 +50,7 @@ "transactionIndex": "0x0" }, { - "address": "0x4200000000000000000000000000000000000009", + "address": "0x4200000000000000000000000000000000000010", "blockHash": "0x4f5fdc9747712cb61871d6d35618a6580671d5ddb85796c9d0790453509cf4cc", "blockNumber": "0x169900c", "data": "0x0000000000000000000000009c8f005ab27adb94f3d49020a15722db2fcd9f2700000000000000000000000000000000000000000000000000232bff5f46c00000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", @@ -68,7 +68,7 @@ ], "logsBloom": "0x00000000000000000010000000000000000000000000001000100000001000000000000000000080000000000000008000000800000000000000000000000240000000000000000040000008000000000000000000000000000000004000000100000000020000000000000000000800080000000000000000000010000000000001000000000000000000000000000000800000000000000020000000200000000000000000000001000000000000000000200000000000000000000000000000000002010000000000000400000000000002100000000008000004000020001000000000000000000000000000000100000000000000000000000000000000", "status": "0x1", - "to": "0x4200000000000000000000000000000000000009", + "to": "0x4200000000000000000000000000000000000010", "transactionHash": "0x26b854fe0b8f0c5ad15d5c3c1291107cc870f5d7351cfc399e23e68f22231fbe", "transactionIndex": "0x0" } diff --git a/op-chain-ops/crossdomain/testdata/receipts/0x32d3b5a0178a33cfbf904cfd36f66a13ff8576f409f15aae86dc3ff0e101c93a.json b/op-chain-ops/crossdomain/testdata/receipts/0x32d3b5a0178a33cfbf904cfd36f66a13ff8576f409f15aae86dc3ff0e101c93a.json index b45972f21..7e1bdae36 100644 --- a/op-chain-ops/crossdomain/testdata/receipts/0x32d3b5a0178a33cfbf904cfd36f66a13ff8576f409f15aae86dc3ff0e101c93a.json +++ b/op-chain-ops/crossdomain/testdata/receipts/0x32d3b5a0178a33cfbf904cfd36f66a13ff8576f409f15aae86dc3ff0e101c93a.json @@ -36,7 +36,7 @@ "transactionIndex": "0x0" }, { - "address": "0x4200000000000000000000000000000000000004", + "address": "0x4200000000000000000000000000000000000007", "blockHash": "0x13bf6e592e572c0a021488b6f2d910114be3491fc08a35f2ee2b38063df24abf", "blockNumber": "0x169a45d", "data": "0x00000000000000000000000042000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000001b04f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e4a9f9e6750000000000000000000000007fc66500c84a76ad7e9c93437bfc5ac33e2ddae900000000000000000000000076fb31fb4af56892a25e32cfc43de717950c92780000000000000000000000003178490d60b5cceaa5a79fd4d9050c7405bab80c0000000000000000000000003178490d60b5cceaa5a79fd4d9050c7405bab80c0000000000000000000000000000000000000000000000a3b61828488b11725900000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -50,7 +50,7 @@ "transactionIndex": "0x0" }, { - "address": "0x4200000000000000000000000000000000000009", + "address": "0x4200000000000000000000000000000000000010", "blockHash": "0x13bf6e592e572c0a021488b6f2d910114be3491fc08a35f2ee2b38063df24abf", "blockNumber": "0x169a45d", "data": "0x0000000000000000000000003178490d60b5cceaa5a79fd4d9050c7405bab80c0000000000000000000000000000000000000000000000a3b61828488b11725900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", @@ -68,7 +68,7 @@ ], "logsBloom": "0x00000000000000000010000000000000000000000000001000100000001000000000000000000080000000000000008000000000000000000000040000000000000000000000000040000008000000000000100000000000000000004000000000000000020000000000000000000820080000000000000000000010014000000001000000000000000000000000000000800000000000000004000000200000000000000000000001000000000000000000200000000000000000000000000000000002000000000000000400000000000002100400000008000000000020000000000000000000000010000000000000000000000000002000000000248000", "status": "0x1", - "to": "0x4200000000000000000000000000000000000009", + "to": "0x4200000000000000000000000000000000000010", "transactionHash": "0x32d3b5a0178a33cfbf904cfd36f66a13ff8576f409f15aae86dc3ff0e101c93a", "transactionIndex": "0x0" } diff --git a/op-chain-ops/crossdomain/testdata/receipts/0x38236157c6941ef64f4dd0dfa7efed4a82ef9fccdcdda75a8ee89cbe831b182b.json b/op-chain-ops/crossdomain/testdata/receipts/0x38236157c6941ef64f4dd0dfa7efed4a82ef9fccdcdda75a8ee89cbe831b182b.json index 1f03cb752..dabee33f2 100644 --- a/op-chain-ops/crossdomain/testdata/receipts/0x38236157c6941ef64f4dd0dfa7efed4a82ef9fccdcdda75a8ee89cbe831b182b.json +++ b/op-chain-ops/crossdomain/testdata/receipts/0x38236157c6941ef64f4dd0dfa7efed4a82ef9fccdcdda75a8ee89cbe831b182b.json @@ -22,7 +22,7 @@ "transactionIndex": "0x0" }, { - "address": "0x4200000000000000000000000000000000000004", + "address": "0x4200000000000000000000000000000000000007", "blockHash": "0x1fae89e0362ec677f76f7f3b7693b0dc05de5b5e1c4f34ee9add4339cb6391b6", "blockNumber": "0x16a58e2", "data": "0x000000000000000000000000467194771dae2967aef3ecbedd3bf9a310c76c650000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000001b05e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e4a9f9e6750000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da10000000000000000000000006659612eb0e2464ccadf7a5e851bcd12873f6e040000000000000000000000006659612eb0e2464ccadf7a5e851bcd12873f6e04000000000000000000000000000000000000000000021165458500521280000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", diff --git a/op-chain-ops/crossdomain/testdata/receipts/0xed57a510022157b14542491a501daed1d58003e4b274b331d2fc40dcc43f0941.json b/op-chain-ops/crossdomain/testdata/receipts/0xed57a510022157b14542491a501daed1d58003e4b274b331d2fc40dcc43f0941.json index 5e884517a..1d92d789e 100644 --- a/op-chain-ops/crossdomain/testdata/receipts/0xed57a510022157b14542491a501daed1d58003e4b274b331d2fc40dcc43f0941.json +++ b/op-chain-ops/crossdomain/testdata/receipts/0xed57a510022157b14542491a501daed1d58003e4b274b331d2fc40dcc43f0941.json @@ -22,7 +22,7 @@ "transactionIndex": "0x0" }, { - "address": "0x4200000000000000000000000000000000000004", + "address": "0x4200000000000000000000000000000000000007", "blockHash": "0x8a150d06f327859edb6e45e347105df56e047c690617d784c7aadedd0d426ff9", "blockNumber": "0x1698be0", "data": "0x000000000000000000000000136b1ec699c62b0606854056f02dc7bb80482d630000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000001b04c00000000000000000000000000000000000000000000000000000000002dc6c00000000000000000000000000000000000000000000000000000000000000044f4f7b41a00000000000000000000000090f1cb932dbf94385434c40d53df3727f00e50b10000000000000000000000000000000000000000000001c9f23e7ccc897c65e500000000000000000000000000000000000000000000000000000000", diff --git a/op-chain-ops/crossdomain/testdata/state-diffs/0x26b854fe0b8f0c5ad15d5c3c1291107cc870f5d7351cfc399e23e68f22231fbe.json b/op-chain-ops/crossdomain/testdata/state-diffs/0x26b854fe0b8f0c5ad15d5c3c1291107cc870f5d7351cfc399e23e68f22231fbe.json index 061e510b1..9ea8984c5 100644 --- a/op-chain-ops/crossdomain/testdata/state-diffs/0x26b854fe0b8f0c5ad15d5c3c1291107cc870f5d7351cfc399e23e68f22231fbe.json +++ b/op-chain-ops/crossdomain/testdata/state-diffs/0x26b854fe0b8f0c5ad15d5c3c1291107cc870f5d7351cfc399e23e68f22231fbe.json @@ -7,7 +7,7 @@ "0xd21effe9499bc64d50ca07a52775e216265a2b43768d634d0e93da33d178c1fe": "0x0000000000000000000000000000000000000000000000000000000000000000" } }, - "0x4200000000000000000000000000000000000004": { + "0x4200000000000000000000000000000000000007": { "balance": "0x0", "code": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063a71198691161005b578063a71198691461012a578063b1b1b2091461014a578063cbd4ece91461016d578063ecc704281461018057600080fd5b806321d800ec1461008d5780633dbb202b146100c55780636e296e45146100da57806382e3702d14610107575b600080fd5b6100b061009b366004610826565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100d86100d3366004610942565b610197565b005b6100e26102e2565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100bc565b6100b0610115366004610826565b60026020526000908152604090205460ff1681565b6005546100e29073ffffffffffffffffffffffffffffffffffffffff1681565b6100b0610158366004610826565b60016020526000908152604090205460ff1681565b6100d861017b3660046109ad565b61038b565b61018960035481565b6040519081526020016100bc565b60006101a784338560035461078d565b80516020808301919091206000908152600290915260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fcafa81dc0000000000000000000000000000000000000000000000000000000081529091507342000000000000000000000000000000000000009063cafa81dc9061023c908490600401610a89565b600060405180830381600087803b15801561025657600080fd5b505af115801561026a573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385600354866040516102bc9493929190610aa3565b60405180910390a26001600360008282546102d79190610aef565b909155505050505050565b60045460009073ffffffffffffffffffffffffffffffffffffffff1661dead141561036e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f78446f6d61696e4d65737361676553656e646572206973206e6f74207365740060448201526064015b60405180910390fd5b5060045473ffffffffffffffffffffffffffffffffffffffff1690565b60055473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef330173ffffffffffffffffffffffffffffffffffffffff161461046a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f50726f7669646564206d65737361676520636f756c64206e6f7420626520766560448201527f7269666965642e000000000000000000000000000000000000000000000000006064820152608401610365565b60006104788585858561078d565b8051602080830191909120600081815260019092526040909120549192509060ff1615610527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f50726f7669646564206d6573736167652068617320616c72656164792062656560448201527f6e2072656365697665642e0000000000000000000000000000000000000000006064820152608401610365565b73ffffffffffffffffffffffffffffffffffffffff8616734200000000000000000000000000000000000000141561059957600090815260016020819052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909117905550610787565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff878116919091179091556040516000918816906105f2908790610b2e565b6000604051808303816000865af19150503d806000811461062f576040519150601f19603f3d011682016040523d82523d6000602084013e610634565b606091505b5050600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801515600114156106d557600082815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169092179091555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2610701565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f90600090a25b600083334360405160200161071893929190610b4a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181528151602092830120600090815291829052902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055505050505b50505050565b6060848484846040516024016107a69493929190610b9c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b60006020828403121561083857600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461086357600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126108a857600080fd5b813567ffffffffffffffff808211156108c3576108c3610868565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561090957610909610868565b8160405283815286602085880101111561092257600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060006060848603121561095757600080fd5b6109608461083f565b9250602084013567ffffffffffffffff81111561097c57600080fd5b61098886828701610897565b925050604084013563ffffffff811681146109a257600080fd5b809150509250925092565b600080600080608085870312156109c357600080fd5b6109cc8561083f565b93506109da6020860161083f565b9250604085013567ffffffffffffffff8111156109f657600080fd5b610a0287828801610897565b949793965093946060013593505050565b60005b83811015610a2e578181015183820152602001610a16565b838111156107875750506000910152565b60008151808452610a57816020860160208601610a13565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610a9c6020830184610a3f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff85168152608060208201526000610ad26080830186610a3f565b905083604083015263ffffffff8316606083015295945050505050565b60008219821115610b29577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b60008251610b40818460208701610a13565b9190910192915050565b60008451610b5c818460208901610a13565b60609490941b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001691909301908152601481019190915260340192915050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152610bd56080830185610a3f565b90508260608301529594505050505056fea26469706673582212202e10f5e906e4d6b76a9239c97481d533896c41191186b3ec3ca5feab5203fde664736f6c63430008090033", "nonce": 0, @@ -16,7 +16,7 @@ "0x56cd54638e7c1388997f530b64562a8d4d938866fe3dd082986ff807670ec616": "0x0000000000000000000000000000000000000000000000000000000000000000" } }, - "0x4200000000000000000000000000000000000009": { + "0x4200000000000000000000000000000000000010": { "balance": "0x0", "code": "0x608060405234801561001057600080fd5b50600436106100675760003560e01c80633cb747bf116100505780633cb747bf146100ca578063662a633a146100ea578063a3a79548146100fd57600080fd5b806332b7006d1461006c57806336c717c114610081575b600080fd5b61007f61007a366004610d0f565b610110565b005b6001546100a19073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6000546100a19073ffffffffffffffffffffffffffffffffffffffff1681565b61007f6100f8366004610d80565b610126565b61007f61010b366004610e18565b6106c1565b61011f853333878787876106d8565b5050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1661015e60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4f564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e7469636174656400000000000000000000000000000000000060648201526084015b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661025360005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b815260040160206040518083038186803b15801561029857600080fd5b505afa1580156102ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d09190610e9b565b73ffffffffffffffffffffffffffffffffffffffff1614610373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4f564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d657373616765000000000000000000000000000000006064820152608401610214565b61039d877f1d1d8b6300000000000000000000000000000000000000000000000000000000610a32565b801561045357508673ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156103ec57600080fd5b505af1158015610400573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104249190610e9b565b73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16145b15610567576040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528816906340c10f1990604401600060405180830381600087803b1580156104c857600080fd5b505af11580156104dc573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd898888888860405161055a9493929190610f08565b60405180910390a46106b7565b600063a9f9e67560e01b8989888a89898960405160240161058e9796959493929190610f3e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001549091506106339073ffffffffffffffffffffffffffffffffffffffff16600083610a57565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167f7ea89a4591614515571c2b51f5ea06494056f261c10ab1ed8c03c7590d87bce0898989896040516106ad9493929190610f08565b60405180910390a4505b5050505050505050565b6106d0863387878787876106d8565b505050505050565b6040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff881690639dc29fac90604401600060405180830381600087803b15801561074657600080fd5b505af115801561075a573d6000803e3d6000fd5b5050505060008773ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156107a857600080fd5b505af11580156107bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e09190610e9b565b9050606073ffffffffffffffffffffffffffffffffffffffff891673deaddeaddeaddeaddeaddeaddeaddeaddead000014156108d5576040517f1532ec340000000000000000000000000000000000000000000000000000000090610851908a908a908a9089908990602401610f9b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050610994565b6040517fa9f9e67500000000000000000000000000000000000000000000000000000000906109149084908c908c908c908c908b908b90602401610f3e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b6001546109b89073ffffffffffffffffffffffffffffffffffffffff168683610a57565b3373ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e8a8a89896040516106ad9493929190610f08565b6000610a3d83610ae8565b8015610a4e5750610a4e8383610b4c565b90505b92915050565b6000546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633dbb202b90610ab190869085908790600401611016565b600060405180830381600087803b158015610acb57600080fd5b505af1158015610adf573d6000803e3d6000fd5b50505050505050565b6000610b14827f01ffc9a700000000000000000000000000000000000000000000000000000000610b4c565b8015610a515750610b45827fffffffff00000000000000000000000000000000000000000000000000000000610b4c565b1592915050565b604080517fffffffff00000000000000000000000000000000000000000000000000000000831660248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a7000000000000000000000000000000000000000000000000000000001790529051600091908290819073ffffffffffffffffffffffffffffffffffffffff87169061753090610c06908690611092565b6000604051808303818686fa925050503d8060008114610c42576040519150601f19603f3d011682016040523d82523d6000602084013e610c47565b606091505b5091509150602081511015610c625760009350505050610a51565b818015610c7e575080806020019051810190610c7e91906110ae565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610caa57600080fd5b50565b803563ffffffff81168114610cc157600080fd5b919050565b60008083601f840112610cd857600080fd5b50813567ffffffffffffffff811115610cf057600080fd5b602083019150836020828501011115610d0857600080fd5b9250929050565b600080600080600060808688031215610d2757600080fd5b8535610d3281610c88565b945060208601359350610d4760408701610cad565b9250606086013567ffffffffffffffff811115610d6357600080fd5b610d6f88828901610cc6565b969995985093965092949392505050565b600080600080600080600060c0888a031215610d9b57600080fd5b8735610da681610c88565b96506020880135610db681610c88565b95506040880135610dc681610c88565b94506060880135610dd681610c88565b93506080880135925060a088013567ffffffffffffffff811115610df957600080fd5b610e058a828b01610cc6565b989b979a50959850939692959293505050565b60008060008060008060a08789031215610e3157600080fd5b8635610e3c81610c88565b95506020870135610e4c81610c88565b945060408701359350610e6160608801610cad565b9250608087013567ffffffffffffffff811115610e7d57600080fd5b610e8989828a01610cc6565b979a9699509497509295939492505050565b600060208284031215610ead57600080fd5b8151610eb881610c88565b9392505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000610c7e606083018486610ebf565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a0830152610f8e60c083018486610ebf565b9998505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015260806060830152610fdb608083018486610ebf565b979650505050505050565b60005b83811015611001578181015183820152602001610fe9565b83811115611010576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260008351806060840152611051816080850160208801610fe6565b63ffffffff93909316604083015250601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160160800192915050565b600082516110a4818460208701610fe6565b9190910192915050565b6000602082840312156110c057600080fd5b81518015158114610eb857600080fdfea264697066735822122038e8e2f2aaba8e45262542b2bfcd3b0c7b236b5eb945f0c4380d3b5f4028f11164736f6c63430008090033", "nonce": 0, diff --git a/op-chain-ops/crossdomain/testdata/state-diffs/0x32d3b5a0178a33cfbf904cfd36f66a13ff8576f409f15aae86dc3ff0e101c93a.json b/op-chain-ops/crossdomain/testdata/state-diffs/0x32d3b5a0178a33cfbf904cfd36f66a13ff8576f409f15aae86dc3ff0e101c93a.json index 44fcf9dbb..cd3fb6cc2 100644 --- a/op-chain-ops/crossdomain/testdata/state-diffs/0x32d3b5a0178a33cfbf904cfd36f66a13ff8576f409f15aae86dc3ff0e101c93a.json +++ b/op-chain-ops/crossdomain/testdata/state-diffs/0x32d3b5a0178a33cfbf904cfd36f66a13ff8576f409f15aae86dc3ff0e101c93a.json @@ -13,7 +13,7 @@ "0xb6ad38a27f840d6bba487f3e259a8cfb2e32abd98d88beacb84ab9418a2f308e": "0x0000000000000000000000000000000000000000000000000000000000000000" } }, - "0x4200000000000000000000000000000000000004": { + "0x4200000000000000000000000000000000000007": { "balance": "0x0", "code": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063a71198691161005b578063a71198691461012a578063b1b1b2091461014a578063cbd4ece91461016d578063ecc704281461018057600080fd5b806321d800ec1461008d5780633dbb202b146100c55780636e296e45146100da57806382e3702d14610107575b600080fd5b6100b061009b366004610826565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100d86100d3366004610942565b610197565b005b6100e26102e2565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100bc565b6100b0610115366004610826565b60026020526000908152604090205460ff1681565b6005546100e29073ffffffffffffffffffffffffffffffffffffffff1681565b6100b0610158366004610826565b60016020526000908152604090205460ff1681565b6100d861017b3660046109ad565b61038b565b61018960035481565b6040519081526020016100bc565b60006101a784338560035461078d565b80516020808301919091206000908152600290915260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fcafa81dc0000000000000000000000000000000000000000000000000000000081529091507342000000000000000000000000000000000000009063cafa81dc9061023c908490600401610a89565b600060405180830381600087803b15801561025657600080fd5b505af115801561026a573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385600354866040516102bc9493929190610aa3565b60405180910390a26001600360008282546102d79190610aef565b909155505050505050565b60045460009073ffffffffffffffffffffffffffffffffffffffff1661dead141561036e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f78446f6d61696e4d65737361676553656e646572206973206e6f74207365740060448201526064015b60405180910390fd5b5060045473ffffffffffffffffffffffffffffffffffffffff1690565b60055473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef330173ffffffffffffffffffffffffffffffffffffffff161461046a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f50726f7669646564206d65737361676520636f756c64206e6f7420626520766560448201527f7269666965642e000000000000000000000000000000000000000000000000006064820152608401610365565b60006104788585858561078d565b8051602080830191909120600081815260019092526040909120549192509060ff1615610527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f50726f7669646564206d6573736167652068617320616c72656164792062656560448201527f6e2072656365697665642e0000000000000000000000000000000000000000006064820152608401610365565b73ffffffffffffffffffffffffffffffffffffffff8616734200000000000000000000000000000000000000141561059957600090815260016020819052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909117905550610787565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff878116919091179091556040516000918816906105f2908790610b2e565b6000604051808303816000865af19150503d806000811461062f576040519150601f19603f3d011682016040523d82523d6000602084013e610634565b606091505b5050600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801515600114156106d557600082815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169092179091555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2610701565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f90600090a25b600083334360405160200161071893929190610b4a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181528151602092830120600090815291829052902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055505050505b50505050565b6060848484846040516024016107a69493929190610b9c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b60006020828403121561083857600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461086357600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126108a857600080fd5b813567ffffffffffffffff808211156108c3576108c3610868565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561090957610909610868565b8160405283815286602085880101111561092257600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060006060848603121561095757600080fd5b6109608461083f565b9250602084013567ffffffffffffffff81111561097c57600080fd5b61098886828701610897565b925050604084013563ffffffff811681146109a257600080fd5b809150509250925092565b600080600080608085870312156109c357600080fd5b6109cc8561083f565b93506109da6020860161083f565b9250604085013567ffffffffffffffff8111156109f657600080fd5b610a0287828801610897565b949793965093946060013593505050565b60005b83811015610a2e578181015183820152602001610a16565b838111156107875750506000910152565b60008151808452610a57816020860160208601610a13565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610a9c6020830184610a3f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff85168152608060208201526000610ad26080830186610a3f565b905083604083015263ffffffff8316606083015295945050505050565b60008219821115610b29577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b60008251610b40818460208701610a13565b9190910192915050565b60008451610b5c818460208901610a13565b60609490941b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001691909301908152601481019190915260340192915050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152610bd56080830185610a3f565b90508260608301529594505050505056fea26469706673582212202e10f5e906e4d6b76a9239c97481d533896c41191186b3ec3ca5feab5203fde664736f6c63430008090033", "nonce": 0, @@ -22,7 +22,7 @@ "0x3322d05c07eafa912f11b56def40a67135198db85f5721bf3a549270c99900f3": "0x0000000000000000000000000000000000000000000000000000000000000000" } }, - "0x4200000000000000000000000000000000000009": { + "0x4200000000000000000000000000000000000010": { "balance": "0x0", "code": "0x608060405234801561001057600080fd5b50600436106100675760003560e01c80633cb747bf116100505780633cb747bf146100ca578063662a633a146100ea578063a3a79548146100fd57600080fd5b806332b7006d1461006c57806336c717c114610081575b600080fd5b61007f61007a366004610d0f565b610110565b005b6001546100a19073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6000546100a19073ffffffffffffffffffffffffffffffffffffffff1681565b61007f6100f8366004610d80565b610126565b61007f61010b366004610e18565b6106c1565b61011f853333878787876106d8565b5050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1661015e60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4f564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e7469636174656400000000000000000000000000000000000060648201526084015b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661025360005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b815260040160206040518083038186803b15801561029857600080fd5b505afa1580156102ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d09190610e9b565b73ffffffffffffffffffffffffffffffffffffffff1614610373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4f564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d657373616765000000000000000000000000000000006064820152608401610214565b61039d877f1d1d8b6300000000000000000000000000000000000000000000000000000000610a32565b801561045357508673ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156103ec57600080fd5b505af1158015610400573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104249190610e9b565b73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16145b15610567576040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528816906340c10f1990604401600060405180830381600087803b1580156104c857600080fd5b505af11580156104dc573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd898888888860405161055a9493929190610f08565b60405180910390a46106b7565b600063a9f9e67560e01b8989888a89898960405160240161058e9796959493929190610f3e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001549091506106339073ffffffffffffffffffffffffffffffffffffffff16600083610a57565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167f7ea89a4591614515571c2b51f5ea06494056f261c10ab1ed8c03c7590d87bce0898989896040516106ad9493929190610f08565b60405180910390a4505b5050505050505050565b6106d0863387878787876106d8565b505050505050565b6040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff881690639dc29fac90604401600060405180830381600087803b15801561074657600080fd5b505af115801561075a573d6000803e3d6000fd5b5050505060008773ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156107a857600080fd5b505af11580156107bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e09190610e9b565b9050606073ffffffffffffffffffffffffffffffffffffffff891673deaddeaddeaddeaddeaddeaddeaddeaddead000014156108d5576040517f1532ec340000000000000000000000000000000000000000000000000000000090610851908a908a908a9089908990602401610f9b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050610994565b6040517fa9f9e67500000000000000000000000000000000000000000000000000000000906109149084908c908c908c908c908b908b90602401610f3e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b6001546109b89073ffffffffffffffffffffffffffffffffffffffff168683610a57565b3373ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e8a8a89896040516106ad9493929190610f08565b6000610a3d83610ae8565b8015610a4e5750610a4e8383610b4c565b90505b92915050565b6000546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633dbb202b90610ab190869085908790600401611016565b600060405180830381600087803b158015610acb57600080fd5b505af1158015610adf573d6000803e3d6000fd5b50505050505050565b6000610b14827f01ffc9a700000000000000000000000000000000000000000000000000000000610b4c565b8015610a515750610b45827fffffffff00000000000000000000000000000000000000000000000000000000610b4c565b1592915050565b604080517fffffffff00000000000000000000000000000000000000000000000000000000831660248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a7000000000000000000000000000000000000000000000000000000001790529051600091908290819073ffffffffffffffffffffffffffffffffffffffff87169061753090610c06908690611092565b6000604051808303818686fa925050503d8060008114610c42576040519150601f19603f3d011682016040523d82523d6000602084013e610c47565b606091505b5091509150602081511015610c625760009350505050610a51565b818015610c7e575080806020019051810190610c7e91906110ae565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610caa57600080fd5b50565b803563ffffffff81168114610cc157600080fd5b919050565b60008083601f840112610cd857600080fd5b50813567ffffffffffffffff811115610cf057600080fd5b602083019150836020828501011115610d0857600080fd5b9250929050565b600080600080600060808688031215610d2757600080fd5b8535610d3281610c88565b945060208601359350610d4760408701610cad565b9250606086013567ffffffffffffffff811115610d6357600080fd5b610d6f88828901610cc6565b969995985093965092949392505050565b600080600080600080600060c0888a031215610d9b57600080fd5b8735610da681610c88565b96506020880135610db681610c88565b95506040880135610dc681610c88565b94506060880135610dd681610c88565b93506080880135925060a088013567ffffffffffffffff811115610df957600080fd5b610e058a828b01610cc6565b989b979a50959850939692959293505050565b60008060008060008060a08789031215610e3157600080fd5b8635610e3c81610c88565b95506020870135610e4c81610c88565b945060408701359350610e6160608801610cad565b9250608087013567ffffffffffffffff811115610e7d57600080fd5b610e8989828a01610cc6565b979a9699509497509295939492505050565b600060208284031215610ead57600080fd5b8151610eb881610c88565b9392505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000610c7e606083018486610ebf565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a0830152610f8e60c083018486610ebf565b9998505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015260806060830152610fdb608083018486610ebf565b979650505050505050565b60005b83811015611001578181015183820152602001610fe9565b83811115611010576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260008351806060840152611051816080850160208801610fe6565b63ffffffff93909316604083015250601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160160800192915050565b600082516110a4818460208701610fe6565b9190910192915050565b6000602082840312156110c057600080fd5b81518015158114610eb857600080fdfea264697066735822122038e8e2f2aaba8e45262542b2bfcd3b0c7b236b5eb945f0c4380d3b5f4028f11164736f6c63430008090033", "nonce": 0, diff --git a/op-chain-ops/crossdomain/testdata/state-diffs/0x38236157c6941ef64f4dd0dfa7efed4a82ef9fccdcdda75a8ee89cbe831b182b.json b/op-chain-ops/crossdomain/testdata/state-diffs/0x38236157c6941ef64f4dd0dfa7efed4a82ef9fccdcdda75a8ee89cbe831b182b.json index bd8a8ca6e..f32a0dcdf 100644 --- a/op-chain-ops/crossdomain/testdata/state-diffs/0x38236157c6941ef64f4dd0dfa7efed4a82ef9fccdcdda75a8ee89cbe831b182b.json +++ b/op-chain-ops/crossdomain/testdata/state-diffs/0x38236157c6941ef64f4dd0dfa7efed4a82ef9fccdcdda75a8ee89cbe831b182b.json @@ -7,7 +7,7 @@ "0xc32253d1d1c74c419f0e9cc13cf38144381fbc9374b0b8cd31f260009e851a74": "0x0000000000000000000000000000000000000000000000000000000000000000" } }, - "0x4200000000000000000000000000000000000004": { + "0x4200000000000000000000000000000000000007": { "balance": "0x0", "code": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063a71198691161005b578063a71198691461012a578063b1b1b2091461014a578063cbd4ece91461016d578063ecc704281461018057600080fd5b806321d800ec1461008d5780633dbb202b146100c55780636e296e45146100da57806382e3702d14610107575b600080fd5b6100b061009b366004610826565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100d86100d3366004610942565b610197565b005b6100e26102e2565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100bc565b6100b0610115366004610826565b60026020526000908152604090205460ff1681565b6005546100e29073ffffffffffffffffffffffffffffffffffffffff1681565b6100b0610158366004610826565b60016020526000908152604090205460ff1681565b6100d861017b3660046109ad565b61038b565b61018960035481565b6040519081526020016100bc565b60006101a784338560035461078d565b80516020808301919091206000908152600290915260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fcafa81dc0000000000000000000000000000000000000000000000000000000081529091507342000000000000000000000000000000000000009063cafa81dc9061023c908490600401610a89565b600060405180830381600087803b15801561025657600080fd5b505af115801561026a573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385600354866040516102bc9493929190610aa3565b60405180910390a26001600360008282546102d79190610aef565b909155505050505050565b60045460009073ffffffffffffffffffffffffffffffffffffffff1661dead141561036e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f78446f6d61696e4d65737361676553656e646572206973206e6f74207365740060448201526064015b60405180910390fd5b5060045473ffffffffffffffffffffffffffffffffffffffff1690565b60055473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef330173ffffffffffffffffffffffffffffffffffffffff161461046a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f50726f7669646564206d65737361676520636f756c64206e6f7420626520766560448201527f7269666965642e000000000000000000000000000000000000000000000000006064820152608401610365565b60006104788585858561078d565b8051602080830191909120600081815260019092526040909120549192509060ff1615610527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f50726f7669646564206d6573736167652068617320616c72656164792062656560448201527f6e2072656365697665642e0000000000000000000000000000000000000000006064820152608401610365565b73ffffffffffffffffffffffffffffffffffffffff8616734200000000000000000000000000000000000000141561059957600090815260016020819052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909117905550610787565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff878116919091179091556040516000918816906105f2908790610b2e565b6000604051808303816000865af19150503d806000811461062f576040519150601f19603f3d011682016040523d82523d6000602084013e610634565b606091505b5050600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801515600114156106d557600082815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169092179091555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2610701565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f90600090a25b600083334360405160200161071893929190610b4a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181528151602092830120600090815291829052902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055505050505b50505050565b6060848484846040516024016107a69493929190610b9c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b60006020828403121561083857600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461086357600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126108a857600080fd5b813567ffffffffffffffff808211156108c3576108c3610868565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561090957610909610868565b8160405283815286602085880101111561092257600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060006060848603121561095757600080fd5b6109608461083f565b9250602084013567ffffffffffffffff81111561097c57600080fd5b61098886828701610897565b925050604084013563ffffffff811681146109a257600080fd5b809150509250925092565b600080600080608085870312156109c357600080fd5b6109cc8561083f565b93506109da6020860161083f565b9250604085013567ffffffffffffffff8111156109f657600080fd5b610a0287828801610897565b949793965093946060013593505050565b60005b83811015610a2e578181015183820152602001610a16565b838111156107875750506000910152565b60008151808452610a57816020860160208601610a13565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610a9c6020830184610a3f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff85168152608060208201526000610ad26080830186610a3f565b905083604083015263ffffffff8316606083015295945050505050565b60008219821115610b29577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b60008251610b40818460208701610a13565b9190910192915050565b60008451610b5c818460208901610a13565b60609490941b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001691909301908152601481019190915260340192915050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152610bd56080830185610a3f565b90508260608301529594505050505056fea26469706673582212202e10f5e906e4d6b76a9239c97481d533896c41191186b3ec3ca5feab5203fde664736f6c63430008090033", "nonce": 0, diff --git a/op-chain-ops/crossdomain/testdata/state-diffs/0xed57a510022157b14542491a501daed1d58003e4b274b331d2fc40dcc43f0941.json b/op-chain-ops/crossdomain/testdata/state-diffs/0xed57a510022157b14542491a501daed1d58003e4b274b331d2fc40dcc43f0941.json index 3eced72b0..d7200127a 100644 --- a/op-chain-ops/crossdomain/testdata/state-diffs/0xed57a510022157b14542491a501daed1d58003e4b274b331d2fc40dcc43f0941.json +++ b/op-chain-ops/crossdomain/testdata/state-diffs/0xed57a510022157b14542491a501daed1d58003e4b274b331d2fc40dcc43f0941.json @@ -59,7 +59,7 @@ "0xd17ff301622dba618269df506fbc2f7dc6efff195c68d8279d33502f0943572b": "0x0000000000000000000000000000000000000000000000000000000000000000" } }, - "0x4200000000000000000000000000000000000004": { + "0x4200000000000000000000000000000000000007": { "balance": "0x0", "code": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063a71198691161005b578063a71198691461012a578063b1b1b2091461014a578063cbd4ece91461016d578063ecc704281461018057600080fd5b806321d800ec1461008d5780633dbb202b146100c55780636e296e45146100da57806382e3702d14610107575b600080fd5b6100b061009b366004610826565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100d86100d3366004610942565b610197565b005b6100e26102e2565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100bc565b6100b0610115366004610826565b60026020526000908152604090205460ff1681565b6005546100e29073ffffffffffffffffffffffffffffffffffffffff1681565b6100b0610158366004610826565b60016020526000908152604090205460ff1681565b6100d861017b3660046109ad565b61038b565b61018960035481565b6040519081526020016100bc565b60006101a784338560035461078d565b80516020808301919091206000908152600290915260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fcafa81dc0000000000000000000000000000000000000000000000000000000081529091507342000000000000000000000000000000000000009063cafa81dc9061023c908490600401610a89565b600060405180830381600087803b15801561025657600080fd5b505af115801561026a573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385600354866040516102bc9493929190610aa3565b60405180910390a26001600360008282546102d79190610aef565b909155505050505050565b60045460009073ffffffffffffffffffffffffffffffffffffffff1661dead141561036e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f78446f6d61696e4d65737361676553656e646572206973206e6f74207365740060448201526064015b60405180910390fd5b5060045473ffffffffffffffffffffffffffffffffffffffff1690565b60055473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef330173ffffffffffffffffffffffffffffffffffffffff161461046a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f50726f7669646564206d65737361676520636f756c64206e6f7420626520766560448201527f7269666965642e000000000000000000000000000000000000000000000000006064820152608401610365565b60006104788585858561078d565b8051602080830191909120600081815260019092526040909120549192509060ff1615610527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f50726f7669646564206d6573736167652068617320616c72656164792062656560448201527f6e2072656365697665642e0000000000000000000000000000000000000000006064820152608401610365565b73ffffffffffffffffffffffffffffffffffffffff8616734200000000000000000000000000000000000000141561059957600090815260016020819052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909117905550610787565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff878116919091179091556040516000918816906105f2908790610b2e565b6000604051808303816000865af19150503d806000811461062f576040519150601f19603f3d011682016040523d82523d6000602084013e610634565b606091505b5050600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801515600114156106d557600082815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169092179091555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2610701565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f90600090a25b600083334360405160200161071893929190610b4a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181528151602092830120600090815291829052902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055505050505b50505050565b6060848484846040516024016107a69493929190610b9c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b60006020828403121561083857600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461086357600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126108a857600080fd5b813567ffffffffffffffff808211156108c3576108c3610868565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561090957610909610868565b8160405283815286602085880101111561092257600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060006060848603121561095757600080fd5b6109608461083f565b9250602084013567ffffffffffffffff81111561097c57600080fd5b61098886828701610897565b925050604084013563ffffffff811681146109a257600080fd5b809150509250925092565b600080600080608085870312156109c357600080fd5b6109cc8561083f565b93506109da6020860161083f565b9250604085013567ffffffffffffffff8111156109f657600080fd5b610a0287828801610897565b949793965093946060013593505050565b60005b83811015610a2e578181015183820152602001610a16565b838111156107875750506000910152565b60008151808452610a57816020860160208601610a13565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610a9c6020830184610a3f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff85168152608060208201526000610ad26080830186610a3f565b905083604083015263ffffffff8316606083015295945050505050565b60008219821115610b29577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b60008251610b40818460208701610a13565b9190910192915050565b60008451610b5c818460208901610a13565b60609490941b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001691909301908152601481019190915260340192915050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152610bd56080830185610a3f565b90508260608301529594505050505056fea26469706673582212202e10f5e906e4d6b76a9239c97481d533896c41191186b3ec3ca5feab5203fde664736f6c63430008090033", "nonce": 0, diff --git a/op-chain-ops/crossdomain/testdata/witness.txt b/op-chain-ops/crossdomain/testdata/witness.txt new file mode 100644 index 000000000..1c8fad750 --- /dev/null +++ b/op-chain-ops/crossdomain/testdata/witness.txt @@ -0,0 +1,3 @@ +MSG|0x4200000000000000000000000000000000000007|cafa81dc000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001a4cbd4ece900000000000000000000000099c9fc46f92e8a1c0dec1b1747d010903e884be1000000000000000000000000420000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000019bd000000000000000000000000000000000000000000000000000000000000000e4a9f9e675000000000000000000000000d533a949740bb3306d119cc777fa900ba034cd520000000000000000000000000994206dfe8de6ec6920ff4d779b0d950605fb53000000000000000000000000e3a44dd2a8c108be56a78635121ec914074da16d000000000000000000000000e3a44dd2a8c108be56a78635121ec914074da16d0000000000000000000000000000000000000000000001b0ac98ab3858d7547800000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +MSG|0x8B1d477410344785ff1DF52500032E6D5f532EE4|cafa81dc000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000030420690000000000000000000000000000000000000000000000000000000000 +ETH|0x6340d44c5174588B312F545eEC4a42f8a514eF50 diff --git a/op-chain-ops/crossdomain/types.go b/op-chain-ops/crossdomain/types.go index c175f27fd..82f850956 100644 --- a/op-chain-ops/crossdomain/types.go +++ b/op-chain-ops/crossdomain/types.go @@ -13,7 +13,8 @@ var ( Bytes32Type, _ = abi.NewType("bytes32", "", nil) ) -// WithdrawalMessage represents a Withdrawal. +// WithdrawalMessage represents a Withdrawal. The Withdrawal +// and LegacyWithdrawal types must implement this interface. type WithdrawalMessage interface { Encode() ([]byte, error) Decode([]byte) error diff --git a/op-chain-ops/crossdomain/withdrawal.go b/op-chain-ops/crossdomain/withdrawal.go index c05793a37..bd7358768 100644 --- a/op-chain-ops/crossdomain/withdrawal.go +++ b/op-chain-ops/crossdomain/withdrawal.go @@ -13,14 +13,12 @@ import ( ) var ( - SentMessageEventABI = "SentMessage(address,address,bytes,uint256)" - SentMessageEventABIHash = crypto.Keccak256Hash([]byte(SentMessageEventABI)) - // [Kroma: START] - //SentMessageExtension1EventABI = "SentMessage(address,uint256)" - //SentMessageExtension1EventABIHash = crypto.Keccak256Hash([]byte(SentMessageExtension1EventABI)) - // [Kroma: END] - MessagePassedEventABI = "MessagePassed(uint256,address,address,uint256,uint256,bytes,bytes32)" - MessagePassedEventABIHash = crypto.Keccak256Hash([]byte(MessagePassedEventABI)) + SentMessageEventABI = "SentMessage(address,address,bytes,uint256)" + SentMessageEventABIHash = crypto.Keccak256Hash([]byte(SentMessageEventABI)) + SentMessageExtension1EventABI = "SentMessage(address,uint256)" + SentMessageExtension1EventABIHash = crypto.Keccak256Hash([]byte(SentMessageExtension1EventABI)) + MessagePassedEventABI = "MessagePassed(uint256,address,address,uint256,uint256,bytes,bytes32)" + MessagePassedEventABIHash = crypto.Keccak256Hash([]byte(MessagePassedEventABI)) ) var _ WithdrawalMessage = (*Withdrawal)(nil) diff --git a/op-chain-ops/deployer/deployer.go b/op-chain-ops/deployer/deployer.go index 5ab887295..79ac040ea 100644 --- a/op-chain-ops/deployer/deployer.go +++ b/op-chain-ops/deployer/deployer.go @@ -40,11 +40,19 @@ type Deployment struct { type Deployer func(*backends.SimulatedBackend, *bind.TransactOpts, Constructor) (*types.Transaction, error) -func NewBackend(zktrie bool) *backends.SimulatedBackend { - return NewBackendWithGenesisTimestamp(0, zktrie) +// NewL1Backend returns a SimulatedBackend suitable for L1. It has +// the latest L1 hardforks enabled. +func NewL1Backend() *backends.SimulatedBackend { + return NewBackendWithGenesisTimestamp(0, true) } -func NewBackendWithGenesisTimestamp(ts uint64, zktrie bool) *backends.SimulatedBackend { +// NewL2Backend returns a SimulatedBackend suitable for L2. +// It has the latest L2 hardforks enabled. +func NewL2Backend() *backends.SimulatedBackend { + return NewBackendWithGenesisTimestamp(0, false) +} + +func NewBackendWithGenesisTimestamp(ts uint64, shanghai bool) *backends.SimulatedBackend { chainConfig := params.ChainConfig{ ChainID: ChainID, HomesteadBlock: big.NewInt(0), @@ -68,7 +76,10 @@ func NewBackendWithGenesisTimestamp(ts uint64, zktrie bool) *backends.SimulatedB MergeNetsplitBlock: big.NewInt(0), TerminalTotalDifficulty: big.NewInt(0), TerminalTotalDifficultyPassed: true, - Zktrie: zktrie, + } + + if shanghai { + chainConfig.ShanghaiTime = u64ptr(0) } return backends.NewSimulatedBackendWithOpts( @@ -133,3 +144,7 @@ func Deploy(backend *backends.SimulatedBackend, constructors []Constructor, cb D return results, nil } + +func u64ptr(n uint64) *uint64 { + return &n +} diff --git a/op-chain-ops/genesis/config_test.go b/op-chain-ops/genesis/config_test.go deleted file mode 100644 index 6f19d8daf..000000000 --- a/op-chain-ops/genesis/config_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package genesis - -import ( - "bytes" - "encoding/json" - "fmt" - "os" - "testing" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/rpc" - "github.com/stretchr/testify/require" -) - -func TestConfigMarshalUnmarshal(t *testing.T) { - b, err := os.ReadFile("testdata/test-deploy-config-full.json") - require.NoError(t, err) - - dec := json.NewDecoder(bytes.NewReader(b)) - decoded := new(DeployConfig) - require.NoError(t, dec.Decode(decoded)) - encoded, err := json.MarshalIndent(decoded, "", " ") - require.NoError(t, err) - require.JSONEq(t, string(b), string(encoded)) -} - -func TestUnmarshalL1StartingBlockTag(t *testing.T) { - decoded := new(DeployConfig) - require.NoError(t, json.Unmarshal([]byte(`{"l1StartingBlockTag": "earliest"}`), decoded)) - require.EqualValues(t, rpc.EarliestBlockNumber, *decoded.L1StartingBlockTag.BlockNumber) - h := "0x86c7263d87140ca7cd9bf1bc9e95a435a7a0efc0ae2afaf64920c5b59a6393d4" - require.NoError(t, json.Unmarshal([]byte(fmt.Sprintf(`{"l1StartingBlockTag": "%s"}`, h)), decoded)) - require.EqualValues(t, common.HexToHash(h), *decoded.L1StartingBlockTag.BlockHash) -} diff --git a/op-chain-ops/genesis/layer_one.go b/op-chain-ops/genesis/layer_one.go deleted file mode 100644 index e53012237..000000000 --- a/op-chain-ops/genesis/layer_one.go +++ /dev/null @@ -1,750 +0,0 @@ -package genesis - -import ( - "context" - "errors" - "fmt" - "math/big" - "strings" - - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/params" - "github.com/ethereum/go-ethereum/rlp" - "github.com/ethereum/go-ethereum/trie" - - "github.com/ethereum-optimism/optimism/op-bindings/bindings" - "github.com/ethereum-optimism/optimism/op-bindings/predeploys" - "github.com/ethereum-optimism/optimism/op-chain-ops/deployer" - "github.com/ethereum-optimism/optimism/op-chain-ops/state" -) - -var ( - // proxies represents the set of proxies in front of contracts. - proxies = []string{ - "SystemConfigProxy", - "ValidatorPoolProxy", - "L2OutputOracleProxy", - "L1CrossDomainMessengerProxy", - "L1StandardBridgeProxy", - "KromaPortalProxy", - "KromaMintableERC20FactoryProxy", - "ZKVerifierProxy", - "ColosseumProxy", - "SecurityCouncilTokenProxy", - "TimeLockProxy", - "UpgradeGovernorProxy", - "SecurityCouncilProxy", - } - // portalMeteringSlot is the storage slot containing the metering params. - portalMeteringSlot = common.Hash{31: 0x01} - // zeroHash represents the zero value for a hash. - zeroHash = common.Hash{} - // uint128Max is type(uint128).max and is set in the init function. - uint128Max = new(big.Int) - // The default values for the ResourceConfig, used as part of - // an EIP-1559 curve for deposit gas. - DefaultResourceConfig = bindings.ResourceMeteringResourceConfig{ - MaxResourceLimit: 20_000_000, - ElasticityMultiplier: 10, - BaseFeeMaxChangeDenominator: 8, - MinimumBaseFee: params.GWei, - SystemTxMaxGas: 1_000_000, - } -) - -func init() { - var ok bool - uint128Max, ok = new(big.Int).SetString("ffffffffffffffffffffffffffffffff", 16) - if !ok { - panic("bad uint128Max") - } - // Set the maximum base fee on the default config. - DefaultResourceConfig.MaximumBaseFee = uint128Max -} - -// BuildL1DeveloperGenesis will create a L1 genesis block after creating -// all of the state required for a Kroma network to function. -func BuildL1DeveloperGenesis(config *DeployConfig) (*core.Genesis, error) { - log.Info("Building developer L1 genesis block") - if config.L2OutputOracleStartingTimestamp != -1 { - return nil, errors.New("l2oo starting timestamp must be -1") - } - - if config.L1GenesisBlockTimestamp == 0 { - return nil, errors.New("must specify l1 genesis block timestamp") - } - - genesis, err := NewL1Genesis(config) - if err != nil { - return nil, fmt.Errorf("cannot create L1 developer genesis: %w", err) - } - - backend := deployer.NewBackendWithGenesisTimestamp(uint64(config.L1GenesisBlockTimestamp), false) - - deployments, err := deployL1Contracts(config, backend) - if err != nil { - return nil, err - } - - depsByName := make(map[string]deployer.Deployment) - depsByAddr := make(map[common.Address]deployer.Deployment) - for _, dep := range deployments { - depsByName[dep.Name] = dep - depsByAddr[dep.Address] = dep - } - - opts, err := bind.NewKeyedTransactorWithChainID(deployer.TestKey, deployer.ChainID) - if err != nil { - return nil, err - } - - portalABI, err := bindings.KromaPortalMetaData.GetAbi() - if err != nil { - return nil, err - } - // Initialize the KromaPortal without being paused - data, err := portalABI.Pack("initialize", false) - if err != nil { - return nil, fmt.Errorf("cannot abi encode initialize for KromaPortal: %w", err) - } - if _, err := upgradeProxy( - backend, - opts, - depsByName["KromaPortalProxy"].Address, - depsByName["KromaPortal"].Address, - data, - ); err != nil { - return nil, fmt.Errorf("cannot upgrade KromaPortalProxy: %w", err) - } - - sysCfgABI, err := bindings.SystemConfigMetaData.GetAbi() - if err != nil { - return nil, err - } - gasLimit := uint64(config.L2GenesisBlockGasLimit) - if gasLimit == 0 { - gasLimit = DefaultGasLimit - } - - data, err = sysCfgABI.Pack( - "initialize", - config.ProxyAdminOwner, - uint642Big(config.GasPriceOracleOverhead), - uint642Big(config.GasPriceOracleScalar), - config.BatchSenderAddress.Hash(), - gasLimit, - config.P2PSequencerAddress, - DefaultResourceConfig, - uint642Big(config.ValidatorRewardScalar), - ) - if err != nil { - return nil, fmt.Errorf("cannot abi encode initialize for SystemConfig: %w", err) - } - if _, err := upgradeProxy( - backend, - opts, - depsByName["SystemConfigProxy"].Address, - depsByName["SystemConfig"].Address, - data, - ); err != nil { - return nil, fmt.Errorf("cannot upgrade SystemConfigProxy: %w", err) - } - - valPoolABI, err := bindings.ValidatorPoolMetaData.GetAbi() - if err != nil { - return nil, err - } - data, err = valPoolABI.Pack("initialize") - if err != nil { - return nil, fmt.Errorf("cannot abi encode initialize for ValidatorPool: %w", err) - } - if _, err := upgradeProxy( - backend, - opts, - depsByName["ValidatorPoolProxy"].Address, - depsByName["ValidatorPool"].Address, - data, - ); err != nil { - return nil, err - } - - l2ooABI, err := bindings.L2OutputOracleMetaData.GetAbi() - if err != nil { - return nil, err - } - data, err = l2ooABI.Pack( - "initialize", - big.NewInt(0), - uint642Big(uint64(config.L1GenesisBlockTimestamp)), - ) - if err != nil { - return nil, fmt.Errorf("cannot abi encode initialize for L2OutputOracle: %w", err) - } - if _, err := upgradeProxy( - backend, - opts, - depsByName["L2OutputOracleProxy"].Address, - depsByName["L2OutputOracle"].Address, - data, - ); err != nil { - return nil, err - } - - if _, err := upgradeProxy( - backend, - opts, - depsByName["ZKVerifierProxy"].Address, - depsByName["ZKVerifier"].Address, - nil, - ); err != nil { - return nil, err - } - - colosseumABI, err := bindings.ColosseumMetaData.GetAbi() - if err != nil { - return nil, err - } - data, err = colosseumABI.Pack("initialize", parseSegsLengthsConfig(config.ColosseumSegmentsLengths)) - if err != nil { - return nil, err - } - if _, err := upgradeProxy( - backend, - opts, - depsByName["ColosseumProxy"].Address, - depsByName["Colosseum"].Address, - data, - ); err != nil { - return nil, err - } - - l1XDMABI, err := bindings.L1CrossDomainMessengerMetaData.GetAbi() - if err != nil { - return nil, err - } - data, err = l1XDMABI.Pack("initialize") - if err != nil { - return nil, fmt.Errorf("cannot abi encode initialize for L1CrossDomainMessenger: %w", err) - } - if _, err := upgradeProxy( - backend, - opts, - depsByName["L1CrossDomainMessengerProxy"].Address, - depsByName["L1CrossDomainMessenger"].Address, - data, - ); err != nil { - return nil, err - } - - if _, err := upgradeProxy( - backend, - opts, - depsByName["L1StandardBridgeProxy"].Address, - depsByName["L1StandardBridge"].Address, - nil, - ); err != nil { - return nil, err - } - - securityCouncilTokenABI, err := bindings.SecurityCouncilTokenMetaData.GetAbi() - if err != nil { - return nil, err - } - - data, err = securityCouncilTokenABI.Pack("initialize", opts.From) - if err != nil { - return nil, fmt.Errorf("cannot abi encode initialize for securityCouncilToken: %w", err) - } - if _, err := upgradeProxy( - backend, - opts, - depsByName["SecurityCouncilTokenProxy"].Address, - depsByName["SecurityCouncilToken"].Address, - data, - ); err != nil { - return nil, err - } - - timeLockABI, err := bindings.TimeLockMetaData.GetAbi() - if err != nil { - return nil, err - } - data, err = timeLockABI.Pack("initialize", - uint642Big(config.TimeLockMinDelaySeconds), - []common.Address{predeploys.DevUpgradeGovernorAddr}, - []common.Address{predeploys.DevUpgradeGovernorAddr}, - predeploys.DevUpgradeGovernorAddr) - if err != nil { - return nil, fmt.Errorf("cannot abi encode initialize for kromaTimeLock: %w", err) - } - if _, err := upgradeProxy( - backend, - opts, - depsByName["TimeLockProxy"].Address, - depsByName["TimeLock"].Address, - data, - ); err != nil { - return nil, err - } - - upgradeGovernorABI, err := bindings.UpgradeGovernorMetaData.GetAbi() - if err != nil { - return nil, err - } - data, err = upgradeGovernorABI.Pack( - "initialize", - depsByName["SecurityCouncilTokenProxy"].Address, - depsByName["TimeLockProxy"].Address, - uint642Big(config.GovernorVotingDelayBlocks), - uint642Big(config.GovernorVotingPeriodBlocks), - uint642Big(config.GovernorProposalThreshold), - uint642Big(config.GovernorVotesQuorumFractionPercent)) - if err != nil { - return nil, fmt.Errorf("cannot abi encode initialize for kromaGovernor: %w", err) - } - if _, err := upgradeProxy( - backend, - opts, - depsByName["UpgradeGovernorProxy"].Address, - depsByName["UpgradeGovernor"].Address, - data, - ); err != nil { - return nil, err - } - - if _, err := upgradeProxy( - backend, - opts, - depsByName["SecurityCouncilProxy"].Address, - depsByName["SecurityCouncil"].Address, - nil, - ); err != nil { - return nil, err - } - - if _, err = upgradeProxy( - backend, - opts, - depsByName["KromaMintableERC20FactoryProxy"].Address, - depsByName["KromaMintableERC20Factory"].Address, - nil, - ); err != nil { - return nil, err - } - - // mint to securitycouncil owners - scToken, err := bindings.NewSecurityCouncilToken(depsByName["SecurityCouncilTokenProxy"].Address, backend) - if err != nil { - return nil, err - } - var lastUpgradeTx *types.Transaction - for _, account := range config.SecurityCouncilOwners { - lastUpgradeTx, err = scToken.SafeMint(opts, account, "") - if err != nil { - return nil, err - } - } - - // Commit all the upgrades at once, then wait for the last - // transaction to be mined. The simulator performs async - // processing, and as such we need to wait for the transaction - // receipt to appear before considering the above transactions - // committed to the chain. - backend.Commit() - if _, err := bind.WaitMined(context.Background(), backend, lastUpgradeTx); err != nil { - return nil, err - } - - memDB := state.NewMemoryStateDB(genesis) - if err := SetL1Proxies(memDB, predeploys.DevProxyAdminAddr); err != nil { - return nil, err - } - FundDevAccounts(memDB) - SetPrecompileBalances(memDB) - - for name, proxyAddr := range predeploys.DevPredeploys { - memDB.SetState(*proxyAddr, ImplementationSlot, depsByName[name].Address.Hash()) - - // Special case for WETH since it was not designed to be behind a proxy - if name == "WETH9" { - name, _ := state.EncodeStringValue("Wrapped Ether", 0) - symbol, _ := state.EncodeStringValue("WETH", 0) - decimals, _ := state.EncodeUintValue(18, 0) - memDB.SetState(*proxyAddr, common.Hash{}, name) - memDB.SetState(*proxyAddr, common.Hash{31: 0x01}, symbol) - memDB.SetState(*proxyAddr, common.Hash{31: 0x02}, decimals) - } - - if name == "ZKMerkleTrie" { - poseidon2Addr, _ := state.EncodeAddressValue(predeploys.DevPoseidon2Addr, 0) - memDB.SetState(*proxyAddr, common.Hash{}, poseidon2Addr) - } - } - - stateDB, err := backend.Blockchain().State() - if err != nil { - return nil, err - } - - for _, dep := range deployments { - st, err := stateDB.StorageTrie(dep.Address) - if err != nil { - return nil, fmt.Errorf("failed to open storage trie of %s: %w", dep.Address, err) - } - if st == nil { - return nil, fmt.Errorf("missing account %s in state, address: %s", dep.Name, dep.Address) - } - nodeIter, err := st.NodeIterator(nil) - if err != nil { - return nil, err - } - iter := trie.NewIterator(nodeIter) - - depAddr := dep.Address - if strings.HasSuffix(dep.Name, "Proxy") { - depAddr = *predeploys.DevPredeploys[strings.TrimSuffix(dep.Name, "Proxy")] - } - - memDB.CreateAccount(depAddr) - memDB.SetCode(depAddr, dep.Bytecode) - - for iter.Next() { - _, data, _, err := rlp.Split(iter.Value) - if err != nil { - return nil, err - } - - key := common.BytesToHash(st.GetKey(iter.Key)) - value := common.BytesToHash(data) - - if depAddr == predeploys.DevKromaPortalAddr && key == portalMeteringSlot { - // We need to manually set the block number in the resource - // metering storage slot to zero. Otherwise, deposits will - // revert. - copy(value[:24], zeroHash[:]) - } - - memDB.SetState(depAddr, key, value) - } - } - - // Update proxy addresses for UpgradeGovernor - securityCouncilTokenAddr, _ := state.EncodeAddressValue(predeploys.DevSecurityCouncilTokenAddr, 0) - memDB.SetState(predeploys.DevUpgradeGovernorAddr, common.Hash{30: 0x01, 31: 0x93}, securityCouncilTokenAddr) - - timeLockAddr, _ := state.EncodeAddressValue(predeploys.DevTimeLockAddr, 0) - memDB.SetState(predeploys.DevUpgradeGovernorAddr, common.Hash{30: 0x01, 31: 0xf8}, timeLockAddr) - return memDB.Genesis(), nil -} - -func deployL1Contracts(config *DeployConfig, backend *backends.SimulatedBackend) ([]deployer.Deployment, error) { - constructors := make([]deployer.Constructor, 0) - for _, proxy := range proxies { - constructors = append(constructors, deployer.Constructor{ - Name: proxy, - }) - } - gasLimit := uint64(config.L2GenesisBlockGasLimit) - if gasLimit == 0 { - gasLimit = DefaultGasLimit - } - - constructors = append(constructors, []deployer.Constructor{ - { - Name: "SystemConfig", - Args: []interface{}{ - config.ProxyAdminOwner, - uint642Big(config.GasPriceOracleOverhead), - uint642Big(config.GasPriceOracleScalar), - config.BatchSenderAddress.Hash(), // left-padded 32 bytes value, version is zero anyway - gasLimit, - config.P2PSequencerAddress, - DefaultResourceConfig, - uint642Big(config.ValidatorRewardScalar), - }, - }, - { - Name: "ValidatorPool", - Args: []interface{}{ - config.ValidatorPoolTrustedValidator, - config.ValidatorPoolRequiredBondAmount.ToInt(), - uint642Big(config.ValidatorPoolMaxUnbond), - uint642Big(config.ValidatorPoolRoundDuration), - }, - }, - { - Name: "L2OutputOracle", - Args: []interface{}{ - uint642Big(config.L2OutputOracleSubmissionInterval), - uint642Big(config.L2BlockTime), - big.NewInt(0), - uint642Big(uint64(config.L1GenesisBlockTimestamp)), - uint642Big(config.FinalizationPeriodSeconds), - }, - }, - { - Name: "Poseidon2", - }, - { - Name: "ZKMerkleTrie", - }, - { - Name: "ZKVerifier", - Args: []interface{}{ - config.ZKVerifierHashScalar.ToInt(), - config.ZKVerifierM56Px.ToInt(), - config.ZKVerifierM56Py.ToInt(), - }, - }, - { - Name: "KromaPortal", - Args: []interface{}{ - predeploys.DevSecurityCouncilAddr, - true, // _paused - predeploys.DevSystemConfigAddr, - }, - }, - { - Name: "Colosseum", - Args: []interface{}{ - uint642Big(config.L2OutputOracleSubmissionInterval), - uint642Big(config.ColosseumCreationPeriodSeconds), - uint642Big(config.ColosseumBisectionTimeout), - uint642Big(config.ColosseumProvingTimeout), - config.ColosseumDummyHash, - uint642Big(config.ColosseumMaxTxs), - parseSegsLengthsConfig(config.ColosseumSegmentsLengths), - }, - }, - { - Name: "L1CrossDomainMessenger", - }, - { - Name: "L1StandardBridge", - }, - { - Name: "L1ERC721Bridge", - }, - { - Name: "KromaMintableERC20Factory", - }, - { - Name: "SecurityCouncilToken", - }, - { - Name: "TimeLock", - }, - { - Name: "UpgradeGovernor", - }, - { - Name: "SecurityCouncil", - }, - { - Name: "ProxyAdmin", - Args: []interface{}{ - common.Address{19: 0x01}, - }, - }, - { - Name: "WETH9", - }, - }...) - return deployer.Deploy(backend, constructors, l1Deployer) -} - -func l1Deployer(backend *backends.SimulatedBackend, opts *bind.TransactOpts, deployment deployer.Constructor) (*types.Transaction, error) { - var tx *types.Transaction - var err error - - switch deployment.Name { - case "SystemConfig": - _, tx, _, err = bindings.DeploySystemConfig( - opts, - backend, - /* owner= */ deployment.Args[0].(common.Address), - /* overhead= */ deployment.Args[1].(*big.Int), - /* scalar= */ deployment.Args[2].(*big.Int), - /* batcherHash= */ deployment.Args[3].(common.Hash), - /* gasLimit= */ deployment.Args[4].(uint64), - /* unsafeBlockSigner= */ deployment.Args[5].(common.Address), - /* config= */ deployment.Args[6].(bindings.ResourceMeteringResourceConfig), - /* validatorRewardScalar= */ deployment.Args[7].(*big.Int), - ) - case "ValidatorPool": - _, tx, _, err = bindings.DeployValidatorPool( - opts, - backend, - predeploys.DevL2OutputOracleAddr, - predeploys.DevKromaPortalAddr, - predeploys.DevSecurityCouncilAddr, - /* trustedValidator= */ deployment.Args[0].(common.Address), - /* requiredBond= */ deployment.Args[1].(*big.Int), - /* maxUnbond= */ deployment.Args[2].(*big.Int), - /* roundDuration= */ deployment.Args[3].(*big.Int), - ) - case "L2OutputOracle": - _, tx, _, err = bindings.DeployL2OutputOracle( - opts, - backend, - predeploys.DevValidatorPoolAddr, - predeploys.DevColosseumAddr, - /* submissionInterval= */ deployment.Args[0].(*big.Int), - /* l2BlockTime= */ deployment.Args[1].(*big.Int), - /* startingBlockNumber= */ deployment.Args[2].(*big.Int), - /* startingTimestamp= */ deployment.Args[3].(*big.Int), - /* finalizationPeriodSeconds= */ deployment.Args[4].(*big.Int), - ) - case "KromaPortal": - _, tx, _, err = bindings.DeployKromaPortal( - opts, - backend, - predeploys.DevL2OutputOracleAddr, - predeploys.DevValidatorPoolAddr, - /* guardian= */ deployment.Args[0].(common.Address), - /* paused= */ deployment.Args[1].(bool), - /* config= */ deployment.Args[2].(common.Address), - predeploys.DevZKMerkleTrieAddr, - ) - case "Colosseum": - _, tx, _, err = bindings.DeployColosseum( - opts, - backend, - predeploys.DevL2OutputOracleAddr, - predeploys.DevZKVerifierAddr, - /* submissionInterval= */ deployment.Args[0].(*big.Int), - /* creationPeriodSeconds= */ deployment.Args[1].(*big.Int), - /* bisectionTimeout= */ deployment.Args[2].(*big.Int), - /* provingTimeout= */ deployment.Args[3].(*big.Int), - /* dummyHash= */ deployment.Args[4].(common.Hash), - /* maxTxs= */ deployment.Args[5].(*big.Int), - /* segmentsLengths= */ deployment.Args[6].([]*big.Int), - predeploys.DevSecurityCouncilAddr, - predeploys.DevZKMerkleTrieAddr, - ) - case "SecurityCouncil": - _, tx, _, err = bindings.DeploySecurityCouncil( - opts, - backend, - predeploys.DevColosseumAddr, - predeploys.DevUpgradeGovernorAddr, - ) - case "L1CrossDomainMessenger": - _, tx, _, err = bindings.DeployL1CrossDomainMessenger( - opts, - backend, - predeploys.DevKromaPortalAddr, - ) - case "L1StandardBridge": - _, tx, _, err = bindings.DeployL1StandardBridge( - opts, - backend, - predeploys.DevL1CrossDomainMessengerAddr, - ) - case "KromaMintableERC20Factory": - _, tx, _, err = bindings.DeployKromaMintableERC20Factory( - opts, - backend, - predeploys.DevL1StandardBridgeAddr, - ) - case "ProxyAdmin": - _, tx, _, err = bindings.DeployProxyAdmin( - opts, - backend, - /* owner= */ common.Address{}, - ) - case "WETH9": - _, tx, _, err = bindings.DeployWETH9( - opts, - backend, - ) - case "L1ERC721Bridge": - _, tx, _, err = bindings.DeployL1ERC721Bridge( - opts, - backend, - predeploys.DevL1CrossDomainMessengerAddr, - predeploys.L2ERC721BridgeAddr, - ) - case "Poseidon2": - _, tx, _, err = bind.DeployContract( - opts, - abi.ABI{}, - PoseidonByteCode, - backend, - ) - case "ZKMerkleTrie": - _, tx, _, err = bindings.DeployZKMerkleTrie( - opts, - backend, - predeploys.DevPoseidon2Addr, - ) - case "ZKVerifier": - _, tx, _, err = bindings.DeployZKVerifier( - opts, - backend, - /* hashScalar= */ deployment.Args[0].(*big.Int), - /* m56Px= */ deployment.Args[1].(*big.Int), - /* m56Py= */ deployment.Args[2].(*big.Int), - ) - case "SecurityCouncilToken": - _, tx, _, err = bindings.DeploySecurityCouncilToken( - opts, - backend, - ) - case "TimeLock": - _, tx, _, err = bindings.DeployTimeLock( - opts, - backend, - ) - case "UpgradeGovernor": - _, tx, _, err = bindings.DeployUpgradeGovernor( - opts, - backend, - ) - default: - if strings.HasSuffix(deployment.Name, "Proxy") { - _, tx, _, err = bindings.DeployProxy(opts, backend, deployer.TestAddress) - } else { - err = fmt.Errorf("unknown contract %s", deployment.Name) - } - } - - if err != nil { - err = fmt.Errorf("cannot deploy %s: %w", deployment.Name, err) - } - - return tx, err -} - -func upgradeProxy(backend *backends.SimulatedBackend, opts *bind.TransactOpts, proxyAddr common.Address, implAddr common.Address, callData []byte) (*types.Transaction, error) { - var tx *types.Transaction - - code, err := backend.CodeAt(context.Background(), implAddr, nil) - if err != nil { - return nil, err - } - if len(code) == 0 { - return nil, fmt.Errorf("no code at %s", implAddr) - } - - proxy, err := bindings.NewProxy(proxyAddr, backend) - if err != nil { - return nil, err - } - if callData == nil { - tx, err = proxy.UpgradeTo(opts, implAddr) - } else { - tx, err = proxy.UpgradeToAndCall( - opts, - implAddr, - callData, - ) - } - return tx, err -} diff --git a/op-chain-ops/genesis/layer_two.go b/op-chain-ops/genesis/layer_two.go deleted file mode 100644 index 068fcf7af..000000000 --- a/op-chain-ops/genesis/layer_two.go +++ /dev/null @@ -1,60 +0,0 @@ -package genesis - -import ( - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/log" - - "github.com/ethereum-optimism/optimism/op-bindings/predeploys" - "github.com/ethereum-optimism/optimism/op-chain-ops/state" -) - -// BuildL2Genesis will build the L2 genesis block. -func BuildL2Genesis(config *DeployConfig, l1StartBlock *types.Block, zktrie bool) (*core.Genesis, error) { - genspec, err := NewL2Genesis(config, l1StartBlock, zktrie) - if err != nil { - return nil, err - } - - db := state.NewMemoryStateDB(genspec) - if config.FundDevAccounts { - log.Info("Funding developer accounts in L2 genesis") - FundDevAccounts(db) - } - SetPrecompileBalances(db) - - storage, err := NewL2StorageConfig(config, l1StartBlock) - if err != nil { - return nil, err - } - - immutable, err := NewL2ImmutableConfig(config, l1StartBlock) - if err != nil { - return nil, err - } - - // Set up the proxies - if err := SetL2Proxies(db); err != nil { - return nil, err - } - - // Set up the implementations - if err := SetImplementations(db, storage, immutable, zktrie); err != nil { - return nil, err - } - - if err := SetDevOnlyL2Implementations(db, storage, immutable, zktrie); err != nil { - return nil, err - } - - return db.Genesis(), nil -} - -func L2PredeploysCount(config *DeployConfig) int { - cnt := PrecompiledCount + int(L2ProxyCount) + len(predeploys.Predeploys) - if config.FundDevAccounts { - cnt = cnt + len(DevAccounts) - } - - return cnt -} diff --git a/op-chain-ops/genesis/setters.go b/op-chain-ops/genesis/setters.go deleted file mode 100644 index 62ec9bea0..000000000 --- a/op-chain-ops/genesis/setters.go +++ /dev/null @@ -1,231 +0,0 @@ -package genesis - -import ( - "fmt" - "math/big" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/log" - - "github.com/ethereum-optimism/optimism/op-bindings/bindings" - "github.com/ethereum-optimism/optimism/op-bindings/predeploys" - "github.com/ethereum-optimism/optimism/op-chain-ops/immutables" - "github.com/ethereum-optimism/optimism/op-chain-ops/state" -) - -// UntouchableCodeHashes contains code hashes of all the contracts -// that should not be touched by the migration process. -type ChainHashMap map[uint64]common.Hash - -var ( - // UntouchablePredeploys are addresses in the predeploy namespace - // that should not be touched by the migration process. - UntouchablePredeploys = map[common.Address]bool{ - predeploys.WETH9Addr: true, - } - - // UntouchableCodeHashes represent the bytecode hashes of contracts - // that should not be touched by the migration process. - UntouchableCodeHashes = map[common.Address]ChainHashMap{ - predeploys.WETH9Addr: { - 1: common.HexToHash("0x779bbf2a738ef09d961c945116197e2ac764c1b39304b2b4418cd4e42668b173"), - 5: common.HexToHash("0x779bbf2a738ef09d961c945116197e2ac764c1b39304b2b4418cd4e42668b173"), - }, - } - - // FrozenStoragePredeploys represents the set of predeploys that - // will not have their storage wiped during the migration process. - // It is very explicitly set in its own mapping to ensure that - // changes elsewhere in the codebase do no alter the predeploys - // that do not have their storage wiped. It is safe for all other - // predeploys to have their storage wiped. - FrozenStoragePredeploys = map[common.Address]bool{ - predeploys.WETH9Addr: true, - } -) - -var ( - PrecompiledCount = 32 - L1ProxyCount = uint64(2048) - L2ProxyCount = uint64(256) -) - -// FundDevAccounts will fund each of the development accounts. -func FundDevAccounts(db vm.StateDB) { - for _, account := range DevAccounts { - if !db.Exist(account) { - db.CreateAccount(account) - } - db.AddBalance(account, devBalance) - } -} - -// SetL2Proxies will set each of the proxies in the state. It requires -// a Proxy and ProxyAdmin deployment present so that the Proxy bytecode -// can be set in state and the ProxyAdmin can be set as the admin of the -// Proxy. -func SetL2Proxies(db vm.StateDB) error { - return setProxies(db, predeploys.ProxyAdminAddr, BigL2PredeployNamespace, L2ProxyCount) -} - -// SetL1Proxies will set each of the proxies in the state. It requires -// a Proxy and ProxyAdmin deployment present so that the Proxy bytecode -// can be set in state and the ProxyAdmin can be set as the admin of the -// Proxy. -func SetL1Proxies(db vm.StateDB, proxyAdminAddr common.Address) error { - return setProxies(db, proxyAdminAddr, bigL1PredeployNamespace, L1ProxyCount) -} - -// WipePredeployStorage will wipe the storage of all L2 predeploys expect -// for predeploys that must not have their storage altered. -func WipePredeployStorage(db vm.StateDB) error { - for name, addr := range predeploys.Predeploys { - if addr == nil { - return fmt.Errorf("nil address in predeploys mapping for %s", name) - } - - if FrozenStoragePredeploys[*addr] { - log.Trace("skipping wiping of storage", "name", name, "address", *addr) - continue - } - - log.Info("wiping storage", "name", name, "address", *addr) - - // We need to make sure that we preserve nonces. - oldNonce := db.GetNonce(*addr) - db.CreateAccount(*addr) - if oldNonce > 0 { - db.SetNonce(*addr, oldNonce) - } - } - - return nil -} - -func setProxies(db vm.StateDB, proxyAdminAddr common.Address, namespace *big.Int, count uint64) error { - depBytecode, err := bindings.GetDeployedBytecode("Proxy") - if err != nil { - return err - } - - for i := uint64(0); i <= count; i++ { - bigAddr := new(big.Int).Or(namespace, new(big.Int).SetUint64(i)) - addr := common.BigToAddress(bigAddr) - - if UntouchablePredeploys[addr] { - log.Info("Skipping setting proxy", "address", addr) - continue - } - - if !db.Exist(addr) { - db.CreateAccount(addr) - } - - db.SetCode(addr, depBytecode) - db.SetState(addr, AdminSlot, proxyAdminAddr.Hash()) - log.Trace("Set proxy", "address", addr, "admin", proxyAdminAddr) - } - - return nil -} - -// SetImplementations will set the implementations of the contracts in the state -// and configure the proxies to point to the implementations. It also sets -// the appropriate storage values for each contract at the proxy address. -func SetImplementations(db vm.StateDB, storage state.StorageConfig, immutable immutables.ImmutableConfig, zktrie bool) error { - deployResults, err := immutables.BuildOptimism(immutable, zktrie) - if err != nil { - return err - } - - for name, address := range predeploys.Predeploys { - if UntouchablePredeploys[*address] { - continue - } - - codeAddr, err := AddressToCodeNamespace(*address) - if err != nil { - return fmt.Errorf("error converting to code namespace: %w", err) - } - - if !db.Exist(codeAddr) { - db.CreateAccount(codeAddr) - } - - db.SetState(*address, ImplementationSlot, codeAddr.Hash()) - - if err := setupPredeploy(db, deployResults, storage, name, *address, codeAddr); err != nil { - return err - } - - code := db.GetCode(codeAddr) - if len(code) == 0 { - return fmt.Errorf("code not set for %s", name) - } - } - return nil -} - -func SetDevOnlyL2Implementations(db vm.StateDB, storage state.StorageConfig, immutable immutables.ImmutableConfig, zktrie bool) error { - deployResults, err := immutables.BuildOptimism(immutable, zktrie) - if err != nil { - return err - } - - for name, address := range predeploys.Predeploys { - if !UntouchablePredeploys[*address] { - continue - } - - db.CreateAccount(*address) - - if err := setupPredeploy(db, deployResults, storage, name, *address, *address); err != nil { - return err - } - - code := db.GetCode(*address) - if len(code) == 0 { - return fmt.Errorf("code not set for %s", name) - } - } - - return nil -} - -// SetPrecompileBalances will set a single wei at each precompile address. -// This is an optimization to make calling them cheaper. This should only -// be used for devnets. -func SetPrecompileBalances(db vm.StateDB) { - for i := 0; i < PrecompiledCount; i++ { - addr := common.BytesToAddress([]byte{byte(i)}) - db.CreateAccount(addr) - db.AddBalance(addr, common.Big1) - } -} - -func setupPredeploy(db vm.StateDB, deployResults immutables.DeploymentResults, storage state.StorageConfig, name string, proxyAddr common.Address, implAddr common.Address) error { - // Use the generated bytecode when there are immutables - // otherwise use the artifact deployed bytecode - if bytecode, ok := deployResults[name]; ok { - log.Info("Setting deployed bytecode with immutables", "name", name, "address", implAddr) - db.SetCode(implAddr, bytecode) - } else { - depBytecode, err := bindings.GetDeployedBytecode(name) - if err != nil { - return err - } - log.Info("Setting deployed bytecode from solc compiler output", "name", name, "address", implAddr) - db.SetCode(implAddr, depBytecode) - } - - // Set the storage values - if storageConfig, ok := storage[name]; ok { - log.Info("Setting storage", "name", name, "address", proxyAddr) - if err := state.SetStorage(name, proxyAddr, storageConfig, db); err != nil { - return err - } - } - - return nil -} diff --git a/op-chain-ops/safe/batch.go b/op-chain-ops/safe/batch.go new file mode 100644 index 000000000..93c03100d --- /dev/null +++ b/op-chain-ops/safe/batch.go @@ -0,0 +1,310 @@ +// Package safe contains types for working with Safe smart contract wallets. These are used to +// build batch transactions for the tx-builder app. The types are based on +// https://github.com/safe-global/safe-react-apps/blob/development/apps/tx-builder/src/typings/models.ts. +package safe + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "math/big" + "strings" + + "golang.org/x/exp/maps" + + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/crypto" +) + +// Batch represents a Safe tx-builder transaction. +// SkipCalldata will skip adding the calldata to the BatchTransaction. +// This is useful for when using the Safe UI because it prefers using +// the raw calldata when both the calldata and ABIs with arguments are +// present. +type Batch struct { + SkipCalldata bool `json:"-"` + Version string `json:"version"` + ChainID *big.Int `json:"chainId"` + CreatedAt uint64 `json:"createdAt"` + Meta BatchMeta `json:"meta"` + Transactions []BatchTransaction `json:"transactions"` +} + +// AddCall will add a call to the batch. After a series of calls are +// added to the batch, it can be serialized to JSON. +func (b *Batch) AddCall(to common.Address, value *big.Int, sig string, args []any, iface *abi.ABI) error { + if iface == nil { + return errors.New("abi cannot be nil") + } + // Attempt to pull out the signature from the top level methods. + // The abi package uses normalization that we do not want to be + // coupled to, so attempt to search for the raw name if the top + // level name is not found to handle overloading more gracefully. + method, ok := iface.Methods[sig] + if !ok { + for _, m := range iface.Methods { + if m.RawName == sig || m.Sig == sig { + method = m + ok = true + } + } + } + if !ok { + keys := maps.Keys(iface.Methods) + methods := strings.Join(keys, ",") + return fmt.Errorf("%s not found in abi, options are %s", sig, methods) + } + + if len(args) != len(method.Inputs) { + return fmt.Errorf("requires %d inputs but got %d for %s", len(method.Inputs), len(args), method.RawName) + } + + contractMethod := ContractMethod{ + Name: method.RawName, + Payable: method.Payable, + } + + inputValues := make(map[string]string) + contractInputs := make([]ContractInput, 0) + + for i, input := range method.Inputs { + contractInput, err := createContractInput(input, contractInputs) + if err != nil { + return err + } + contractMethod.Inputs = append(contractMethod.Inputs, contractInput...) + + str, err := stringifyArg(args[i]) + if err != nil { + return err + } + inputValues[input.Name] = str + } + + encoded, err := method.Inputs.PackValues(args) + if err != nil { + return err + } + data := make([]byte, len(method.ID)+len(encoded)) + copy(data, method.ID) + copy(data[len(method.ID):], encoded) + + batchTransaction := BatchTransaction{ + To: to, + Value: value, + Method: contractMethod, + InputValues: inputValues, + } + + if !b.SkipCalldata { + batchTransaction.Data = data + } + + b.Transactions = append(b.Transactions, batchTransaction) + + return nil +} + +// Check will check the batch for errors +func (b *Batch) Check() error { + for _, tx := range b.Transactions { + if err := tx.Check(); err != nil { + return err + } + } + return nil +} + +// bathcFileMarshaling is a helper type used for JSON marshaling. +type batchMarshaling struct { + Version string `json:"version"` + ChainID string `json:"chainId"` + CreatedAt uint64 `json:"createdAt"` + Meta BatchMeta `json:"meta"` + Transactions []BatchTransaction `json:"transactions"` +} + +// MarshalJSON will marshal a Batch to JSON. +func (b *Batch) MarshalJSON() ([]byte, error) { + batch := batchMarshaling{ + Version: b.Version, + CreatedAt: b.CreatedAt, + Meta: b.Meta, + Transactions: b.Transactions, + } + if b.ChainID != nil { + batch.ChainID = b.ChainID.String() + } + return json.Marshal(batch) +} + +// UnmarshalJSON will unmarshal a Batch from JSON. +func (b *Batch) UnmarshalJSON(data []byte) error { + var bf batchMarshaling + if err := json.Unmarshal(data, &bf); err != nil { + return err + } + b.Version = bf.Version + chainId, ok := new(big.Int).SetString(bf.ChainID, 10) + if !ok { + return fmt.Errorf("cannot set chainId to %s", bf.ChainID) + } + b.ChainID = chainId + b.CreatedAt = bf.CreatedAt + b.Meta = bf.Meta + b.Transactions = bf.Transactions + return nil +} + +// BatchMeta contains metadata about a Batch. Not all +// of the fields are required. +type BatchMeta struct { + TxBuilderVersion string `json:"txBuilderVersion,omitempty"` + Checksum string `json:"checksum,omitempty"` + CreatedFromSafeAddress string `json:"createdFromSafeAddress"` + CreatedFromOwnerAddress string `json:"createdFromOwnerAddress"` + Name string `json:"name"` + Description string `json:"description"` +} + +// BatchTransaction represents a single call in a tx-builder transaction. +type BatchTransaction struct { + To common.Address `json:"to"` + Value *big.Int `json:"value"` + Data []byte `json:"data"` + Method ContractMethod `json:"contractMethod"` + InputValues map[string]string `json:"contractInputsValues"` +} + +// Check will check the batch transaction for errors. +// An error is defined by: +// - incorrectly encoded calldata +// - mismatch in number of arguments +// It does not currently work on structs, will return no error if a "tuple" +// is used as an argument. Need to find a generic way to work with structs. +func (bt *BatchTransaction) Check() error { + if len(bt.Method.Inputs) != len(bt.InputValues) { + return fmt.Errorf("expected %d inputs but got %d", len(bt.Method.Inputs), len(bt.InputValues)) + } + + if len(bt.Data) > 0 && bt.Method.Name != "fallback" { + if len(bt.Data) < 4 { + return fmt.Errorf("must have at least 4 bytes of calldata, got %d", len(bt.Data)) + } + sig := bt.Signature() + selector := crypto.Keccak256([]byte(sig))[0:4] + if !bytes.Equal(bt.Data[0:4], selector) { + return fmt.Errorf("data does not match signature") + } + + // Check the calldata + values := make([]any, len(bt.Method.Inputs)) + for i, input := range bt.Method.Inputs { + value, ok := bt.InputValues[input.Name] + if !ok { + return fmt.Errorf("missing input %s", input.Name) + } + // Need to figure out better way to handle tuples in a generic way + if input.Type == "tuple" { + return nil + } + arg, err := unstringifyArg(value, input.Type) + if err != nil { + return err + } + values[i] = arg + } + + calldata, err := bt.Arguments().PackValues(values) + if err != nil { + return err + } + if !bytes.Equal(bt.Data[4:], calldata) { + return fmt.Errorf("calldata does not match inputs, expected %s, got %s", hexutil.Encode(bt.Data[4:]), hexutil.Encode(calldata)) + } + } + return nil +} + +// Signature returns the function signature of the batch transaction. +func (bt *BatchTransaction) Signature() string { + types := make([]string, len(bt.Method.Inputs)) + for i, input := range bt.Method.Inputs { + types[i] = buildFunctionSignature(input) + } + return fmt.Sprintf("%s(%s)", bt.Method.Name, strings.Join(types, ",")) +} + +func (bt *BatchTransaction) Arguments() abi.Arguments { + arguments := make(abi.Arguments, len(bt.Method.Inputs)) + for i, input := range bt.Method.Inputs { + serialized, err := json.Marshal(input) + if err != nil { + panic(err) + } + var arg abi.Argument + if err := json.Unmarshal(serialized, &arg); err != nil { + panic(err) + } + arguments[i] = arg + } + return arguments +} + +// UnmarshalJSON will unmarshal a BatchTransaction from JSON. +func (b *BatchTransaction) UnmarshalJSON(data []byte) error { + var bt batchTransactionMarshaling + if err := json.Unmarshal(data, &bt); err != nil { + return err + } + b.To = common.HexToAddress(bt.To) + b.Value = new(big.Int).SetUint64(bt.Value) + if bt.Data != nil { + b.Data = common.CopyBytes(*bt.Data) + } + b.Method = bt.Method + b.InputValues = bt.InputValues + return nil +} + +// MarshalJSON will marshal a BatchTransaction to JSON. +func (b *BatchTransaction) MarshalJSON() ([]byte, error) { + batch := batchTransactionMarshaling{ + To: b.To.Hex(), + Value: b.Value.Uint64(), + Method: b.Method, + InputValues: b.InputValues, + } + if len(b.Data) != 0 { + data := hexutil.Bytes(b.Data) + batch.Data = &data + } + return json.Marshal(batch) +} + +// batchTransactionMarshaling is a helper type used for JSON marshaling. +type batchTransactionMarshaling struct { + To string `json:"to"` + Value uint64 `json:"value,string"` + Data *hexutil.Bytes `json:"data"` + Method ContractMethod `json:"contractMethod"` + InputValues map[string]string `json:"contractInputsValues"` +} + +// ContractMethod represents a method call in a tx-builder transaction. +type ContractMethod struct { + Inputs []ContractInput `json:"inputs"` + Name string `json:"name"` + Payable bool `json:"payable"` +} + +// ContractInput represents an input to a contract method. +type ContractInput struct { + InternalType string `json:"internalType"` + Name string `json:"name"` + Type string `json:"type"` + Components []ContractInput `json:"components,omitempty"` +} diff --git a/op-chain-ops/safe/batch_helpers.go b/op-chain-ops/safe/batch_helpers.go new file mode 100644 index 000000000..171de2b0e --- /dev/null +++ b/op-chain-ops/safe/batch_helpers.go @@ -0,0 +1,208 @@ +package safe + +import ( + "fmt" + "math/big" + "reflect" + "strconv" + "strings" + + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" +) + +// stringifyArg converts a Go type to a string that is representable by ABI. +// To do so, this function must be recursive to handle nested tuples. +func stringifyArg(argument any) (string, error) { + switch arg := argument.(type) { + case common.Address: + return arg.String(), nil + case *common.Address: + return arg.String(), nil + case *big.Int: + return arg.String(), nil + case big.Int: + return arg.String(), nil + case bool: + if arg { + return "true", nil + } + return "false", nil + case int64: + return strconv.FormatInt(arg, 10), nil + case int32: + return strconv.FormatInt(int64(arg), 10), nil + case int16: + return strconv.FormatInt(int64(arg), 10), nil + case int8: + return strconv.FormatInt(int64(arg), 10), nil + case int: + return strconv.FormatInt(int64(arg), 10), nil + case uint64: + return strconv.FormatUint(uint64(arg), 10), nil + case uint32: + return strconv.FormatUint(uint64(arg), 10), nil + case uint16: + return strconv.FormatUint(uint64(arg), 10), nil + case uint8: + return strconv.FormatUint(uint64(arg), 10), nil + case uint: + return strconv.FormatUint(uint64(arg), 10), nil + case []byte: + return hexutil.Encode(arg), nil + case []any: + ret := make([]string, len(arg)) + for i, v := range arg { + str, err := stringifyArg(v) + if err != nil { + return "", err + } + ret[i] = str + } + return "[" + strings.Join(ret, ",") + "]", nil + default: + typ := reflect.TypeOf(argument) + if typ.Kind() == reflect.Ptr { + typ = typ.Elem() + } + + if typ.Kind() == reflect.Struct { + v := reflect.ValueOf(argument) + numField := v.NumField() + ret := make([]string, numField) + + for i := 0; i < numField; i++ { + val := v.Field(i).Interface() + str, err := stringifyArg(val) + if err != nil { + return "", err + } + ret[i] = str + } + + return "[" + strings.Join(ret, ",") + "]", nil + } + + return "", fmt.Errorf("unknown type as argument: %T", arg) + } +} + +// unstringifyArg converts a string to a Go type. +func unstringifyArg(arg string, typ string) (any, error) { + switch typ { + case "address": + return common.HexToAddress(arg), nil + case "bool": + return strconv.ParseBool(arg) + case "uint8": + val, err := strconv.ParseUint(arg, 10, 8) + return uint8(val), err + case "uint16": + val, err := strconv.ParseUint(arg, 10, 16) + return uint16(val), err + case "uint32": + val, err := strconv.ParseUint(arg, 10, 32) + return uint32(val), err + case "uint64": + val, err := strconv.ParseUint(arg, 10, 64) + return val, err + case "int8": + val, err := strconv.ParseInt(arg, 10, 8) + return val, err + case "int16": + val, err := strconv.ParseInt(arg, 10, 16) + return val, err + case "int32": + val, err := strconv.ParseInt(arg, 10, 32) + return val, err + case "int64": + val, err := strconv.ParseInt(arg, 10, 64) + return val, err + case "uint256", "int256": + val, ok := new(big.Int).SetString(arg, 10) + if !ok { + return nil, fmt.Errorf("failed to parse %s as big.Int", arg) + } + return val, nil + case "string": + return arg, nil + case "bytes": + return hexutil.Decode(arg) + default: + return nil, fmt.Errorf("unknown type: %s", typ) + } +} + +// createContractInput converts an abi.Argument to one or more ContractInputs. +func createContractInput(input abi.Argument, inputs []ContractInput) ([]ContractInput, error) { + inputType, err := stringifyType(input.Type) + if err != nil { + return nil, err + } + + internalType := input.Type.String() + if input.Type.T == abi.TupleTy { + internalType = input.Type.TupleRawName + } + + components := make([]ContractInput, 0) + for i, elem := range input.Type.TupleElems { + e := *elem + arg := abi.Argument{ + Name: input.Type.TupleRawNames[i], + Type: e, + } + component, err := createContractInput(arg, inputs) + if err != nil { + return nil, err + } + components = append(components, component...) + } + + contractInput := ContractInput{ + InternalType: internalType, + Name: input.Name, + Type: inputType, + Components: components, + } + + inputs = append(inputs, contractInput) + + return inputs, nil +} + +// stringifyType turns an abi.Type into a string +func stringifyType(t abi.Type) (string, error) { + switch t.T { + case abi.TupleTy: + return "tuple", nil + case abi.BoolTy: + return t.String(), nil + case abi.AddressTy: + return t.String(), nil + case abi.UintTy: + return t.String(), nil + case abi.IntTy: + return t.String(), nil + case abi.StringTy: + return t.String(), nil + case abi.BytesTy: + return t.String(), nil + default: + return "", fmt.Errorf("unknown type: %d", t.T) + } +} + +// buildFunctionSignature builds a function signature from a ContractInput. +// It is recursive to handle tuples. +func buildFunctionSignature(input ContractInput) string { + if input.Type == "tuple" { + types := make([]string, len(input.Components)) + for i, component := range input.Components { + types[i] = buildFunctionSignature(component) + } + return fmt.Sprintf("(%s)", strings.Join(types, ",")) + } + return input.InternalType +} diff --git a/op-chain-ops/safe/batch_test.go b/op-chain-ops/safe/batch_test.go new file mode 100644 index 000000000..b34654480 --- /dev/null +++ b/op-chain-ops/safe/batch_test.go @@ -0,0 +1,156 @@ +package safe + +import ( + "bytes" + "encoding/json" + "errors" + "math/big" + "os" + "testing" + + "github.com/ethereum-optimism/optimism/op-bindings/bindings" + + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/common" + + "github.com/stretchr/testify/require" +) + +func TestBatchJSONPrepareBedrock(t *testing.T) { + testBatchJSON(t, "testdata/batch-prepare-bedrock.json") +} + +func TestBatchJSONL2OO(t *testing.T) { + testBatchJSON(t, "testdata/l2-output-oracle.json") +} + +func testBatchJSON(t *testing.T, path string) { + b, err := os.ReadFile(path) + require.NoError(t, err) + dec := json.NewDecoder(bytes.NewReader(b)) + decoded := new(Batch) + require.NoError(t, dec.Decode(decoded)) + data, err := json.Marshal(decoded) + require.NoError(t, err) + require.JSONEq(t, string(b), string(data)) +} + +// TestBatchAddCallFinalizeWithdrawalTransaction ensures that structs can be serialized correctly. +func TestBatchAddCallFinalizeWithdrawalTransaction(t *testing.T) { + file, err := os.ReadFile("testdata/portal-abi.json") + require.NoError(t, err) + portalABI, err := abi.JSON(bytes.NewReader(file)) + require.NoError(t, err) + + sig := "finalizeWithdrawalTransaction" + argument := []any{ + bindings.TypesWithdrawalTransaction{ + Nonce: big.NewInt(0), + Sender: common.Address{19: 0x01}, + Target: common.Address{19: 0x02}, + Value: big.NewInt(1), + GasLimit: big.NewInt(2), + Data: []byte{}, + }, + } + + batch := new(Batch) + to := common.Address{19: 0x01} + value := big.NewInt(222) + + require.NoError(t, batch.AddCall(to, value, sig, argument, &portalABI)) + require.NoError(t, batch.Check()) + require.Equal(t, batch.Transactions[0].Signature(), "finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes))") + + expected, err := os.ReadFile("testdata/finalize-withdrawal-tx.json") + require.NoError(t, err) + + serialized, err := json.Marshal(batch) + require.NoError(t, err) + require.JSONEq(t, string(expected), string(serialized)) +} + +// TestBatchAddCallDespostTransaction ensures that simple calls can be serialized correctly. +func TestBatchAddCallDespositTransaction(t *testing.T) { + file, err := os.ReadFile("testdata/portal-abi.json") + require.NoError(t, err) + portalABI, err := abi.JSON(bytes.NewReader(file)) + require.NoError(t, err) + + batch := new(Batch) + to := common.Address{19: 0x01} + value := big.NewInt(222) + sig := "depositTransaction" + argument := []any{ + common.Address{01}, + big.NewInt(2), + uint64(100), + false, + []byte{}, + } + + require.NoError(t, batch.AddCall(to, value, sig, argument, &portalABI)) + require.NoError(t, batch.Check()) + require.Equal(t, batch.Transactions[0].Signature(), "depositTransaction(address,uint256,uint64,bool,bytes)") + + expected, err := os.ReadFile("testdata/deposit-tx.json") + require.NoError(t, err) + + serialized, err := json.Marshal(batch) + require.NoError(t, err) + require.JSONEq(t, string(expected), string(serialized)) +} + +// TestBatchCheck checks for the various failure cases of Batch.Check +// as well as a simple check for a valid batch. +func TestBatchCheck(t *testing.T) { + cases := []struct { + name string + bt BatchTransaction + err error + }{ + { + name: "bad-input-count", + bt: BatchTransaction{ + Method: ContractMethod{}, + InputValues: map[string]string{ + "foo": "bar", + }, + }, + err: errors.New("expected 0 inputs but got 1"), + }, + { + name: "bad-calldata-too-small", + bt: BatchTransaction{ + Data: []byte{0x01}, + }, + err: errors.New("must have at least 4 bytes of calldata, got 1"), + }, + { + name: "bad-calldata-mismatch", + bt: BatchTransaction{ + Data: []byte{0x01, 0x02, 0x03, 0x04}, + Method: ContractMethod{ + Name: "foo", + }, + }, + err: errors.New("data does not match signature"), + }, + { + name: "good-calldata", + bt: BatchTransaction{ + Data: []byte{0xc2, 0x98, 0x55, 0x78}, + Method: ContractMethod{ + Name: "foo", + }, + }, + err: nil, + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + require.Equal(t, tc.err, tc.bt.Check()) + }) + } +} diff --git a/op-chain-ops/safe/testdata/batch-prepare-bedrock.json b/op-chain-ops/safe/testdata/batch-prepare-bedrock.json new file mode 100644 index 000000000..f0b95f9fc --- /dev/null +++ b/op-chain-ops/safe/testdata/batch-prepare-bedrock.json @@ -0,0 +1 @@ +{"version":"1.0","chainId":"1","createdAt":1683299982633,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.13.3","createdFromSafeAddress":"0xAB23dE0DbE0aedF356af3F815c8B47D88575D82d","createdFromOwnerAddress":"","checksum":"0x3be12fb2a12e07f516c3895194f8418c6640f27fb3324e4dc06dce337b7ae7c3"},"transactions":[{"to":"0x09AA72510eE2e1c705Dc4e2114b025a12E116bb8","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","payable":false},"contractInputsValues":{"newOwner":"0x3C0dD22068a69433938097ad335Cb44a9DBf5c1A"}},{"to":"0x20835fbB5Dcb9B9c3074C0780bB07790a7525f41","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","payable":false},"contractInputsValues":{"newOwner":"0x3C0dD22068a69433938097ad335Cb44a9DBf5c1A"}},{"to":"0xcAC4CDD0C2D87e65710C87dE3955974d6a0b6940","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","payable":false},"contractInputsValues":{"_owner":"0x3C0dD22068a69433938097ad335Cb44a9DBf5c1A"}},{"to":"0xE1229AbA7DC7e74C9995254bbaa40bedDB0B8B4d","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"changeAdmin","payable":false},"contractInputsValues":{"_admin":"0x3C0dD22068a69433938097ad335Cb44a9DBf5c1A"}}]} diff --git a/op-chain-ops/safe/testdata/deposit-tx.json b/op-chain-ops/safe/testdata/deposit-tx.json new file mode 100644 index 000000000..3847cd2b1 --- /dev/null +++ b/op-chain-ops/safe/testdata/deposit-tx.json @@ -0,0 +1,56 @@ +{ + "version": "", + "chainId": "", + "createdAt": 0, + "meta": { + "createdFromSafeAddress": "", + "createdFromOwnerAddress": "", + "name": "", + "description": "" + }, + "transactions": [ + { + "to": "0x0000000000000000000000000000000000000001", + "value": "222", + "data": "0xe9e05c42000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000", + "contractMethod": { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "_gasLimit", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "_isCreation", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "depositTransaction", + "payable": false + }, + "contractInputsValues": { + "_data": "0x", + "_gasLimit": "100", + "_isCreation": "false", + "_to": "0x0100000000000000000000000000000000000000", + "_value": "2" + } + } + ] + } diff --git a/op-chain-ops/safe/testdata/finalize-withdrawal-tx.json b/op-chain-ops/safe/testdata/finalize-withdrawal-tx.json new file mode 100644 index 000000000..0d4da7846 --- /dev/null +++ b/op-chain-ops/safe/testdata/finalize-withdrawal-tx.json @@ -0,0 +1,64 @@ +{ + "version": "", + "chainId": "", + "createdAt": 0, + "meta": { + "createdFromSafeAddress": "", + "createdFromOwnerAddress": "", + "name": "", + "description": "" + }, + "transactions": [ + { + "to": "0x0000000000000000000000000000000000000001", + "value": "222", + "data": "0x8c3152e900000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000", + "contractMethod": { + "inputs": [ + { + "internalType": "TypesWithdrawalTransaction", + "name": "_tx", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ] + } + ], + "name": "finalizeWithdrawalTransaction", + "payable": false + }, + "contractInputsValues": { + "_tx": "[0,0x0000000000000000000000000000000000000001,0x0000000000000000000000000000000000000002,1,2,0x]" + } + } + ] +} diff --git a/op-chain-ops/safe/testdata/l2-output-oracle.json b/op-chain-ops/safe/testdata/l2-output-oracle.json new file mode 100644 index 000000000..593d44bfb --- /dev/null +++ b/op-chain-ops/safe/testdata/l2-output-oracle.json @@ -0,0 +1 @@ +{"version":"1.0","chainId":"1","createdAt":1691808995527,"meta":{"name":"Transactions Batch","description":"","txBuilderVersion":"1.16.1","createdFromSafeAddress":"0xc9D26D376dD75573E0C3247C141881F053d27Ae8","createdFromOwnerAddress":"","checksum":"0x2a88db9ce20d2eb5a80910842e9e94d5870497af45986a6c1c7e2c91d15e34f0"},"transactions":[{"to":"0xE5FF3b57695079f808a24256734483CD3889fA9E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"bytes32","name":"_outputRoot","type":"bytes32"},{"internalType":"uint256","name":"_l2BlockNumber","type":"uint256"},{"internalType":"bytes32","name":"_l1BlockHash","type":"bytes32"},{"internalType":"uint256","name":"_l1BlockNumber","type":"uint256"}],"name":"proposeL2Output","payable":true},"contractInputsValues":{"_outputRoot":"0x5398552529cbd710f485e297bcf15233b8475bdad43280c99334f65a1d4278ff","_l2BlockNumber":"0","_l1BlockHash":"0x01f814a4547c01c18c0eb8b96cff19bc5dc83b1d2d8a8bbb03206587f594c80a","_l1BlockNumber":"1"}},{"to":"0xE5FF3b57695079f808a24256734483CD3889fA9E","value":"0","data":null,"contractMethod":{"inputs":[{"internalType":"uint256","name":"_l2OutputIndex","type":"uint256"}],"name":"deleteL2Outputs","payable":false},"contractInputsValues":{"_l2OutputIndex":"2"}}]} diff --git a/op-chain-ops/safe/testdata/portal-abi.json b/op-chain-ops/safe/testdata/portal-abi.json new file mode 100644 index 000000000..4ee86e3be --- /dev/null +++ b/op-chain-ops/safe/testdata/portal-abi.json @@ -0,0 +1,560 @@ +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "version", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "opaqueData", + "type": "bytes" + } + ], + "name": "TransactionDeposited", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "withdrawalHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "name": "WithdrawalFinalized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "withdrawalHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "WithdrawalProven", + "type": "event" + }, + { + "inputs": [], + "name": "GUARDIAN", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "L2_ORACLE", + "outputs": [ + { + "internalType": "contract L2OutputOracle", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "SYSTEM_CONFIG", + "outputs": [ + { + "internalType": "contract SystemConfig", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "_gasLimit", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "_isCreation", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "depositTransaction", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "donateETH", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct Types.WithdrawalTransaction", + "name": "_tx", + "type": "tuple" + } + ], + "name": "finalizeWithdrawalTransaction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "finalizedWithdrawals", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "guardian", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract L2OutputOracle", + "name": "_l2Oracle", + "type": "address" + }, + { + "internalType": "address", + "name": "_guardian", + "type": "address" + }, + { + "internalType": "contract SystemConfig", + "name": "_systemConfig", + "type": "address" + }, + { + "internalType": "bool", + "name": "_paused", + "type": "bool" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_l2OutputIndex", + "type": "uint256" + } + ], + "name": "isOutputFinalized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2Oracle", + "outputs": [ + { + "internalType": "contract L2OutputOracle", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "l2Sender", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "_byteCount", + "type": "uint64" + } + ], + "name": "minimumGasLimit", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "params", + "outputs": [ + { + "internalType": "uint128", + "name": "prevBaseFee", + "type": "uint128" + }, + { + "internalType": "uint64", + "name": "prevBoughtGas", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "prevBlockNum", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct Types.WithdrawalTransaction", + "name": "_tx", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_l2OutputIndex", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "version", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "stateRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "messagePasserStorageRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "latestBlockhash", + "type": "bytes32" + } + ], + "internalType": "struct Types.OutputRootProof", + "name": "_outputRootProof", + "type": "tuple" + }, + { + "internalType": "bytes[]", + "name": "_withdrawalProof", + "type": "bytes[]" + } + ], + "name": "proveWithdrawalTransaction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "provenWithdrawals", + "outputs": [ + { + "internalType": "bytes32", + "name": "outputRoot", + "type": "bytes32" + }, + { + "internalType": "uint128", + "name": "timestamp", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "l2OutputIndex", + "type": "uint128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "systemConfig", + "outputs": [ + { + "internalType": "contract SystemConfig", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } +] diff --git a/op-chain-ops/srcmap/solutil.go b/op-chain-ops/srcmap/solutil.go new file mode 100644 index 000000000..e092e4309 --- /dev/null +++ b/op-chain-ops/srcmap/solutil.go @@ -0,0 +1,251 @@ +package srcmap + +import ( + "fmt" + "io" + "math/big" + "os" + "strconv" + "strings" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/vm" +) + +type LineCol struct { + Line uint32 + Col uint32 +} + +type InstrMapping struct { + S int32 // start offset in bytes within source (negative when non-existent!) + L int32 // length in bytes within source (negative when non-existent!) + F int32 // file index of source (negative when non-existent!) + J byte // jump type (i=into, o=out, -=regular) + M int32 // modifier depth +} + +func parseInstrMapping(last InstrMapping, v string) (InstrMapping, error) { + data := strings.Split(v, ":") + out := last + if len(data) < 1 { + return out, nil + } + if len(data) > 5 { + return out, fmt.Errorf("unexpected length: %d", len(data)) + } + var err error + parse := func(x string) int32 { + p, e := strconv.ParseInt(x, 10, 32) + err = e + return int32(p) + } + if data[0] != "" { + out.S = parse(data[0]) + } + if len(data) < 2 || err != nil { + return out, err + } + if data[1] != "" { + out.L = parse(data[1]) + } + if len(data) < 3 || err != nil { + return out, err + } + if data[2] != "" { + out.F = parse(data[2]) + } + if len(data) < 4 || err != nil { + return out, err + } + if data[3] != "" { + out.J = data[3][0] + } + if len(data) < 5 || err != nil { + return out, err + } + if data[4] != "" { + out.M = parse(data[4]) + } + return out, err +} + +type SourceMap struct { + // source names + Sources []string + // per source, source offset -> line/col + PosData [][]LineCol + // per bytecode byte, byte index -> instr + Instr []InstrMapping +} + +func (s *SourceMap) Info(pc uint64) (source string, line uint32, col uint32) { + instr := s.Instr[pc] + if instr.F < 0 { + return "generated", 0, 0 + } + if instr.F >= int32(len(s.Sources)) { + source = "unknown" + return + } + source = s.Sources[instr.F] + if instr.S < 0 { + return + } + if s.PosData[instr.F] == nil { // when the source file is known to be unavailable + return + } + if int(instr.S) >= len(s.PosData[instr.F]) { // possibly invalid / truncated source mapping + return + } + lc := s.PosData[instr.F][instr.S] + line = lc.Line + col = lc.Col + return +} + +func (s *SourceMap) FormattedInfo(pc uint64) string { + f, l, c := s.Info(pc) + return fmt.Sprintf("%s:%d:%d", f, l, c) +} + +// ParseSourceMap parses a solidity sourcemap: mapping bytecode indices to source references. +// See https://docs.soliditylang.org/en/latest/internals/source_mappings.html +// +// Sources is the list of source files, which will be read from the filesystem +// to transform token numbers into line/column numbers. +// The sources are as referenced in the source-map by index. +// Not all sources are necessary, some indices may be unknown. +func ParseSourceMap(sources []string, bytecode []byte, sourceMap string) (*SourceMap, error) { + instructions := strings.Split(sourceMap, ";") + + srcMap := &SourceMap{ + Sources: sources, + PosData: make([][]LineCol, 0, len(sources)), + Instr: make([]InstrMapping, 0, len(bytecode)), + } + // map source code position byte offsets to line/column pairs + for i, s := range sources { + if strings.HasPrefix(s, "~") { + srcMap.PosData = append(srcMap.PosData, nil) + continue + } + dat, err := os.ReadFile(s) + if err != nil { + return nil, fmt.Errorf("failed to read source %d %q: %w", i, s, err) + } + datStr := string(dat) + + out := make([]LineCol, len(datStr)) + line := uint32(1) + lastLinePos := uint32(0) + for i, b := range datStr { // iterate the utf8 or the bytes? + col := uint32(i) - lastLinePos + out[i] = LineCol{Line: line, Col: col} + if b == '\n' { + lastLinePos = uint32(i) + line += 1 + } + } + srcMap.PosData = append(srcMap.PosData, out) + } + + instIndex := 0 + + // bytecode offset to instruction + lastInstr := InstrMapping{} + for i := 0; i < len(bytecode); { + inst := bytecode[i] + instLen := 1 + if inst >= 0x60 && inst <= 0x7f { // push instructions + pushDataLen := inst - 0x60 + 1 + instLen += int(pushDataLen) + } + + var instMapping string + if instIndex >= len(instructions) { + // truncated source-map? Or some instruction that's longer than we accounted for? + // probably the contract-metadata bytes that are not accounted for in source map + } else { + instMapping = instructions[instIndex] + } + m, err := parseInstrMapping(lastInstr, instMapping) + if err != nil { + return nil, fmt.Errorf("failed to parse instr element in source map: %w", err) + } + + for j := 0; j < instLen; j++ { + srcMap.Instr = append(srcMap.Instr, m) + } + i += instLen + instIndex += 1 + } + return srcMap, nil +} + +func NewSourceMapTracer(srcMaps map[common.Address]*SourceMap, out io.Writer) *SourceMapTracer { + return &SourceMapTracer{srcMaps, out} +} + +type SourceMapTracer struct { + srcMaps map[common.Address]*SourceMap + out io.Writer +} + +func (s *SourceMapTracer) CaptureStateAfter(pc uint64, op vm.OpCode, gas, cost uint64, scope *vm.ScopeContext, rData []byte, depth int, err error) { + panic("not implemented") +} + +func (s *SourceMapTracer) CaptureTxStart(gasLimit uint64) {} + +func (s *SourceMapTracer) CaptureTxEnd(restGas uint64) {} + +func (s *SourceMapTracer) CaptureStart(env *vm.EVM, from common.Address, to common.Address, create bool, input []byte, gas uint64, value *big.Int) { +} + +func (s *SourceMapTracer) CaptureEnd(output []byte, gasUsed uint64, err error) {} + +func (s *SourceMapTracer) CaptureEnter(typ vm.OpCode, from common.Address, to common.Address, input []byte, gas uint64, value *big.Int) { +} + +func (s *SourceMapTracer) CaptureExit(output []byte, gasUsed uint64, err error) {} + +func (s *SourceMapTracer) info(codeAddr *common.Address, pc uint64) string { + info := "non-contract" + if codeAddr != nil { + srcMap, ok := s.srcMaps[*codeAddr] + if ok { + info = srcMap.FormattedInfo(pc) + } else { + info = "unknown-contract" + } + } + return info +} + +func (s *SourceMapTracer) CaptureState(pc uint64, op vm.OpCode, gas, cost uint64, scope *vm.ScopeContext, rData []byte, depth int, err error) { + if op.IsPush() { + start := uint64(op) - uint64(vm.PUSH1) + 1 + end := pc + 1 + start + val := scope.Contract.Code[pc+1 : end] + fmt.Fprintf(s.out, "%-40s : pc %x opcode %s (%x)\n", s.info(scope.Contract.CodeAddr, pc), pc, op.String(), val) + return + } + fmt.Fprintf(s.out, "%-40s : pc %x opcode %s\n", s.info(scope.Contract.CodeAddr, pc), pc, op.String()) +} + +func (s *SourceMapTracer) CaptureFault(pc uint64, op vm.OpCode, gas, cost uint64, scope *vm.ScopeContext, depth int, err error) { + fmt.Fprintf(s.out, "%-40s: pc %x opcode %s FAULT %v\n", s.info(scope.Contract.CodeAddr, pc), pc, op.String(), err) + fmt.Println("----") + fmt.Fprintf(s.out, "calldata: %x\n", scope.Contract.Input) + fmt.Println("----") + fmt.Fprintf(s.out, "memory: %x\n", scope.Memory.Data()) + fmt.Println("----") + fmt.Fprintf(s.out, "stack:\n") + stack := scope.Stack.Data() + for i := range stack { + fmt.Fprintf(s.out, "%3d: %x\n", -i, stack[len(stack)-1-i].Bytes32()) + } +} + +var _ vm.EVMLogger = (*SourceMapTracer)(nil) diff --git a/op-chain-ops/srcmap/solutil_test.go b/op-chain-ops/srcmap/solutil_test.go new file mode 100644 index 000000000..269f61efd --- /dev/null +++ b/op-chain-ops/srcmap/solutil_test.go @@ -0,0 +1,36 @@ +package srcmap + +import ( + "path" + "strings" + "testing" + + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/stretchr/testify/require" + + "github.com/ethereum-optimism/optimism/op-bindings/bindings" +) + +func TestSourcemap(t *testing.T) { + t.Skip("TODO(clabby): This test is disabled until source IDs have been added to foundry artifacts.") + + contractsDir := "../../packages/contracts-bedrock" + sources := []string{path.Join(contractsDir, "src/cannon/MIPS.sol")} + for i, source := range sources { + sources[i] = path.Join(contractsDir, source) + } + + deployedByteCode := hexutil.MustDecode(bindings.MIPSDeployedBin) + srcMap, err := ParseSourceMap( + sources, + deployedByteCode, + bindings.MIPSDeployedSourceMap) + require.NoError(t, err) + + for i := 0; i < len(deployedByteCode); i++ { + info := srcMap.FormattedInfo(uint64(i)) + if strings.HasPrefix(info, "unknown") { + t.Fatalf("unexpected info: %q", info) + } + } +} diff --git a/op-chain-ops/state/encoding.go b/op-chain-ops/state/encoding.go index 0e563997c..5e98aba83 100644 --- a/op-chain-ops/state/encoding.go +++ b/op-chain-ops/state/encoding.go @@ -8,11 +8,11 @@ import ( "regexp" "strings" + "github.com/ethereum-optimism/optimism/op-bindings/solc" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/crypto" - - "github.com/ethereum-optimism/optimism/op-bindings/solc" ) // EncodeStorageKeyValue encodes the key value pair that is stored in state diff --git a/op-chain-ops/state/memory_db_test.go b/op-chain-ops/state/memory_db_test.go index d0560145b..271a625a2 100644 --- a/op-chain-ops/state/memory_db_test.go +++ b/op-chain-ops/state/memory_db_test.go @@ -7,11 +7,10 @@ import ( "testing" "time" + "github.com/ethereum-optimism/optimism/op-chain-ops/state" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" "github.com/stretchr/testify/require" - - "github.com/ethereum-optimism/optimism/op-chain-ops/state" ) func TestAddBalance(t *testing.T) { diff --git a/op-chain-ops/state/state.go b/op-chain-ops/state/state.go index 77e9c8ba9..96156f1c1 100644 --- a/op-chain-ops/state/state.go +++ b/op-chain-ops/state/state.go @@ -5,12 +5,11 @@ import ( "fmt" "math/big" + "github.com/ethereum-optimism/optimism/op-bindings/bindings" + "github.com/ethereum-optimism/optimism/op-bindings/solc" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/log" - - "github.com/ethereum-optimism/optimism/op-bindings/bindings" - "github.com/ethereum-optimism/optimism/op-bindings/solc" ) var ( diff --git a/op-chain-ops/state/state_test.go b/op-chain-ops/state/state_test.go index 968f0df96..f596d3027 100644 --- a/op-chain-ops/state/state_test.go +++ b/op-chain-ops/state/state_test.go @@ -12,11 +12,12 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/crypto" - "github.com/stretchr/testify/require" "github.com/ethereum-optimism/optimism/op-bindings/solc" "github.com/ethereum-optimism/optimism/op-chain-ops/state" "github.com/ethereum-optimism/optimism/op-chain-ops/state/testdata" + + "github.com/stretchr/testify/require" ) var ( diff --git a/op-e2e/.gitignore b/op-e2e/.gitignore new file mode 100644 index 000000000..7db44382a --- /dev/null +++ b/op-e2e/.gitignore @@ -0,0 +1 @@ +external_*/shim diff --git a/op-e2e/README.md b/op-e2e/README.md index a087cf93e..301d7dddf 100644 --- a/op-e2e/README.md +++ b/op-e2e/README.md @@ -1,7 +1,7 @@ # op-e2e The end to end tests in this repo depend on genesis state that is -created with the `bedrock-devnet` package. To create this state, +created with the `kroma-devnet` package. To create this state, run the following commands from the root of the repository: ```bash @@ -12,7 +12,7 @@ make devnet-allocs This will leave artifacts in the `.devnet` directory that will be read into `op-e2e` at runtime. The default deploy configuration used for starting all `op-e2e` based tests can be found in -`packages/contracts-bedrock/deploy-config/devnetL1.json`. There +`packages/contracts/deploy-config/devnetL1.json`. There are some values that are safe to change in memory in `op-e2e` at runtime, but others cannot be changed or else it will result in broken tests. Any changes to `devnetL1.json` should result in diff --git a/op-e2e/actions/blocktime_test.go b/op-e2e/actions/blocktime_test.go index c3ec7931a..361327cf5 100644 --- a/op-e2e/actions/blocktime_test.go +++ b/op-e2e/actions/blocktime_test.go @@ -4,12 +4,13 @@ import ( "math/big" "testing" - "github.com/ethereum-optimism/optimism/op-e2e/e2eutils" - "github.com/ethereum-optimism/optimism/op-service/testlog" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" "github.com/stretchr/testify/require" + + "github.com/ethereum-optimism/optimism/op-e2e/e2eutils" + "github.com/ethereum-optimism/optimism/op-service/testlog" ) // TestBatchInLastPossibleBlocks tests that the derivation pipeline @@ -22,6 +23,7 @@ func TestBatchInLastPossibleBlocks(gt *testing.T) { dp := e2eutils.MakeDeployParams(t, defaultRollupTestParams) dp.DeployConfig.SequencerWindowSize = 4 dp.DeployConfig.L2BlockTime = 2 + dp.DeployConfig.ValidatorPoolRoundDuration = dp.DeployConfig.L2OutputOracleSubmissionInterval sd := e2eutils.Setup(t, dp, defaultAlloc) log := testlog.Logger(t, log.LvlDebug) @@ -134,6 +136,7 @@ func TestLargeL1Gaps(gt *testing.T) { dp.DeployConfig.L2BlockTime = 2 dp.DeployConfig.SequencerWindowSize = 4 dp.DeployConfig.MaxSequencerDrift = 32 + dp.DeployConfig.ValidatorPoolRoundDuration = dp.DeployConfig.L2OutputOracleSubmissionInterval sd := e2eutils.Setup(t, dp, defaultAlloc) log := testlog.Logger(t, log.LvlDebug) diff --git a/op-e2e/actions/l2_challenger_test.go b/op-e2e/actions/l2_challenger_test.go index 937ef4aee..de2c9e279 100644 --- a/op-e2e/actions/l2_challenger_test.go +++ b/op-e2e/actions/l2_challenger_test.go @@ -1,6 +1,7 @@ package actions import ( + "fmt" "math/big" "testing" @@ -13,7 +14,7 @@ import ( ) func TestChallenge(t *testing.T) { - rt := defaultRuntime(t) + rt := defaultRuntime(t, setupSequencerTest) rt.setTargetInvalidBlockNumber(testdata.TargetBlockNumber) rt.setupMaliciousValidator() @@ -38,14 +39,14 @@ interaction: case chal.StatusChallengerTurn: // call bisect by challenger rt.txHash = rt.challenger1.ActBisect(rt.t, rt.outputIndex, rt.challenger1.address, false) - rt.miner.includeL1Block(rt.t, rt.challenger1.address) + rt.IncludeL1Block(rt.challenger1.address) case chal.StatusAsserterTurn: // call bisect by validator rt.txHash = rt.validator.ActBisect(rt.t, rt.outputIndex, rt.challenger1.address, true) - rt.miner.includeL1Block(rt.t, rt.validator.address) + rt.IncludeL1Block(rt.validator.address) case chal.StatusReadyToProve: rt.txHash = rt.challenger1.ActProveFault(rt.t, rt.outputIndex, false) - rt.miner.includeL1Block(rt.t, rt.challenger1.address) + rt.IncludeL1Block(rt.challenger1.address) case chal.StatusNone: // guardian validates deleted output by challenger is invalid after challenge is proven outputBlockNum := rt.outputOnL1.L2BlockNumber.Uint64() @@ -83,7 +84,7 @@ interaction: } func TestChallengeAsserterBisectTimeout(t *testing.T) { - rt := defaultRuntime(t) + rt := defaultRuntime(t, setupSequencerTest) rt.setTargetInvalidBlockNumber(testdata.TargetBlockNumber) rt.setupMaliciousValidator() @@ -110,7 +111,7 @@ interaction: rt.miner.ActEmptyBlock(rt.t) case chal.StatusAsserterTimeout: rt.txHash = rt.challenger1.ActProveFault(rt.t, rt.outputIndex, true) - rt.miner.includeL1Block(rt.t, rt.challenger1.address) + rt.IncludeL1Block(rt.challenger1.address) case chal.StatusNone: // guardian validates deleted output by challenger is invalid after challenge is proven outputBlockNum := rt.outputOnL1.L2BlockNumber.Uint64() @@ -148,7 +149,7 @@ interaction: } func TestChallengeChallengerBisectTimeout(t *testing.T) { - rt := defaultRuntime(t) + rt := defaultRuntime(t, setupSequencerTest) rt.setTargetInvalidBlockNumber(testdata.TargetBlockNumber) rt.setupMaliciousValidator() @@ -175,11 +176,11 @@ interaction: case chal.StatusAsserterTurn: // call bisect by validator rt.txHash = rt.validator.ActBisect(rt.t, rt.outputIndex, rt.challenger1.address, true) - rt.miner.includeL1Block(rt.t, rt.validator.address) + rt.IncludeL1Block(rt.validator.address) case chal.StatusChallengerTimeout: // call challenger timeout by validator rt.txHash = rt.validator.ActChallengerTimeout(rt.t, rt.outputIndex, rt.challenger1.address) - rt.miner.includeL1Block(rt.t, rt.validator.address) + rt.IncludeL1Block(rt.validator.address) default: break interaction } @@ -211,7 +212,7 @@ interaction: } func TestChallengeChallengerProvingTimeout(t *testing.T) { - rt := defaultRuntime(t) + rt := defaultRuntime(t, setupSequencerTest) rt.setTargetInvalidBlockNumber(testdata.TargetBlockNumber) rt.setupMaliciousValidator() @@ -235,18 +236,18 @@ interaction: case chal.StatusChallengerTurn: // call bisect by challenger rt.txHash = rt.challenger1.ActBisect(rt.t, rt.outputIndex, rt.challenger1.address, false) - rt.miner.includeL1Block(rt.t, rt.challenger1.address) + rt.IncludeL1Block(rt.challenger1.address) case chal.StatusAsserterTurn: // call bisect by validator rt.txHash = rt.validator.ActBisect(rt.t, rt.outputIndex, rt.challenger1.address, true) - rt.miner.includeL1Block(rt.t, rt.validator.address) + rt.IncludeL1Block(rt.validator.address) case chal.StatusReadyToProve: // do nothing to trigger challenger proving timeout rt.miner.ActEmptyBlock(rt.t) case chal.StatusChallengerTimeout: // call challenger timeout by validator rt.txHash = rt.validator.ActChallengerTimeout(rt.t, rt.outputIndex, rt.challenger1.address) - rt.miner.includeL1Block(rt.t, rt.validator.address) + rt.IncludeL1Block(rt.validator.address) default: break interaction } @@ -278,7 +279,7 @@ interaction: } func TestChallengeInvalidProofFail(t *testing.T) { - rt := defaultRuntime(t) + rt := defaultRuntime(t, setupSequencerTest) rt.setTargetInvalidBlockNumber(testdata.TargetBlockNumber) rt.setupMaliciousValidator() @@ -303,14 +304,14 @@ interaction: case chal.StatusChallengerTurn: // call bisect by challenger rt.txHash = rt.challenger1.ActBisect(rt.t, rt.outputIndex, rt.challenger1.address, false) - rt.miner.includeL1Block(rt.t, rt.challenger1.address) + rt.IncludeL1Block(rt.challenger1.address) case chal.StatusAsserterTurn: // call bisect by validator rt.txHash = rt.validator.ActBisect(rt.t, rt.outputIndex, rt.challenger1.address, true) - rt.miner.includeL1Block(rt.t, rt.validator.address) + rt.IncludeL1Block(rt.validator.address) case chal.StatusReadyToProve: rt.txHash = rt.challenger1.ActProveFault(rt.t, rt.outputIndex, false) - rt.miner.includeL1Block(rt.t, rt.challenger1.address) + rt.IncludeL1Block(rt.challenger1.address) case chal.StatusNone: // get txId from receipt var transactionId *big.Int @@ -333,7 +334,7 @@ interaction: isEqual := rt.guardian.ActValidateL2Output(rt.t, rt.outputOnL1.OutputRoot, outputBlockNum) require.True(rt.t, isEqual, "deleted output is expected equal but actually not equal") rt.txHash = rt.guardian.ActConfirmTransaction(rt.t, rt.outputIndex, transactionId) - rt.miner.includeL1Block(rt.t, rt.guardian.address) + rt.IncludeL1Block(rt.guardian.address) break interaction default: break interaction @@ -366,7 +367,7 @@ interaction: } func TestMultipleChallenges(t *testing.T) { - rt := defaultRuntime(t) + rt := defaultRuntime(t, setupSequencerTest) rt.setTargetInvalidBlockNumber(testdata.TargetBlockNumber) rt.setupMaliciousValidator() @@ -394,14 +395,14 @@ interaction1: case chal.StatusChallengerTurn: // call bisect by challenger rt.txHash = rt.challenger1.ActBisect(rt.t, rt.outputIndex, rt.challenger1.address, false) - rt.miner.includeL1Block(rt.t, rt.challenger1.address) + rt.IncludeL1Block(rt.challenger1.address) case chal.StatusAsserterTurn: // call bisect by validator rt.txHash = rt.validator.ActBisect(rt.t, rt.outputIndex, rt.challenger1.address, true) - rt.miner.includeL1Block(rt.t, rt.validator.address) + rt.IncludeL1Block(rt.validator.address) case chal.StatusReadyToProve: rt.txHash = rt.challenger1.ActProveFault(rt.t, rt.outputIndex, false) - rt.miner.includeL1Block(rt.t, rt.challenger1.address) + rt.IncludeL1Block(rt.challenger1.address) case chal.StatusNone: // guardian validates deleted output by challenger is invalid after challenge is proven outputBlockNum := rt.outputOnL1.L2BlockNumber.Uint64() @@ -445,7 +446,7 @@ interaction2: case chal.StatusAsserterTimeout: // call bisect by challenger rt.txHash = rt.challenger2.ActProveFault(rt.t, rt.outputIndex, true) - rt.miner.includeL1Block(rt.t, rt.challenger2.address) + rt.IncludeL1Block(rt.challenger2.address) default: break interaction2 } @@ -468,7 +469,7 @@ interaction2: } func TestChallengeForceDeleteOutputBySecurityCouncil(t *testing.T) { - rt := defaultRuntime(t) + rt := defaultRuntime(t, setupSequencerTest) rt.SetCreationPeriod(9) rt.setTargetInvalidBlockNumber(testdata.TargetBlockNumber) @@ -494,17 +495,17 @@ interaction: case chal.StatusChallengerTurn: // call bisect by challenger rt.txHash = rt.challenger1.ActBisect(rt.t, rt.outputIndex, rt.challenger1.address, false) - rt.miner.includeL1Block(rt.t, rt.challenger1.address) + rt.IncludeL1Block(rt.challenger1.address) case chal.StatusAsserterTurn: // call bisect by validator rt.txHash = rt.validator.ActBisect(rt.t, rt.outputIndex, rt.challenger1.address, true) - rt.miner.includeL1Block(rt.t, rt.validator.address) + rt.IncludeL1Block(rt.validator.address) case chal.StatusAsserterTimeout: rt.txHash = rt.challenger1.ActProveFault(rt.t, rt.outputIndex, true) - rt.miner.includeL1Block(rt.t, rt.challenger1.address) + rt.IncludeL1Block(rt.challenger1.address) case chal.StatusChallengerTimeout: rt.txHash = rt.validator.ActChallengerTimeout(rt.t, rt.outputIndex, rt.challenger1.address) - rt.miner.includeL1Block(rt.t, rt.validator.address) + rt.IncludeL1Block(rt.validator.address) case chal.StatusReadyToProve: // do nothing rt.miner.ActEmptyBlock(rt.t) @@ -514,8 +515,11 @@ interaction: isEqual := rt.guardian.ActValidateL2Output(rt.t, rt.outputOnL1.OutputRoot, outputBlockNum) require.False(t, isEqual) + votes, _ := rt.securityCouncilContract.GetVotes(nil, rt.guardian.address) + fmt.Printf("asdfasdfasdf %d\n", votes) + rt.txHash = rt.guardian.ActForceDeleteOutput(rt.t, rt.outputIndex) - rt.miner.includeL1Block(rt.t, rt.challenger1.address) + rt.IncludeL1Block(rt.challenger1.address) break interaction } default: diff --git a/op-e2e/actions/l2_runtime.go b/op-e2e/actions/l2_runtime.go index 80dc5abc1..66fabddc5 100644 --- a/op-e2e/actions/l2_runtime.go +++ b/op-e2e/actions/l2_runtime.go @@ -10,12 +10,12 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/stretchr/testify/require" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" + e2e "github.com/ethereum-optimism/optimism/op-e2e" + "github.com/ethereum-optimism/optimism/op-e2e/e2eutils" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/sources" "github.com/ethereum-optimism/optimism/op-service/testlog" - "github.com/ethereum-optimism/optimism/op-e2e/e2eutils" - e2e "github.com/ethereum-optimism/optimism/op-e2e" + "github.com/kroma-network/kroma/kroma-bindings/bindings" ) const defaultDepositAmount = 1_000 @@ -42,21 +42,23 @@ type Runtime struct { outputOnL1 bindings.TypesCheckpointOutput txHash common.Hash receipt *types.Receipt + l1BlockDelta uint64 } -func defaultRuntime(gt *testing.T) Runtime { +type SetupSequencerTestFunc = func(t Testing, sd *e2eutils.SetupData, log log.Logger) (*L1Miner, *L2Engine, *L2Sequencer) + +func defaultRuntime(gt *testing.T, setupSequencerTest SetupSequencerTestFunc) Runtime { t := NewDefaultTesting(gt) dp := e2eutils.MakeDeployParams(t, defaultRollupTestParams) - dp.DeployConfig.FinalizationPeriodSeconds = 60 * 60 * 24 - dp.DeployConfig.ColosseumCreationPeriodSeconds = 60 * 60 * 20 dp.DeployConfig.ColosseumDummyHash = common.HexToHash(e2e.DummyHashDev) sd := e2eutils.Setup(t, dp, defaultAlloc) l := testlog.Logger(t, log.LvlDebug) rt := Runtime{ - t: t, - dp: dp, - sd: sd, - l: l, + t: t, + dp: dp, + sd: sd, + l: l, + l1BlockDelta: 6, } rt.miner, rt.seqEngine, rt.sequencer = setupSequencerTest(rt.t, rt.sd, rt.l) @@ -167,7 +169,7 @@ func (rt *Runtime) setupOutputSubmitted() { // only be submitted at 1801 finalized blocks. In fact, the following code is designed to // create one or more finalized L2 blocks in order to pass the test. If Proto Dank Sharding // is introduced, the below code fix may no longer be necessary. - for i := 0; i < 5; i++ { + for i := 0; i < 2; i++ { // L1 block rt.miner.ActEmptyBlock(rt.t) // L2 block @@ -176,7 +178,7 @@ func (rt *Runtime) setupOutputSubmitted() { rt.sequencer.ActBuildToL1Head(rt.t) // submit and include in L1 rt.batcher.ActSubmitAll(rt.t) - rt.miner.includeL1Block(rt.t, rt.dp.Addresses.Batcher) + rt.IncludeL1Block(rt.dp.Addresses.Batcher) // finalize the first and second L1 blocks, including the batch rt.miner.ActL1SafeNext(rt.t) rt.miner.ActL1SafeNext(rt.t) @@ -190,7 +192,7 @@ func (rt *Runtime) setupOutputSubmitted() { // deposit bond for validator rt.validator.ActDeposit(rt.t, defaultDepositAmount) - rt.miner.includeL1Block(rt.t, rt.validator.address) + rt.IncludeL1Block(rt.validator.address) // check validator balance increased bal, err := rt.valPoolContract.BalanceOf(nil, rt.validator.address) @@ -208,7 +210,7 @@ func (rt *Runtime) setupOutputSubmitted() { // and submit it to L1 rt.validator.ActSubmitL2Output(rt.t) // include output on L1 - rt.miner.includeL1Block(rt.t, rt.validator.address) + rt.IncludeL1Block(rt.validator.address) // Check submission was successful receipt, err := rt.miner.EthClient().TransactionReceipt(rt.t.Ctx(), rt.validator.LastSubmitL2OutputTx()) require.NoError(rt.t, err) @@ -237,7 +239,7 @@ func (rt *Runtime) setupChallenge(challenger *L2Validator) { // deposit bond for challenger challenger.ActDeposit(rt.t, defaultDepositAmount) - rt.miner.includeL1Block(rt.t, challenger.address) + rt.IncludeL1Block(challenger.address) // check bond amount before create challenge bond, err := rt.valPoolContract.GetBond(nil, rt.outputIndex) @@ -248,7 +250,7 @@ func (rt *Runtime) setupChallenge(challenger *L2Validator) { rt.txHash = challenger.ActCreateChallenge(rt.t, rt.outputIndex) // include tx on L1 - rt.miner.includeL1Block(rt.t, challenger.address) + rt.IncludeL1Block(challenger.address) // Check whether the submission was successful rt.receipt, err = rt.miner.EthClient().TransactionReceipt(rt.t.Ctx(), rt.txHash) @@ -284,3 +286,9 @@ func (rt *Runtime) IsCreationEnded() bool { func (rt *Runtime) SetCreationPeriod(period uint64) { rt.dp.DeployConfig.ColosseumCreationPeriodSeconds = period } + +func (rt *Runtime) IncludeL1Block(from common.Address) { + rt.miner.ActL1StartBlock(rt.l1BlockDelta)(rt.t) + rt.miner.ActL1IncludeTx(from)(rt.t) + rt.miner.ActL1EndBlock(rt.t) +} diff --git a/op-e2e/actions/l2_sequencer.go b/op-e2e/actions/l2_sequencer.go index 776bc92ff..625356f4b 100644 --- a/op-e2e/actions/l2_sequencer.go +++ b/op-e2e/actions/l2_sequencer.go @@ -7,14 +7,12 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/stretchr/testify/require" - "github.com/ethereum-optimism/optimism/op-e2e/e2eutils" "github.com/ethereum-optimism/optimism/op-node/metrics" "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-node/rollup/driver" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" "github.com/ethereum-optimism/optimism/op-service/eth" - "github.com/ethereum-optimism/optimism/op-service/sources" ) // MockL1OriginSelector is a shim to override the origin as sequencer, so we can force it to stay on an older origin. @@ -57,21 +55,6 @@ func NewL2Sequencer(t Testing, log log.Logger, l1 derive.L1Fetcher, eng L2API, c } } -func setupSequencerTest(t Testing, sd *e2eutils.SetupData, log log.Logger) (*L1Miner, *L2Engine, *L2Sequencer) { - jwtPath := e2eutils.WriteDefaultJWT(t) - - miner := NewL1Miner(t, log, sd.L1Cfg) - - l1F, err := sources.NewL1Client(miner.RPCClient(), log, nil, sources.L1ClientDefaultConfig(sd.RollupCfg, false, sources.RPCKindBasic)) - require.NoError(t, err) - engine := NewL2Engine(t, log, sd.L2Cfg, sd.RollupCfg.Genesis.L1, jwtPath) - l2Cl, err := sources.NewEngineClient(engine.RPCClient(), log, nil, sources.EngineClientDefaultConfig(sd.RollupCfg)) - require.NoError(t, err) - - sequencer := NewL2Sequencer(t, log, l1F, l2Cl, sd.RollupCfg, 0) - return miner, engine, sequencer -} - // ActL2StartBlock starts building of a new L2 block on top of the head func (s *L2Sequencer) ActL2StartBlock(t Testing) { s.ActL2StartBlockCheckErr(t, nil) @@ -173,3 +156,11 @@ func (s *L2Sequencer) ActBuildToL1HeadExclUnsafe(t Testing) { s.ActL2EndBlock(t) } } + +func (s *L2Sequencer) ActBuildL2ToRegolith(t Testing) { + require.NotNil(t, s.rollupCfg.RegolithTime, "cannot activate Regolith when it is not scheduled") + for s.L2Unsafe().Time < *s.rollupCfg.RegolithTime { + s.ActL2StartBlock(t) + s.ActL2EndBlock(t) + } +} diff --git a/op-e2e/actions/l2_sequencer_test.go b/op-e2e/actions/l2_sequencer_test.go index 130c9f56a..17dc2a15f 100644 --- a/op-e2e/actions/l2_sequencer_test.go +++ b/op-e2e/actions/l2_sequencer_test.go @@ -12,9 +12,25 @@ import ( "github.com/stretchr/testify/require" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils" + "github.com/ethereum-optimism/optimism/op-service/sources" "github.com/ethereum-optimism/optimism/op-service/testlog" ) +func setupSequencerTest(t Testing, sd *e2eutils.SetupData, log log.Logger) (*L1Miner, *L2Engine, *L2Sequencer) { + jwtPath := e2eutils.WriteDefaultJWT(t) + + miner := NewL1Miner(t, log, sd.L1Cfg) + + l1F, err := sources.NewL1Client(miner.RPCClient(), log, nil, sources.L1ClientDefaultConfig(sd.RollupCfg, false, sources.RPCKindBasic)) + require.NoError(t, err) + engine := NewL2Engine(t, log, sd.L2Cfg, sd.RollupCfg.Genesis.L1, jwtPath) + l2Cl, err := sources.NewEngineClient(engine.RPCClient(), log, nil, sources.EngineClientDefaultConfig(sd.RollupCfg)) + require.NoError(t, err) + + sequencer := NewL2Sequencer(t, log, l1F, l2Cl, sd.RollupCfg, 0) + return miner, engine, sequencer +} + func TestL2Sequencer_SequencerDrift(gt *testing.T) { t := NewDefaultTesting(gt) p := &e2eutils.TestParams{ @@ -86,8 +102,9 @@ func TestL2Sequencer_SequencerDrift(gt *testing.T) { require.True(t, engine.engineApi.ForcedEmpty(), "engine should not be allowed to include anything after sequencer drift is surpassed") } -// This tests a chain halt where the sequencer would build an unsafe L2 block with a L1 origin -// that then gets reorged out, while the verifier-codepath only ever sees the valid post-reorg L1 chain. +// TestL2Sequencer_SequencerOnlyReorg regression-tests a Goerli halt where the sequencer +// would build an unsafe L2 block with a L1 origin that then gets reorged out, +// while the verifier-codepath only ever sees the valid post-reorg L1 chain. func TestL2Sequencer_SequencerOnlyReorg(gt *testing.T) { t := NewDefaultTesting(gt) dp := e2eutils.MakeDeployParams(t, defaultRollupTestParams) diff --git a/op-e2e/actions/l2_validator.go b/op-e2e/actions/l2_validator.go index 8c18e43ab..3043bc95c 100644 --- a/op-e2e/actions/l2_validator.go +++ b/op-e2e/actions/l2_validator.go @@ -15,12 +15,12 @@ import ( "github.com/ethereum/go-ethereum/params" "github.com/stretchr/testify/require" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils" kcrypto "github.com/ethereum-optimism/optimism/op-service/crypto" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/sources" "github.com/ethereum-optimism/optimism/op-service/txmgr" + "github.com/kroma-network/kroma/kroma-bindings/bindings" "github.com/kroma-network/kroma/kroma-validator" validatormetrics "github.com/kroma-network/kroma/kroma-validator/metrics" ) @@ -171,6 +171,7 @@ func (v *L2Validator) CalculateWaitTime(t Testing) time.Duration { func (v *L2Validator) ActSubmitL2Output(t Testing) { nextBlockNumber, err := v.l2os.FetchNextBlockNumber(t.Ctx()) require.NoError(t, err) + v.log.Info("output 제출된 block number", "num", nextBlockNumber) output, err := v.l2os.FetchOutput(t.Ctx(), nextBlockNumber) require.NoError(t, err) diff --git a/op-e2e/actions/l2_validator_test.go b/op-e2e/actions/l2_validator_test.go index b8106d42b..cc2522cae 100644 --- a/op-e2e/actions/l2_validator_test.go +++ b/op-e2e/actions/l2_validator_test.go @@ -7,10 +7,10 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/stretchr/testify/require" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" + "github.com/ethereum-optimism/optimism/op-e2e/e2eutils" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/testlog" - "github.com/ethereum-optimism/optimism/op-e2e/e2eutils" + "github.com/kroma-network/kroma/kroma-bindings/bindings" ) func TestValidator(gt *testing.T) { @@ -36,32 +36,24 @@ func TestValidator(gt *testing.T) { AllowNonFinalized: false, }, miner.EthClient(), seqEngine.EthClient(), sequencer.RollupClient()) - // NOTE(chokobole): It is necessary to wait for one finalized (or safe if AllowNonFinalized - // config is set) block to pass after each submission interval before submitting the output - // root. For example, if the submission interval is set to 1800 blocks, the output root can - // only be submitted at 1801 finalized blocks. In fact, the following code is designed to - // create one or more finalized L2 blocks in order to pass the test. If Proto Dank Sharding - // is introduced, the below code fix may no longer be necessary. - for i := 0; i < 2; i++ { - // L1 block - miner.ActEmptyBlock(t) - // L2 block - sequencer.ActL1HeadSignal(t) - sequencer.ActL2PipelineFull(t) - sequencer.ActBuildToL1Head(t) - // submit and include in L1 - batcher.ActSubmitAll(t) - miner.includeL1Block(t, dp.Addresses.Batcher) - // finalize the first and second L1 blocks, including the batch - miner.ActL1SafeNext(t) - miner.ActL1SafeNext(t) - miner.ActL1FinalizeNext(t) - miner.ActL1FinalizeNext(t) - // derive and see the L2 chain fully finalize - sequencer.ActL2PipelineFull(t) - sequencer.ActL1SafeSignal(t) - sequencer.ActL1FinalizedSignal(t) - } + // L1 block + miner.ActEmptyBlock(t) + // L2 block + sequencer.ActL1HeadSignal(t) + sequencer.ActL2PipelineFull(t) + sequencer.ActBuildToL1Head(t) + // submit and include in L1 + batcher.ActSubmitAll(t) + miner.includeL1Block(t, dp.Addresses.Batcher) + // finalize the first and second L1 blocks, including the batch + miner.ActL1SafeNext(t) + miner.ActL1SafeNext(t) + miner.ActL1FinalizeNext(t) + miner.ActL1FinalizeNext(t) + // derive and see the L2 chain fully finalize + sequencer.ActL2PipelineFull(t) + sequencer.ActL1SafeSignal(t) + sequencer.ActL1FinalizedSignal(t) // deposit bond for validator validator.ActDeposit(t, 1_000) diff --git a/op-e2e/actions/l2_verifier.go b/op-e2e/actions/l2_verifier.go index ed48433de..b20666cf2 100644 --- a/op-e2e/actions/l2_verifier.go +++ b/op-e2e/actions/l2_verifier.go @@ -82,7 +82,7 @@ func NewL2Verifier(t Testing, log log.Logger, l1 derive.L1Fetcher, eng L2API, cf backend := &l2VerifierBackend{verifier: rollupNode} apis := []rpc.API{ { - Namespace: "kroma", + Namespace: "optimism", Service: node.NewNodeAPI(cfg, eng, backend, log, m), Public: true, Authenticated: false, @@ -94,6 +94,12 @@ func NewL2Verifier(t Testing, log log.Logger, l1 derive.L1Fetcher, eng L2API, cf Public: true, // TODO: this field is deprecated. Do we even need this anymore? Authenticated: false, }, + { + Namespace: "kroma", + Service: node.NewNodeAPI(cfg, eng, backend, log, m), + Public: true, + Authenticated: false, + }, } require.NoError(t, gnode.RegisterApis(apis, nil, rollupNode.rpc), "failed to set up APIs") return rollupNode diff --git a/op-e2e/actions/reorg_test.go b/op-e2e/actions/reorg_test.go index e0bb0980c..b6e21d306 100644 --- a/op-e2e/actions/reorg_test.go +++ b/op-e2e/actions/reorg_test.go @@ -119,11 +119,11 @@ func TestReorgFlipFlop(gt *testing.T) { verifEngClient := verifierEng.EngineClient(t, sd.RollupCfg) checkVerifEngine := func() { // TODO: geth preserves L2 chain with origin A1 after flip-flopping to B? - //ref, err := verifEngClient.L2BlockRefByLabel(t.Ctx(), eth.Unsafe) - //require.NoError(t, err) - //t.Logf("l2 unsafe head %s with origin %s", ref, ref.L1Origin) - //require.NotEqual(t, verifier.L2Unsafe().Hash, ref.ParentHash, "TODO off by one, engine syncs A0 after reorging back from B, while rollup node only inserts up to A0 (excl.)") - //require.Equal(t, verifier.L2Unsafe(), ref, "verifier safe head of engine matches rollup client") + // ref, err := verifEngClient.L2BlockRefByLabel(t.Ctx(), eth.Unsafe) + // require.NoError(t, err) + // t.Logf("l2 unsafe head %s with origin %s", ref, ref.L1Origin) + // require.NotEqual(t, verifier.L2Unsafe().Hash, ref.ParentHash, "TODO off by one, engine syncs A0 after reorging back from B, while rollup node only inserts up to A0 (excl.)") + // require.Equal(t, verifier.L2Unsafe(), ref, "verifier safe head of engine matches rollup client") ref, err := verifEngClient.L2BlockRefByLabel(t.Ctx(), eth.Safe) require.NoError(t, err) @@ -290,7 +290,7 @@ func TestReorgFlipFlop(gt *testing.T) { // 12. Sync the verifier and assert that the L2 safe head L1 origin has caught up with chain B // 13. Ensure that the parent L2 block of the block that contains Alice's transaction still exists // after the L2 has re-derived from chain B. -// 14. Ensure that the L2 block that contained Alice's transaction before the reorg no longer exists. +// 14. Ensure that the L2 block that contained Alice's transction before the reorg no longer exists. // // Chain A // - 61 blocks total @@ -352,7 +352,7 @@ func TestDeepReorg(gt *testing.T) { AddressCorpora: addresses, Bindings: NewL2Bindings(t, l2Client, seqEngine.GethClient()), } - alice := NewCrossLayerUser(log, dp.Secrets.Alice, rand.New(rand.NewSource(0xa57b)), sd.RollupCfg) + alice := NewCrossLayerUser(log, dp.Secrets.Alice, rand.New(rand.NewSource(0xa57b))) alice.L2.SetUserEnv(l2UserEnv) // Run one iteration of the L2 derivation pipeline @@ -557,9 +557,9 @@ type rpcWrapper struct { client.RPC } -// TestRestartKromaGeth tests that the sequencer can restart its execution engine without rollup-node restart, +// TestRestartOpGeth tests that the sequencer can restart its execution engine without rollup-node restart, // including recovering the finalized/safe state of L2 chain without reorging. -func TestRestartKromaGeth(gt *testing.T) { +func TestRestartOpGeth(gt *testing.T) { t := NewDefaultTesting(gt) dbPath := path.Join(t.TempDir(), "testdb") dbOption := func(_ *ethconfig.Config, nodeCfg *node.Config) error { @@ -685,7 +685,7 @@ func TestConflictingL2Blocks(gt *testing.T) { AddressCorpora: addresses, Bindings: NewL2Bindings(t, l2Cl, altSeqEng.GethClient()), } - alice := NewCrossLayerUser(log, dp.Secrets.Alice, rand.New(rand.NewSource(1234)), sd.RollupCfg) + alice := NewCrossLayerUser(log, dp.Secrets.Alice, rand.New(rand.NewSource(1234))) alice.L2.SetUserEnv(l2UserEnv) sequencer.ActL2PipelineFull(t) diff --git a/op-e2e/actions/system_config_test.go b/op-e2e/actions/system_config_test.go index 2fe790c10..4d6311f40 100644 --- a/op-e2e/actions/system_config_test.go +++ b/op-e2e/actions/system_config_test.go @@ -11,12 +11,12 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/stretchr/testify/require" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/testlog" + "github.com/kroma-network/kroma/kroma-bindings/bindings" ) // TestBatcherKeyRotation tests that batcher A can operate, then be replaced with batcher B, then ignore old batcher A, @@ -26,6 +26,7 @@ func TestBatcherKeyRotation(gt *testing.T) { dp := e2eutils.MakeDeployParams(t, defaultRollupTestParams) dp.DeployConfig.L2BlockTime = 2 + dp.DeployConfig.ValidatorPoolRoundDuration = dp.DeployConfig.L2OutputOracleSubmissionInterval sd := e2eutils.Setup(t, dp, defaultAlloc) log := testlog.Logger(t, log.LvlDebug) miner, seqEngine, sequencer := setupSequencerTest(t, sd, log) @@ -72,19 +73,19 @@ func TestBatcherKeyRotation(gt *testing.T) { sysCfgContract, err := bindings.NewSystemConfig(sd.RollupCfg.L1SystemConfigAddress, miner.EthClient()) require.NoError(t, err) - proxyAdminOwner, err := bind.NewKeyedTransactorWithChainID(dp.Secrets.ProxyAdminOwner, sd.RollupCfg.L1ChainID) + proxyAdminOwner, err := bind.NewKeyedTransactorWithChainID(dp.Secrets.SysCfgOwner, sd.RollupCfg.L1ChainID) require.NoError(t, err) owner, err := sysCfgContract.Owner(&bind.CallOpts{}) require.NoError(t, err) - require.Equal(t, dp.Addresses.ProxyAdminOwner, owner, "system config owner mismatch") + require.Equal(t, dp.Addresses.CliqueSigner, owner, "system config owner mismatch") // Change the batch sender key to Bob! tx, err := sysCfgContract.SetBatcherHash(proxyAdminOwner, dp.Addresses.Bob.Hash()) require.NoError(t, err) t.Logf("batcher changes in L1 tx %s", tx.Hash()) miner.ActL1StartBlock(12)(t) - miner.ActL1IncludeTx(dp.Addresses.ProxyAdminOwner)(t) + miner.ActL1IncludeTx(dp.Addresses.SysCfgOwner)(t) miner.ActL1EndBlock(t) receipt, err := miner.EthClient().TransactionReceipt(t.Ctx(), tx.Hash()) @@ -256,7 +257,7 @@ func TestGPOParamsChange(gt *testing.T) { sysCfgContract, err := bindings.NewSystemConfig(sd.RollupCfg.L1SystemConfigAddress, miner.EthClient()) require.NoError(t, err) - proxyAdminOwner, err := bind.NewKeyedTransactorWithChainID(dp.Secrets.ProxyAdminOwner, sd.RollupCfg.L1ChainID) + proxyAdminOwner, err := bind.NewKeyedTransactorWithChainID(dp.Secrets.SysCfgOwner, sd.RollupCfg.L1ChainID) require.NoError(t, err) // overhead changes from 2100 (default) to 1000 @@ -267,7 +268,7 @@ func TestGPOParamsChange(gt *testing.T) { // include the GPO change tx in L1 miner.ActL1StartBlock(12)(t) - miner.ActL1IncludeTx(dp.Addresses.ProxyAdminOwner)(t) + miner.ActL1IncludeTx(dp.Addresses.SysCfgOwner)(t) miner.ActL1EndBlock(t) basefeeGPOUpdate := miner.l1Chain.CurrentBlock().BaseFee @@ -353,7 +354,7 @@ func TestGasLimitChange(gt *testing.T) { sysCfgContract, err := bindings.NewSystemConfig(sd.RollupCfg.L1SystemConfigAddress, miner.EthClient()) require.NoError(t, err) - proxyAdminOwner, err := bind.NewKeyedTransactorWithChainID(dp.Secrets.ProxyAdminOwner, sd.RollupCfg.L1ChainID) + proxyAdminOwner, err := bind.NewKeyedTransactorWithChainID(dp.Secrets.SysCfgOwner, sd.RollupCfg.L1ChainID) require.NoError(t, err) _, err = sysCfgContract.SetGasLimit(proxyAdminOwner, oldGasLimit*3) @@ -361,7 +362,7 @@ func TestGasLimitChange(gt *testing.T) { // include the gaslimit update on L1 miner.ActL1StartBlock(12)(t) - miner.ActL1IncludeTx(dp.Addresses.ProxyAdminOwner)(t) + miner.ActL1IncludeTx(dp.Addresses.SysCfgOwner)(t) miner.ActL1EndBlock(t) // build to latest L1, excluding the block that adopts the L1 block with the gaslimit change @@ -412,7 +413,7 @@ func TestValidatorRewardScalarChange(gt *testing.T) { sysCfgContract, err := bindings.NewSystemConfig(sd.RollupCfg.L1SystemConfigAddress, miner.EthClient()) require.NoError(t, err) - proxyAdminOwner, err := bind.NewKeyedTransactorWithChainID(dp.Secrets.ProxyAdminOwner, sd.RollupCfg.L1ChainID) + proxyAdminOwner, err := bind.NewKeyedTransactorWithChainID(dp.Secrets.SysCfgOwner, sd.RollupCfg.L1ChainID) require.NoError(t, err) // if the validator reward scalar is not set on SystemConfig contract, the contract must have a value of 0. @@ -435,7 +436,7 @@ func TestValidatorRewardScalarChange(gt *testing.T) { // include the validator reward scalar update on L1 miner.ActL1StartBlock(12)(t) - miner.ActL1IncludeTx(dp.Addresses.ProxyAdminOwner)(t) + miner.ActL1IncludeTx(dp.Addresses.SysCfgOwner)(t) miner.ActL1EndBlock(t) // build to latest L1, excluding the block that adopts the L1 block with the validator reward scalar change diff --git a/op-e2e/actions/user.go b/op-e2e/actions/user.go index 63eb7bbff..a28e5eb3f 100644 --- a/op-e2e/actions/user.go +++ b/op-e2e/actions/user.go @@ -17,13 +17,12 @@ import ( "github.com/ethereum/go-ethereum/params" "github.com/stretchr/testify/require" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" - "github.com/ethereum-optimism/optimism/op-bindings/predeploys" - "github.com/ethereum-optimism/optimism/op-e2e/e2eutils" - "github.com/ethereum-optimism/optimism/op-node/rollup" + "github.com/ethereum-optimism/optimism/op-e2e/config" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-node/withdrawals" "github.com/ethereum-optimism/optimism/op-service/eth" + "github.com/kroma-network/kroma/kroma-bindings/bindings" + "github.com/kroma-network/kroma/kroma-bindings/predeploys" ) type L1Bindings struct { @@ -33,11 +32,11 @@ type L1Bindings struct { L2OutputOracle *bindings.L2OutputOracle } -func NewL1Bindings(t Testing, l1Cl *ethclient.Client, deployments *e2eutils.DeploymentsL1) *L1Bindings { - kromaPortal, err := bindings.NewKromaPortal(deployments.KromaPortalProxy, l1Cl) +func NewL1Bindings(t Testing, l1Cl *ethclient.Client) *L1Bindings { + kromaPortal, err := bindings.NewKromaPortal(config.L1Deployments.KromaPortalProxy, l1Cl) require.NoError(t, err) - l2OutputOracle, err := bindings.NewL2OutputOracle(deployments.L2OutputOracleProxy, l1Cl) + l2OutputOracle, err := bindings.NewL2OutputOracle(config.L1Deployments.L2OutputOracleProxy, l1Cl) require.NoError(t, err) return &L1Bindings{ @@ -276,9 +275,8 @@ type L2User struct { // CrossLayerUser represents the same user account on L1 and L2, // and provides actions to make cross-layer transactions. type CrossLayerUser struct { - L1 L1User - L2 L2User - rollupConfig *rollup.Config + L1 L1User + L2 L2User // track the last deposit, to easily chain together deposit actions lastL1DepositTxHash common.Hash @@ -286,7 +284,7 @@ type CrossLayerUser struct { lastL2WithdrawalTxHash common.Hash } -func NewCrossLayerUser(log log.Logger, priv *ecdsa.PrivateKey, rng *rand.Rand, rollupConfig *rollup.Config) *CrossLayerUser { +func NewCrossLayerUser(log log.Logger, priv *ecdsa.PrivateKey, rng *rand.Rand) *CrossLayerUser { addr := crypto.PubkeyToAddress(priv.PublicKey) return &CrossLayerUser{ L1: L1User{ @@ -305,7 +303,6 @@ func NewCrossLayerUser(log log.Logger, priv *ecdsa.PrivateKey, rng *rand.Rand, r address: addr, }, }, - rollupConfig: rollupConfig, } } @@ -490,8 +487,8 @@ func (s *CrossLayerUser) CompleteWithdrawal(t Testing, l2TxHash common.Hash) com // Check if the withdrawal may be completed yet if l2OutputBlock.Time()+finalizationPeriod.Uint64() >= l1Head.Time { - t.InvalidAction("withdrawal tx %s was included in L2 block %d (time %d) but L1 only knows of L2 output %d (time %d) at head %d (time %d) which has not reached output confirmation yet (period is %d)", - l2TxHash, l2WithdrawalBlock.NumberU64(), l2WithdrawalBlock.Time(), l2OutputBlock.NumberU64(), l2OutputBlock.Time(), finalizationPeriod.Uint64(), l1Head.Number.Uint64(), l1Head.Time) + t.InvalidAction("withdrawal tx %s was included in L2 block %d (time %d) but L1 only knows of L2 proposal %d (time %d) at head %d (time %d) which has not reached output confirmation yet (period is %d)", + l2TxHash, l2WithdrawalBlock.NumberU64(), l2WithdrawalBlock.Time(), l2OutputBlock.NumberU64(), l2OutputBlock.Time(), l1Head.Number.Uint64(), l1Head.Time, finalizationPeriod.Uint64()) return common.Hash{} } diff --git a/op-e2e/actions/user_test.go b/op-e2e/actions/user_test.go index b48e315eb..3b2fbd8b1 100644 --- a/op-e2e/actions/user_test.go +++ b/op-e2e/actions/user_test.go @@ -4,6 +4,7 @@ import ( "math/rand" "testing" + "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" "github.com/stretchr/testify/require" @@ -12,7 +13,13 @@ import ( "github.com/ethereum-optimism/optimism/op-service/testlog" ) -// TestCrossLayerUser tests that common actions of the CrossLayerUser actor work: +type regolithScheduledTest struct { + name string + regolithTime *hexutil.Uint64 + activateRegolith bool +} + +// TestCrossLayerUser tests that common actions of the CrossLayerUser actor work in various regolith configurations: // - transact on L1 // - transact on L2 // - deposit on L1 @@ -20,12 +27,39 @@ import ( // - prove tx on L1 // - wait 1 week + 1 second // - finalize withdrawal on L1 -func TestCrossLayerUser(gt *testing.T) { +func TestCrossLayerUser(t *testing.T) { + zeroTime := hexutil.Uint64(0) + futureTime := hexutil.Uint64(20) + farFutureTime := hexutil.Uint64(2000) + tests := []regolithScheduledTest{ + {name: "NoRegolith", regolithTime: nil, activateRegolith: false}, + {name: "NotYetRegolith", regolithTime: &farFutureTime, activateRegolith: false}, + {name: "RegolithAtGenesis", regolithTime: &zeroTime, activateRegolith: true}, + {name: "RegolithAfterGenesis", regolithTime: &futureTime, activateRegolith: true}, + } + for _, test := range tests { + test := test // Use a fixed reference as the tests run in parallel + t.Run(test.name, func(gt *testing.T) { + runCrossLayerUserTest(gt, test) + }) + } +} + +func runCrossLayerUserTest(gt *testing.T, test regolithScheduledTest) { + // [Kroma: START] + if test.regolithTime == nil || *test.regolithTime != hexutil.Uint64(0) { + gt.Skip("kroma does not support pre-regolith") + } + // [Kroma: END] t := NewDefaultTesting(gt) dp := e2eutils.MakeDeployParams(t, defaultRollupTestParams) + dp.DeployConfig.L2GenesisRegolithTimeOffset = test.regolithTime sd := e2eutils.Setup(t, dp, defaultAlloc) log := testlog.Logger(t, log.LvlDebug) + require.Equal(t, dp.Secrets.Addresses().Batcher, dp.DeployConfig.BatchSenderAddress) + require.Equal(t, dp.Secrets.Addresses().TrustedValidator, dp.DeployConfig.ValidatorPoolTrustedValidator) + miner, seqEngine, seq := setupSequencerTest(t, sd, log) batcher := NewL2Batcher(log, sd.RollupCfg, &BatcherCfg{ MinL1TxSize: 0, @@ -54,7 +88,7 @@ func TestCrossLayerUser(gt *testing.T) { EthCl: l1Cl, Signer: types.LatestSigner(sd.L1Cfg.Config), AddressCorpora: addresses, - Bindings: NewL1Bindings(t, l1Cl, &sd.DeploymentsL1), + Bindings: NewL1Bindings(t, l1Cl), } l2UserEnv := &BasicUserEnv[*L2Bindings]{ EthCl: l2Cl, @@ -63,7 +97,7 @@ func TestCrossLayerUser(gt *testing.T) { Bindings: NewL2Bindings(t, l2Cl, l2ProofCl), } - alice := NewCrossLayerUser(log, dp.Secrets.Alice, rand.New(rand.NewSource(1234)), sd.RollupCfg) + alice := NewCrossLayerUser(log, dp.Secrets.Alice, rand.New(rand.NewSource(1234))) alice.L1.SetUserEnv(l1UserEnv) alice.L2.SetUserEnv(l2UserEnv) @@ -71,6 +105,19 @@ func TestCrossLayerUser(gt *testing.T) { seq.ActL2StartBlock(t) seq.ActL2EndBlock(t) + if test.activateRegolith { + // advance L2 enough to activate regolith fork + seq.ActBuildL2ToRegolith(t) + } + // Check Regolith is active or not by confirming the system info tx is not a system tx + infoTx, err := l2Cl.TransactionInBlock(t.Ctx(), seq.L2Unsafe().Hash, 0) + require.NoError(t, err) + require.True(t, infoTx.IsDepositTx()) + // Should only be a system tx if regolith is not enabled + // [Kroma: START] + // require.Equal(t, !test.activateRegolith, infoTx.IsSystemTx()) + // [Kroma: END] + // regular L2 tx, in new L2 block alice.L2.ActResetTxOpts(t) alice.L2.ActSetTxToAddr(&dp.Addresses.Bob)(t) @@ -112,6 +159,7 @@ func TestCrossLayerUser(gt *testing.T) { seq.ActL2EndBlock(t) alice.ActCheckStartWithdrawal(true)(t) + // [Kroma: START] // NOTE(chokobole): It is necessary to wait for one finalized (or safe if AllowNonFinalized // config is set) block to pass after each submission interval before submitting the output // root. For example, if the submission interval is set to 1800 blocks, the output root can @@ -155,6 +203,7 @@ func TestCrossLayerUser(gt *testing.T) { require.NoError(t, err) require.Equal(t, types.ReceiptStatusSuccessful, receipt.Status, "submission failed") } + // [Kroma: END] // prove our withdrawal on L1 alice.ActProveWithdrawal(t) @@ -168,7 +217,9 @@ func TestCrossLayerUser(gt *testing.T) { // A bit hacky- Mines an empty block with the time delta // of the finalization period (12s) + 1 in order for the // withdrawal to be finalized successfully. - miner.ActL1StartBlock(13)(t) + // [Kroma: START] + miner.ActL1StartBlock(dp.DeployConfig.FinalizationPeriodSeconds + 1)(t) + // [Kroma: END] miner.ActL1EndBlock(t) // make the L1 finalize withdrawal tx diff --git a/op-e2e/bridge_test.go b/op-e2e/bridge_test.go index 558a77cf8..d77650748 100644 --- a/op-e2e/bridge_test.go +++ b/op-e2e/bridge_test.go @@ -12,15 +12,15 @@ import ( "github.com/ethereum/go-ethereum/params" "github.com/stretchr/testify/require" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" - "github.com/ethereum-optimism/optimism/op-bindings/predeploys" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/transactions" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/wait" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-service/testlog" + "github.com/kroma-network/kroma/kroma-bindings/bindings" + "github.com/kroma-network/kroma/kroma-bindings/predeploys" ) -// TestERC20BridgeDeposits tests the L1StandardBridge bridge ERC20 +// TestERC20BridgeDeposits tests the the L1StandardBridge bridge ERC20 // functionality. func TestERC20BridgeDeposits(t *testing.T) { InitParallel(t) @@ -77,13 +77,13 @@ func TestERC20BridgeDeposits(t *testing.T) { require.NotNil(t, event) // Approve WETH9 with the bridge - tx, err = WETH9.Approve(opts, predeploys.DevL1StandardBridgeAddr, new(big.Int).SetUint64(math.MaxUint64)) + tx, err = WETH9.Approve(opts, cfg.L1Deployments.L1StandardBridgeProxy, new(big.Int).SetUint64(math.MaxUint64)) require.NoError(t, err) _, err = wait.ForReceiptOK(context.Background(), l1Client, tx.Hash()) require.NoError(t, err) // Bridge the WETH9 - l1StandardBridge, err := bindings.NewL1StandardBridge(predeploys.DevL1StandardBridgeAddr, l1Client) + l1StandardBridge, err := bindings.NewL1StandardBridge(cfg.L1Deployments.L1StandardBridgeProxy, l1Client) require.NoError(t, err) tx, err = transactions.PadGasEstimate(opts, 1.1, func(opts *bind.TransactOpts) (*types.Transaction, error) { return l1StandardBridge.BridgeERC20(opts, weth9Address, event.LocalToken, big.NewInt(100), 100000, []byte{}) @@ -95,7 +95,7 @@ func TestERC20BridgeDeposits(t *testing.T) { t.Log("Deposit through L1StandardBridge", "gas used", depositReceipt.GasUsed) // compute the deposit transaction hash + poll for it - portal, err := bindings.NewKromaPortal(predeploys.DevKromaPortalAddr, l1Client) + portal, err := bindings.NewKromaPortal(cfg.L1Deployments.KromaPortalProxy, l1Client) require.NoError(t, err) depIt, err := portal.FilterTransactionDeposited(&bind.FilterOpts{Start: 0}, nil, nil, nil) diff --git a/op-e2e/config/init.go b/op-e2e/config/init.go new file mode 100644 index 000000000..a1ce99ac7 --- /dev/null +++ b/op-e2e/config/init.go @@ -0,0 +1,183 @@ +package config + +import ( + "encoding/json" + "errors" + "flag" + "fmt" + "os" + "path/filepath" + "testing" + "time" + + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/log" + + "github.com/ethereum-optimism/optimism/op-e2e/external" + oplog "github.com/ethereum-optimism/optimism/op-service/log" + "github.com/kroma-network/kroma/kroma-chain-ops/genesis" +) + +var ( + // All of the following variables are set in the init function + // and read from JSON files on disk that are generated by the + // foundry deploy script. The are globally exported to be used + // in end to end tests. + + // L1Allocs represents the L1 genesis block state. + L1Allocs *state.Dump + // L1Deployments maps contract names to accounts in the L1 + // genesis block state. + L1Deployments *genesis.L1Deployments + // DeployConfig represents the deploy config used by the system. + DeployConfig *genesis.DeployConfig + // ExternalL2Shim is the shim to use if external ethereum client testing is + // enabled + ExternalL2Shim string + // ExternalL2TestParms is additional metadata for executing external L2 + // tests. + ExternalL2TestParms external.TestParms + // EthNodeVerbosity is the level of verbosity to output + EthNodeVerbosity int +) + +func init() { + var l1AllocsPath, l1DeploymentsPath, deployConfigPath, externalL2 string + + cwd, err := os.Getwd() + if err != nil { + panic(err) + } + root, err := findMonorepoRoot(cwd) + if err != nil { + panic(err) + } + + defaultL1AllocsPath := filepath.Join(root, ".devnet", "allocs-l1.json") + defaultL1DeploymentsPath := filepath.Join(root, ".devnet", "addresses.json") + defaultDeployConfigPath := filepath.Join(root, "packages", "contracts", "deploy-config", "devnetL1.json") + + flag.StringVar(&l1AllocsPath, "l1-allocs", defaultL1AllocsPath, "") + flag.StringVar(&l1DeploymentsPath, "l1-deployments", defaultL1DeploymentsPath, "") + flag.StringVar(&deployConfigPath, "deploy-config", defaultDeployConfigPath, "") + flag.StringVar(&externalL2, "externalL2", "", "Enable tests with external L2") + flag.IntVar(&EthNodeVerbosity, "ethLogVerbosity", int(log.LvlInfo), "The level of verbosity to use for the eth node logs") + testing.Init() // Register test flags before parsing + flag.Parse() + + // Setup global logger + lvl := log.Lvl(EthNodeVerbosity) + if lvl < log.LvlCrit { + log.Root().SetHandler(log.DiscardHandler()) + } else if lvl > log.LvlTrace { // clip to trace level + lvl = log.LvlTrace + } + // We cannot attach a testlog logger, + // because the global logger is shared between different independent parallel tests. + // Tests that write to a testlogger of another finished test fail. + h := oplog.NewLogHandler(os.Stdout, oplog.CLIConfig{ + Level: lvl, + Color: false, // some CI logs do not handle colors well + Format: oplog.FormatTerminal, + }) + oplog.SetGlobalLogHandler(h) + + if err := allExist(l1AllocsPath, l1DeploymentsPath, deployConfigPath); err != nil { + return + } + + L1Allocs, err = genesis.NewStateDump(l1AllocsPath) + if err != nil { + panic(err) + } + L1Deployments, err = genesis.NewL1Deployments(l1DeploymentsPath) + if err != nil { + panic(err) + } + DeployConfig, err = genesis.NewDeployConfig(deployConfigPath) + if err != nil { + panic(err) + } + + // Do not use clique in the in memory tests. Otherwise block building + // would be much more complex. + DeployConfig.L1UseClique = false + // Set the L1 genesis block timestamp to now + DeployConfig.L1GenesisBlockTimestamp = hexutil.Uint64(time.Now().Unix()) + DeployConfig.FundDevAccounts = true + // Speed up the in memory tests + DeployConfig.L1BlockTime = 2 + DeployConfig.L2BlockTime = 1 + DeployConfig.ValidatorPoolRoundDuration = DeployConfig.L2OutputOracleSubmissionInterval / 2 + + if L1Deployments != nil { + DeployConfig.SetDeployments(L1Deployments) + } + + if externalL2 != "" { + if err := initExternalL2(externalL2); err != nil { + panic(fmt.Errorf("could not initialize external L2: %w", err)) + } + } +} + +func initExternalL2(externalL2 string) error { + var err error + ExternalL2Shim, err = filepath.Abs(filepath.Join(externalL2, "shim")) + if err != nil { + return fmt.Errorf("could not compute abs of externalL2Nodes shim: %w", err) + } + + _, err = os.Stat(ExternalL2Shim) + if err != nil { + return fmt.Errorf("failed to stat externalL2Nodes path: %w", err) + } + + file, err := os.Open(filepath.Join(externalL2, "test_parms.json")) + if err != nil { + if errors.Is(err, os.ErrNotExist) { + return nil + } + return fmt.Errorf("could not open external L2 test parms: %w", err) + } + defer file.Close() + + if err := json.NewDecoder(file).Decode(&ExternalL2TestParms); err != nil { + return fmt.Errorf("could not decode external L2 test parms: %w", err) + } + + return nil +} + +func allExist(filenames ...string) error { + for _, filename := range filenames { + if _, err := os.Stat(filename); err != nil { + fmt.Printf("file %s does not exist, skipping genesis generation\n", filename) + return err + } + } + return nil +} + +// findMonorepoRoot will recursively search upwards for a go.mod file. +// This depends on the structure of the monorepo having a go.mod file at the root. +func findMonorepoRoot(startDir string) (string, error) { + dir, err := filepath.Abs(startDir) + if err != nil { + return "", err + } + for { + modulePath := filepath.Join(dir, "go.mod") + if _, err := os.Stat(modulePath); err == nil { + return dir, nil + } + parentDir := filepath.Dir(dir) + // Check if we reached the filesystem root + if parentDir == dir { + break + } + dir = parentDir + } + return "", fmt.Errorf("monorepo root not found") +} diff --git a/op-e2e/e2eutils/addresses.go b/op-e2e/e2eutils/addresses.go index 9b94d9ac4..9c107e264 100644 --- a/op-e2e/e2eutils/addresses.go +++ b/op-e2e/e2eutils/addresses.go @@ -7,8 +7,8 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" - "github.com/ethereum-optimism/optimism/op-bindings/predeploys" "github.com/ethereum-optimism/optimism/op-chain-ops/crossdomain" + "github.com/kroma-network/kroma/kroma-bindings/predeploys" ) func collectAllocAddrs(alloc core.GenesisAlloc) []common.Address { diff --git a/op-e2e/e2eutils/geth/fakepos.go b/op-e2e/e2eutils/geth/fakepos.go index 42509adce..471b6a648 100644 --- a/op-e2e/e2eutils/geth/fakepos.go +++ b/op-e2e/e2eutils/geth/fakepos.go @@ -3,14 +3,16 @@ package geth import ( "time" - "github.com/ethereum-optimism/optimism/op-service/clock" "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/beacon/engine" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/eth/catalyst" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/log" + + "github.com/ethereum-optimism/optimism/op-service/clock" ) // fakePoS is a testing-only utility to attach to Geth, @@ -70,9 +72,8 @@ func (f *fakePoS) Start() error { }, &engine.PayloadAttributes{ Timestamp: newBlockTime, Random: common.Hash{}, - SuggestedFeeRecipient: common.Address{}, - // NOTE: comment this, cause not support Shanghai - //Withdrawals: make([]*types.Withdrawal, 0), + SuggestedFeeRecipient: head.Coinbase, + Withdrawals: make([]*types.Withdrawal, 0), }) if err != nil { f.log.Error("failed to start building L1 block", "err", err) diff --git a/op-e2e/e2eutils/mock_l2rpc.go b/op-e2e/e2eutils/mock_l2rpc.go index 2d0e5aca3..84ccc9f78 100644 --- a/op-e2e/e2eutils/mock_l2rpc.go +++ b/op-e2e/e2eutils/mock_l2rpc.go @@ -8,10 +8,10 @@ import ( "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/rpc" + "github.com/ethereum-optimism/optimism/op-e2e/testdata" "github.com/ethereum-optimism/optimism/op-service/client" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/testutils" - "github.com/ethereum-optimism/optimism/op-e2e/testdata" ) type MaliciousL2RPC struct { @@ -25,7 +25,7 @@ func NewMaliciousL2RPC(rpc client.RPC) *MaliciousL2RPC { } // SetTargetBlockNumber sets the first invalid block number for mocking malicious L2 RPC. -// After the m.targetBlockNumber, random output root will be returned for `kroma_outputAtBlock` CallContext +// After the m.targetBlockNumber, random output root will be returned for `optimism_outputAtBlock` CallContext func (m *MaliciousL2RPC) SetTargetBlockNumber(lastValidBlockNumber uint64) { m.targetBlockNumber = new(hexutil.Uint64) *m.targetBlockNumber = hexutil.Uint64(lastValidBlockNumber) @@ -36,7 +36,7 @@ func (m *MaliciousL2RPC) Close() { } func (m *MaliciousL2RPC) CallContext(ctx context.Context, result interface{}, method string, args ...interface{}) error { - if method == "kroma_outputAtBlock" || method == "kroma_outputWithProofAtBlock" { + if method == "optimism_outputAtBlock" || method == "kroma_outputWithProofAtBlock" { blockNumber := args[0].(hexutil.Uint64) err := m.rpc.CallContext(ctx, &result, method, blockNumber) @@ -79,7 +79,7 @@ func NewHonestL2RPC(rpc client.RPC) *HonestL2RPC { } // SetTargetBlockNumber sets the target block number for challenge. -// At the m.targetBlockNumber, mocked output root will be returned for `kroma_outputAtBlock` CallContext +// At the m.targetBlockNumber, mocked output root will be returned for `optimism_outputAtBlock` CallContext func (m *HonestL2RPC) SetTargetBlockNumber(lastValidBlockNumber uint64) { m.targetBlockNumber = new(hexutil.Uint64) *m.targetBlockNumber = hexutil.Uint64(lastValidBlockNumber) @@ -90,7 +90,7 @@ func (m *HonestL2RPC) Close() { } func (m *HonestL2RPC) CallContext(ctx context.Context, result interface{}, method string, args ...interface{}) error { - if method == "kroma_outputAtBlock" || method == "kroma_outputWithProofAtBlock" { + if method == "optimism_outputAtBlock" || method == "kroma_outputWithProofAtBlock" { blockNumber := args[0].(hexutil.Uint64) err := m.rpc.CallContext(ctx, &result, method, blockNumber) diff --git a/op-e2e/e2eutils/secrets.go b/op-e2e/e2eutils/secrets.go index 1bb428a78..1710068dd 100644 --- a/op-e2e/e2eutils/secrets.go +++ b/op-e2e/e2eutils/secrets.go @@ -18,17 +18,20 @@ import ( // must be in sync with the values in the DeployConfig used to create the system. var DefaultMnemonicConfig = &MnemonicConfig{ Mnemonic: "test test test test test test test test test test test junk", - Deployer: "m/44'/60'/0'/0/1", - CliqueSigner: "m/44'/60'/0'/0/2", - TrustedValidator: "m/44'/60'/0'/0/3", - Challenger1: "m/44'/60'/0'/0/4", - Challenger2: "m/44'/60'/0'/0/5", - Batcher: "m/44'/60'/0'/0/6", - SequencerP2P: "m/44'/60'/0'/0/7", - Alice: "m/44'/60'/0'/0/8", - Bob: "m/44'/60'/0'/0/9", - Mallory: "m/44'/60'/0'/0/10", - ProxyAdminOwner: "m/44'/60'/0'/0/11", + CliqueSigner: "m/44'/60'/0'/0/0", + TrustedValidator: "m/44'/60'/0'/0/1", + Batcher: "m/44'/60'/0'/0/2", + Deployer: "m/44'/60'/0'/0/3", + Alice: "m/44'/60'/0'/0/4", + SequencerP2P: "m/44'/60'/0'/0/5", + Bob: "m/44'/60'/0'/0/7", + Mallory: "m/44'/60'/0'/0/8", + SysCfgOwner: "m/44'/60'/0'/0/0", + + // [Kroma: START], + Challenger1: "m/44'/60'/0'/0/11", + Challenger2: "m/44'/60'/0'/0/12", + // [Kroma: END] } // MnemonicConfig configures the private keys for the hive testnet. @@ -36,14 +39,12 @@ var DefaultMnemonicConfig = &MnemonicConfig{ type MnemonicConfig struct { Mnemonic string - Deployer string - CliqueSigner string - ProxyAdminOwner string + CliqueSigner string + Deployer string + SysCfgOwner string // rollup actors TrustedValidator string - Challenger1 string - Challenger2 string Batcher string SequencerP2P string @@ -51,6 +52,11 @@ type MnemonicConfig struct { Alice string Bob string Mallory string + + // [Kroma: START] + Challenger1 string + Challenger2 string + // [Kroma: END } // Secrets computes the private keys for all mnemonic paths, @@ -72,7 +78,7 @@ func (m *MnemonicConfig) Secrets() (*Secrets, error) { if err != nil { return nil, err } - proxyAdminOwner, err := wallet.PrivateKey(account(m.ProxyAdminOwner)) + sysCfgOwner, err := wallet.PrivateKey(account(m.SysCfgOwner)) if err != nil { return nil, err } @@ -80,61 +86,62 @@ func (m *MnemonicConfig) Secrets() (*Secrets, error) { if err != nil { return nil, err } - challenger1, err := wallet.PrivateKey(account(m.Challenger1)) + batcher, err := wallet.PrivateKey(account(m.Batcher)) if err != nil { return nil, err } - challenger2, err := wallet.PrivateKey(account(m.Challenger2)) + sequencerP2P, err := wallet.PrivateKey(account(m.SequencerP2P)) if err != nil { return nil, err } - batcher, err := wallet.PrivateKey(account(m.Batcher)) + alice, err := wallet.PrivateKey(account(m.Alice)) if err != nil { return nil, err } - sequencerP2P, err := wallet.PrivateKey(account(m.SequencerP2P)) + bob, err := wallet.PrivateKey(account(m.Bob)) if err != nil { return nil, err } - alice, err := wallet.PrivateKey(account(m.Alice)) + mallory, err := wallet.PrivateKey(account(m.Mallory)) if err != nil { return nil, err } - bob, err := wallet.PrivateKey(account(m.Bob)) + challenger1, err := wallet.PrivateKey(account(m.Challenger1)) if err != nil { return nil, err } - mallory, err := wallet.PrivateKey(account(m.Mallory)) + challenger2, err := wallet.PrivateKey(account(m.Challenger2)) if err != nil { return nil, err } return &Secrets{ Deployer: deployer, + SysCfgOwner: sysCfgOwner, CliqueSigner: cliqueSigner, - ProxyAdminOwner: proxyAdminOwner, TrustedValidator: trustedValidator, - Challenger1: challenger1, - Challenger2: challenger2, Batcher: batcher, SequencerP2P: sequencerP2P, Alice: alice, Bob: bob, Mallory: mallory, Wallet: wallet, + + // [Kroma :START] + Challenger1: challenger1, + Challenger2: challenger2, + // [Kroma: END] }, nil } // Secrets bundles secp256k1 private keys for all common rollup actors for testing purposes. type Secrets struct { - Deployer *ecdsa.PrivateKey - CliqueSigner *ecdsa.PrivateKey - ProxyAdminOwner *ecdsa.PrivateKey + Deployer *ecdsa.PrivateKey + CliqueSigner *ecdsa.PrivateKey + SysCfgOwner *ecdsa.PrivateKey // rollup actors TrustedValidator *ecdsa.PrivateKey - Challenger1 *ecdsa.PrivateKey - Challenger2 *ecdsa.PrivateKey Batcher *ecdsa.PrivateKey SequencerP2P *ecdsa.PrivateKey @@ -145,6 +152,11 @@ type Secrets struct { // Share the wallet to be able to generate more accounts Wallet *hdwallet.Wallet + + // [Kroma: START] + Challenger1 *ecdsa.PrivateKey + Challenger2 *ecdsa.PrivateKey + // [Kroma: END] } // EncodePrivKey encodes the given private key in 32 bytes @@ -165,28 +177,29 @@ func (s *Secrets) Addresses() *Addresses { return &Addresses{ Deployer: crypto.PubkeyToAddress(s.Deployer.PublicKey), CliqueSigner: crypto.PubkeyToAddress(s.CliqueSigner.PublicKey), - ProxyAdminOwner: crypto.PubkeyToAddress(s.ProxyAdminOwner.PublicKey), + SysCfgOwner: crypto.PubkeyToAddress(s.SysCfgOwner.PublicKey), TrustedValidator: crypto.PubkeyToAddress(s.TrustedValidator.PublicKey), - Challenger1: crypto.PubkeyToAddress(s.Challenger1.PublicKey), - Challenger2: crypto.PubkeyToAddress(s.Challenger2.PublicKey), Batcher: crypto.PubkeyToAddress(s.Batcher.PublicKey), SequencerP2P: crypto.PubkeyToAddress(s.SequencerP2P.PublicKey), Alice: crypto.PubkeyToAddress(s.Alice.PublicKey), Bob: crypto.PubkeyToAddress(s.Bob.PublicKey), Mallory: crypto.PubkeyToAddress(s.Mallory.PublicKey), + + // [Kroma: START] + Challenger1: crypto.PubkeyToAddress(s.Challenger1.PublicKey), + Challenger2: crypto.PubkeyToAddress(s.Challenger2.PublicKey), + // [Kroma: END] } } // Addresses bundles the addresses for all common rollup addresses for testing purposes. type Addresses struct { - Deployer common.Address - CliqueSigner common.Address - ProxyAdminOwner common.Address + Deployer common.Address + CliqueSigner common.Address + SysCfgOwner common.Address // rollup actors TrustedValidator common.Address - Challenger1 common.Address - Challenger2 common.Address Batcher common.Address SequencerP2P common.Address @@ -194,20 +207,28 @@ type Addresses struct { Alice common.Address Bob common.Address Mallory common.Address + + // [Kroma: START] + Challenger1 common.Address + Challenger2 common.Address + // [Kroma: END] } func (a *Addresses) All() []common.Address { return []common.Address{ a.Deployer, a.CliqueSigner, - a.ProxyAdminOwner, + a.SysCfgOwner, a.TrustedValidator, - a.Challenger1, - a.Challenger2, a.Batcher, a.SequencerP2P, a.Alice, a.Bob, a.Mallory, + + // [Kroma: START] + a.Challenger1, + a.Challenger2, + // [Kroma: END] } } diff --git a/op-e2e/e2eutils/setup.go b/op-e2e/e2eutils/setup.go index 610d24d73..f36252170 100644 --- a/op-e2e/e2eutils/setup.go +++ b/op-e2e/e2eutils/setup.go @@ -11,10 +11,10 @@ import ( "github.com/ethereum/go-ethereum/core" "github.com/stretchr/testify/require" - "github.com/ethereum-optimism/optimism/op-bindings/predeploys" - "github.com/ethereum-optimism/optimism/op-chain-ops/genesis" + "github.com/ethereum-optimism/optimism/op-e2e/config" "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-service/eth" + "github.com/kroma-network/kroma/kroma-chain-ops/genesis" ) var testingJWTSecret = [32]byte{123} @@ -54,92 +54,21 @@ func MakeDeployParams(t require.TestingT, tp *TestParams) *DeployParams { secrets, err := mnemonicCfg.Secrets() require.NoError(t, err) addresses := secrets.Addresses() - deployConfig := &genesis.DeployConfig{ - L1ChainID: 900, - L2ChainID: 901, - L2BlockTime: 2, - MaxSequencerDrift: tp.MaxSequencerDrift, - SequencerWindowSize: tp.SequencerWindowSize, - ChannelTimeout: tp.ChannelTimeout, - P2PSequencerAddress: addresses.SequencerP2P, - BatchInboxAddress: common.Address{0: 0x42, 19: 0xff}, // tbd - BatchSenderAddress: addresses.Batcher, - - ValidatorPoolTrustedValidator: addresses.TrustedValidator, - ValidatorPoolRequiredBondAmount: uint64ToBig(1), - ValidatorPoolMaxUnbond: 10, - ValidatorPoolRoundDuration: 4, - - L2OutputOracleSubmissionInterval: 4, - L2OutputOracleStartingTimestamp: -1, - - L1BlockTime: tp.L1BlockTime, - L1GenesisBlockNonce: 0, - CliqueSignerAddress: common.Address{}, // proof of stake, no clique - L1GenesisBlockTimestamp: hexutil.Uint64(time.Now().Unix()), - L1GenesisBlockGasLimit: 30_000_000, - L1GenesisBlockDifficulty: uint64ToBig(1), - L1GenesisBlockMixHash: common.Hash{}, - L1GenesisBlockCoinbase: common.Address{}, - L1GenesisBlockNumber: 0, - L1GenesisBlockGasUsed: 0, - L1GenesisBlockParentHash: common.Hash{}, - L1GenesisBlockBaseFeePerGas: uint64ToBig(1000_000_000), // 1 gwei - FinalizationPeriodSeconds: 10, - - L2GenesisBlockNonce: 0, - L2GenesisBlockGasLimit: 30_000_000, - L2GenesisBlockDifficulty: uint64ToBig(0), - L2GenesisBlockMixHash: common.Hash{}, - L2GenesisBlockNumber: 0, - L2GenesisBlockGasUsed: 0, - L2GenesisBlockParentHash: common.Hash{}, - L2GenesisBlockBaseFeePerGas: uint64ToBig(1000_000_000), - - ColosseumCreationPeriodSeconds: 10, - ColosseumBisectionTimeout: 120, - ColosseumProvingTimeout: 480, - ColosseumDummyHash: common.HexToHash("0xa1235b834d6f1f78f78bc4db856fbc49302cce2c519921347600693021e087f7"), - ColosseumMaxTxs: 100, - ColosseumSegmentsLengths: "2,2,3,3", - - SecurityCouncilOwners: []common.Address{ - addresses.Challenger1, - addresses.Challenger2, - addresses.TrustedValidator, - }, - - GasPriceOracleOverhead: 2100, - GasPriceOracleScalar: 1000_000, - DeploymentWaitConfirmations: 1, - ValidatorRewardScalar: 5000, - - ProxyAdminOwner: addresses.ProxyAdminOwner, - ProtocolVaultRecipient: common.Address{19: 2}, - L1FeeVaultRecipient: common.Address{19: 3}, - - EIP1559Elasticity: 10, - EIP1559Denominator: 50, - - FundDevAccounts: false, - - GovernorVotingDelayBlocks: 0, - GovernorVotingPeriodBlocks: 25, - GovernorProposalThreshold: 1, - GovernorVotesQuorumFractionPercent: 51, - TimeLockMinDelaySeconds: 1, - - ZKVerifierHashScalar: (*hexutil.Big)(hexutil.MustDecodeBig("0x1545b1bf82c58ee35648bd877da9c5010193e82b036b16bf382acf31bc2ab576")), - ZKVerifierM56Px: (*hexutil.Big)(hexutil.MustDecodeBig("0x15ae1a8e3b993dd9aadc8f9086d1ea239d4cd5c09cfa445f337e1b60d7b3eb87")), - ZKVerifierM56Py: (*hexutil.Big)(hexutil.MustDecodeBig("0x2c702ede24f9db8c8c9a439975facd3872a888c5f84f58b3b5f5a5623bac945a")), - } - - // Configure the DeployConfig with the expected developer L1 - // addresses. - if err := deployConfig.InitDeveloperDeployedAddresses(); err != nil { - panic(err) - } + deployConfig := config.DeployConfig.Copy() + deployConfig.MaxSequencerDrift = tp.MaxSequencerDrift + deployConfig.SequencerWindowSize = tp.SequencerWindowSize + deployConfig.ChannelTimeout = tp.ChannelTimeout + deployConfig.L1BlockTime = tp.L1BlockTime + // [Kroma: START] + // deployConfig.L2GenesisRegolithTimeOffset = nil + // [Kroma: END] + deployConfig.L2GenesisSpanBatchTimeOffset = SpanBatchTimeOffset() + + require.NoError(t, deployConfig.Check()) + require.Equal(t, addresses.Batcher, deployConfig.BatchSenderAddress) + require.Equal(t, addresses.SequencerP2P, deployConfig.P2PSequencerAddress) + require.Equal(t, addresses.TrustedValidator, deployConfig.ValidatorPoolTrustedValidator) return &DeployParams{ DeployConfig: deployConfig, @@ -149,29 +78,12 @@ func MakeDeployParams(t require.TestingT, tp *TestParams) *DeployParams { } } -// DeploymentsL1 captures the L1 addresses used in the deployment, -// commonly just the developer predeploys during testing, -// but later deployed contracts may be used in some tests too. -type DeploymentsL1 struct { - L1CrossDomainMessengerProxy common.Address - L1StandardBridgeProxy common.Address - ValidatorPoolProxy common.Address - L2OutputOracleProxy common.Address - ColosseumProxy common.Address - SecurityCouncilProxy common.Address - KromaPortalProxy common.Address - SystemConfigProxy common.Address - SecurityCouncilTokenProxy common.Address - TimeLockProxy common.Address - UpgradeGovernorProxy common.Address -} - // SetupData bundles the L1, L2, rollup and deployment configuration data: everything for a full test setup. type SetupData struct { L1Cfg *core.Genesis L2Cfg *core.Genesis RollupCfg *rollup.Config - DeploymentsL1 DeploymentsL1 + DeploymentsL1 *genesis.L1Deployments } // AllocParams defines genesis allocations to apply on top of the genesis generated by deploy parameters. @@ -192,8 +104,14 @@ func Ether(v uint64) *big.Int { // Setup computes the testing setup configurations from deployment configuration and optional allocation parameters. func Setup(t require.TestingT, deployParams *DeployParams, alloc *AllocParams) *SetupData { - deployConf := deployParams.DeployConfig - l1Genesis, err := genesis.BuildL1DeveloperGenesis(deployConf) + deployConf := deployParams.DeployConfig.Copy() + deployConf.L1GenesisBlockTimestamp = hexutil.Uint64(time.Now().Unix()) + require.NoError(t, deployConf.Check()) + + l1Deployments := config.L1Deployments.Copy() + require.NoError(t, l1Deployments.Check()) + + l1Genesis, err := genesis.BuildL1DeveloperGenesis(deployConf, config.L1Allocs, l1Deployments, true) require.NoError(t, err, "failed to create l1 genesis") if alloc.PrefundTestUsers { for _, addr := range deployParams.Addresses.All() { @@ -208,7 +126,7 @@ func Setup(t require.TestingT, deployParams *DeployParams, alloc *AllocParams) * l1Block := l1Genesis.ToBlock() - l2Genesis, err := genesis.BuildL2Genesis(deployConf, l1Block, true) + l2Genesis, err := genesis.BuildL2Genesis(deployConf, l1Block) require.NoError(t, err, "failed to create l2 genesis") if alloc.PrefundTestUsers { for _, addr := range deployParams.Addresses.All() { @@ -241,29 +159,24 @@ func Setup(t require.TestingT, deployParams *DeployParams, alloc *AllocParams) * L1ChainID: new(big.Int).SetUint64(deployConf.L1ChainID), L2ChainID: new(big.Int).SetUint64(deployConf.L2ChainID), BatchInboxAddress: deployConf.BatchInboxAddress, - DepositContractAddress: predeploys.DevKromaPortalAddr, - L1SystemConfigAddress: predeploys.DevSystemConfigAddr, + DepositContractAddress: deployConf.KromaPortalProxy, + L1SystemConfigAddress: deployConf.SystemConfigProxy, + RegolithTime: deployConf.RegolithTime(uint64(deployConf.L1GenesisBlockTimestamp)), + SpanBatchTime: deployConf.SpanBatchTime(uint64(deployConf.L1GenesisBlockTimestamp)), } - deploymentsL1 := DeploymentsL1{ - L1CrossDomainMessengerProxy: predeploys.DevL1CrossDomainMessengerAddr, - L1StandardBridgeProxy: predeploys.DevL1StandardBridgeAddr, - ValidatorPoolProxy: predeploys.DevValidatorPoolAddr, - L2OutputOracleProxy: predeploys.DevL2OutputOracleAddr, - ColosseumProxy: predeploys.DevColosseumAddr, - SecurityCouncilProxy: predeploys.DevSecurityCouncilAddr, - KromaPortalProxy: predeploys.DevKromaPortalAddr, - SystemConfigProxy: predeploys.DevSystemConfigAddr, - SecurityCouncilTokenProxy: predeploys.DevSecurityCouncilTokenAddr, - TimeLockProxy: predeploys.DevTimeLockAddr, - UpgradeGovernorProxy: predeploys.DevUpgradeGovernorAddr, - } + require.NoError(t, rollupCfg.Check()) + + // Sanity check that the config is correct + require.Equal(t, deployParams.Secrets.Addresses().Batcher, deployParams.DeployConfig.BatchSenderAddress) + require.Equal(t, deployParams.Secrets.Addresses().SequencerP2P, deployParams.DeployConfig.P2PSequencerAddress) + require.Equal(t, deployParams.Secrets.Addresses().TrustedValidator, deployParams.DeployConfig.ValidatorPoolTrustedValidator) return &SetupData{ L1Cfg: l1Genesis, L2Cfg: l2Genesis, RollupCfg: rollupCfg, - DeploymentsL1: deploymentsL1, + DeploymentsL1: l1Deployments, } } @@ -276,3 +189,11 @@ func SystemConfigFromDeployConfig(deployConfig *genesis.DeployConfig) eth.System ValidatorRewardScalar: eth.Bytes32(common.BigToHash(new(big.Int).SetUint64(deployConfig.ValidatorRewardScalar))), } } + +func SpanBatchTimeOffset() *hexutil.Uint64 { + if os.Getenv("OP_E2E_USE_SPAN_BATCH") == "true" { + offset := hexutil.Uint64(0) + return &offset + } + return nil +} diff --git a/op-e2e/e2eutils/setup_test.go b/op-e2e/e2eutils/setup_test.go index 6c6d6777e..bb79ca5cf 100644 --- a/op-e2e/e2eutils/setup_test.go +++ b/op-e2e/e2eutils/setup_test.go @@ -7,7 +7,7 @@ import ( "github.com/stretchr/testify/require" - "github.com/ethereum-optimism/optimism/op-bindings/predeploys" + "github.com/kroma-network/kroma/kroma-bindings/predeploys" ) func TestWriteDefaultJWT(t *testing.T) { @@ -33,6 +33,6 @@ func TestSetup(t *testing.T) { require.Contains(t, sd.L2Cfg.Alloc, dp.Addresses.Alice) require.Equal(t, sd.L2Cfg.Alloc[dp.Addresses.Alice].Balance, Ether(1e12)) - require.Contains(t, sd.L1Cfg.Alloc, predeploys.DevKromaPortalAddr) + require.Contains(t, sd.L1Cfg.Alloc, dp.DeployConfig.KromaPortalProxy) require.Contains(t, sd.L2Cfg.Alloc, predeploys.L1BlockAddr) } diff --git a/op-e2e/e2eutils/wait/withdrawals.go b/op-e2e/e2eutils/wait/withdrawals.go index 2774ab12b..4fbb36cc9 100644 --- a/op-e2e/e2eutils/wait/withdrawals.go +++ b/op-e2e/e2eutils/wait/withdrawals.go @@ -6,10 +6,11 @@ import ( "math/big" "time" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/ethclient" + + "github.com/kroma-network/kroma/kroma-bindings/bindings" ) // ForOutputRootPublished waits until there is an output published for an L2 block number larger than the supplied l2BlockNumber diff --git a/op-e2e/external.go b/op-e2e/external.go new file mode 100644 index 000000000..e8acc4dff --- /dev/null +++ b/op-e2e/external.go @@ -0,0 +1,140 @@ +package op_e2e + +import ( + "encoding/json" + "math/big" + "os" + "os/exec" + "path/filepath" + "testing" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/params" + "github.com/onsi/gomega/gexec" + "github.com/stretchr/testify/require" + + "github.com/ethereum-optimism/optimism/op-e2e/config" + "github.com/ethereum-optimism/optimism/op-e2e/external" +) + +type ExternalRunner struct { + Name string + BinPath string + Genesis *core.Genesis + JWTPath string +} + +type ExternalEthClient struct { + Session *gexec.Session + Endpoints external.Endpoints +} + +func (eec *ExternalEthClient) HTTPEndpoint() string { + return eec.Endpoints.HTTPEndpoint +} + +func (eec *ExternalEthClient) WSEndpoint() string { + return eec.Endpoints.WSEndpoint +} + +func (eec *ExternalEthClient) HTTPAuthEndpoint() string { + return eec.Endpoints.HTTPAuthEndpoint +} + +func (eec *ExternalEthClient) WSAuthEndpoint() string { + return eec.Endpoints.WSAuthEndpoint +} + +func (eec *ExternalEthClient) Close() error { + eec.Session.Terminate() + select { + case <-time.After(5 * time.Second): + eec.Session.Kill() + case <-eec.Session.Exited: + } + return nil +} + +func (er *ExternalRunner) Run(t *testing.T) *ExternalEthClient { + if er.BinPath == "" { + t.Error("no external bin path set") + } + + if er.JWTPath == "" { + er.JWTPath = writeDefaultJWT(t) + } + + if er.Genesis == nil { + er.Genesis = &core.Genesis{ + Alloc: core.GenesisAlloc{ + common.Address{1}: core.GenesisAccount{Balance: big.NewInt(1)}, + }, + Config: params.KromaTestConfig, + Difficulty: big.NewInt(0), + } + } + + workDir := t.TempDir() + + config := external.Config{ + DataDir: filepath.Join(workDir, "datadir"), + JWTPath: er.JWTPath, + ChainID: er.Genesis.Config.ChainID.Uint64(), + GenesisPath: filepath.Join(workDir, "genesis.json"), + EndpointsReadyPath: filepath.Join(workDir, "endpoints.json"), + Verbosity: uint64(config.EthNodeVerbosity), + } + + err := os.Mkdir(config.DataDir, 0o700) + require.NoError(t, err) + + genesisFile, err := os.Create(config.GenesisPath) + require.NoError(t, err) + err = json.NewEncoder(genesisFile).Encode(er.Genesis) + require.NoError(t, err) + + configPath := filepath.Join(workDir, "config.json") + configFile, err := os.Create(configPath) + require.NoError(t, err) + err = json.NewEncoder(configFile).Encode(config) + require.NoError(t, err) + + cmd := exec.Command(er.BinPath, "--config", configPath) + cmd.Dir = filepath.Dir(er.BinPath) + sess, err := gexec.Start( + cmd, + gexec.NewPrefixedWriter("[extout:"+er.Name+"]", os.Stdout), + gexec.NewPrefixedWriter("[exterr:"+er.Name+"]", os.Stderr), + ) + require.NoError(t, err) + + // 2 minutes may seem like a long timeout, and, it definitely is. That + // being said, when running these tests with high parallelism turned on, the + // node startup time can be substantial (remember, this usually is a + // multi-step process initializing the database and then starting the + // client). + require.Eventually( + t, + func() bool { + _, err := os.Stat(config.EndpointsReadyPath) + return err == nil + }, + 2*time.Minute, + 10*time.Millisecond, + "external runner did not create ready file at %s within timeout", + config.EndpointsReadyPath, + ) + + readyFile, err := os.Open(config.EndpointsReadyPath) + require.NoError(t, err) + var endpoints external.Endpoints + err = json.NewDecoder(readyFile).Decode(&endpoints) + require.NoError(t, err) + + return &ExternalEthClient{ + Session: sess, + Endpoints: endpoints, + } +} diff --git a/op-e2e/external/config.go b/op-e2e/external/config.go new file mode 100644 index 000000000..7bea37bc6 --- /dev/null +++ b/op-e2e/external/config.go @@ -0,0 +1,68 @@ +package external + +import ( + "bytes" + "encoding/json" + "os" + "strings" + "testing" +) + +type Config struct { + DataDir string `json:"data_dir"` + JWTPath string `json:"jwt_path"` + ChainID uint64 `json:"chain_id"` + GasCeil uint64 `json:"gas_ceil"` + GenesisPath string `json:"genesis_path"` + Verbosity uint64 `json:"verbosity"` + + // EndpointsReadyPath is the location to write the endpoint configuration file. + // Note, this should be written atomically by writing the JSON, then moving + // it to this path to avoid races. A helper AtomicEncode is provided for + // golang clients. + EndpointsReadyPath string `json:"endpoints_ready_path"` +} + +// AtomicEncode json encodes val to path+".atomic" then moves the path+".atomic" +// file to path +func AtomicEncode(path string, val any) error { + atomicPath := path + ".atomic" + atomicFile, err := os.Create(atomicPath) + if err != nil { + return err + } + if err = json.NewEncoder(atomicFile).Encode(val); err != nil { + return err + } + return os.Rename(atomicPath, path) +} + +type Endpoints struct { + HTTPEndpoint string `json:"http_endpoint"` + WSEndpoint string `json:"ws_endpoint"` + HTTPAuthEndpoint string `json:"http_auth_endpoint"` + WSAuthEndpoint string `json:"ws_auth_endpoint"` +} + +type TestParms struct { + // SkipTests is a map from test name to skip message. The skip message may + // be arbitrary, but the test name should match the skipped test (either + // base, or a sub-test) exactly. Precisely, the skip name must match rune for + // rune starting with the first rune. If the skip name does not match all + // runes, the first mismatched rune must be a '/'. + SkipTests map[string]string `json:"skip_tests"` +} + +func (tp TestParms) SkipIfNecessary(t *testing.T) { + if len(tp.SkipTests) == 0 { + return + } + var base bytes.Buffer + for _, name := range strings.Split(t.Name(), "/") { + base.WriteString(name) + if msg, ok := tp.SkipTests[base.String()]; ok { + t.Skip(msg) + } + base.WriteRune('/') + } +} diff --git a/op-e2e/external_geth/.gitignore b/op-e2e/external_geth/.gitignore new file mode 100644 index 000000000..f034fb8a9 --- /dev/null +++ b/op-e2e/external_geth/.gitignore @@ -0,0 +1 @@ +op-geth diff --git a/op-e2e/external_geth/Makefile b/op-e2e/external_geth/Makefile new file mode 100644 index 000000000..f0dd91302 --- /dev/null +++ b/op-e2e/external_geth/Makefile @@ -0,0 +1,8 @@ +default: shim op-geth + +op-geth: + go build -o op-geth "github.com/ethereum/go-ethereum/cmd/geth" +.PHONY: op-geth + +shim: main.go + go build -o shim . diff --git a/op-e2e/external_geth/README.md b/op-e2e/external_geth/README.md new file mode 100644 index 000000000..07550d1c0 --- /dev/null +++ b/op-e2e/external_geth/README.md @@ -0,0 +1,65 @@ +# external_geth shim + +This shim is an example of how to write an adapter for an external ethereum +client to allow for its use in the op-e2e tests. + +## Invocation + +Generally speaking, you can utilize this shim by simply executing: + +``` +make test-external-geth +``` + +The `Makefile` is structured such that if you duplicate this directory and +tweak this code, you may simply execute: + +``` +make test-external- +``` + +and the execution should happen as well. + +*NOTE:* Attempting to iterate for development requires explicit rebuilding of +the binary being shimmed. Most likely to accomplish this, you may want to add +initialization code to the TestMain of the e2e to build your binary, or use +some other technique like custom build scripts or IDE integrations which cause +the binary to be rebuilt before executing the tests. + +## Arguments + +*--config * The config path is a required argument, it points to a JSON +file which contains details of the L2 environment to bring up (including the +`genesis.json` path, the chain ID, the JWT path, and a ready file path). See +the data structures in `op-e2e/external/config.go` for more details. + +## Operation + +This shim will first execute a process to initialize the op-geth database. +Then, it will start the op-geth process itself. It watches the output of the +process and looks for the lines indicating that the HTTP server and Auth HTTP +server have started up. It then reads the ports which were allocated (because +the requested ports were passed in as ephemeral via the CLI arguments). + +## Skipping tests + +Although ideally, all tests would be structured such that they may execute +either with an in-process op-geth or with an extra-process ethereum client, +this is not always the case. You may optionally create a `test_parms.json` +file in the `external_` directory, as there is in the +`external_geth` directory which specifies a map of tests to skip, and +accompanying skip text. See the `op-e2e/external/config.go` file for more +details. + +## Generalization + +This shim is included to help document an demonstrate the usage of the +external ethereum process e2e test execution. It is configured to execute in +CI to help ensure that the tests remain compatible with external clients. + +To create your own external test client, these files can likely be used as a +starting point, changing the arguments, log scraping, and other details. Or, +depending on the client and your preference, any binary which is capable of +reading and writing the necessary JSON files should be sufficient (though +will be required to replicate some of the parsing and other logic encapsulated +here). diff --git a/op-e2e/external_geth/main.go b/op-e2e/external_geth/main.go new file mode 100644 index 000000000..c91f1af9f --- /dev/null +++ b/op-e2e/external_geth/main.go @@ -0,0 +1,169 @@ +package main + +import ( + "encoding/json" + "flag" + "fmt" + "os" + "os/exec" + "path/filepath" + "strconv" + "time" + + "github.com/onsi/gomega/gbytes" + "github.com/onsi/gomega/gexec" + + "github.com/ethereum-optimism/optimism/op-e2e/external" +) + +func main() { + var configPath string + flag.StringVar(&configPath, "config", "", "Execute based on the config in this file") + flag.Parse() + if err := run(configPath); err != nil { + fmt.Println(err.Error()) + os.Exit(1) + } + os.Exit(0) +} + +func run(configPath string) error { + if configPath == "" { + return fmt.Errorf("must supply a '--config ' flag") + } + + configFile, err := os.Open(configPath) + if err != nil { + return fmt.Errorf("could not open config: %w", err) + } + + var config external.Config + if err := json.NewDecoder(configFile).Decode(&config); err != nil { + return fmt.Errorf("could not decode config file: %w", err) + } + + binPath, err := filepath.Abs("op-geth") + if err != nil { + return fmt.Errorf("could not get absolute path of op-geth") + } + if _, err := os.Stat(binPath); err != nil { + return fmt.Errorf("could not locate op-geth in working directory, did you forget to run '--init'?") + } + + fmt.Printf("================== op-geth shim initializing chain config ==========================\n") + if err := initialize(binPath, config); err != nil { + return fmt.Errorf("could not initialize datadir: %s %w", binPath, err) + } + + fmt.Printf("================== op-geth shim executing op-geth ==========================\n") + sess, err := execute(binPath, config) + if err != nil { + return fmt.Errorf("could not execute geth: %w", err) + } + defer sess.Close() + + fmt.Printf("================== op-geth shim encoding ready-file ==========================\n") + if err := external.AtomicEncode(config.EndpointsReadyPath, sess.endpoints); err != nil { + return fmt.Errorf("could not encode endpoints") + } + + fmt.Printf("================== op-geth shim awaiting termination ==========================\n") + select { + case <-sess.session.Exited: + return fmt.Errorf("geth exited") + case <-time.After(30 * time.Minute): + return fmt.Errorf("exiting after 30 minute timeout") + } +} + +func initialize(binPath string, config external.Config) error { + cmd := exec.Command( + binPath, + "--datadir", config.DataDir, + "init", config.GenesisPath, + ) + return cmd.Run() +} + +type gethSession struct { + session *gexec.Session + endpoints *external.Endpoints +} + +func (es *gethSession) Close() { + es.session.Terminate() + select { + case <-time.After(5 * time.Second): + es.session.Kill() + case <-es.session.Exited: + } +} + +func execute(binPath string, config external.Config) (*gethSession, error) { + if config.Verbosity < 2 { + return nil, fmt.Errorf("a minimum configured verbosity of 2 is required") + } + cmd := exec.Command( + binPath, + "--datadir", config.DataDir, + "--http", + "--http.addr", "127.0.0.1", + "--http.port", "0", + "--http.api", "web3,debug,eth,txpool,net,engine", + "--ws", + "--ws.addr", "127.0.0.1", + "--ws.port", "0", + "--ws.api", "debug,eth,txpool,net,engine", + "--syncmode=full", + "--nodiscover", + "--port", "0", + "--maxpeers", "0", + "--networkid", strconv.FormatUint(config.ChainID, 10), + "--authrpc.addr", "127.0.0.1", + "--authrpc.port", "0", + "--authrpc.jwtsecret", config.JWTPath, + "--gcmode=archive", + "--verbosity", strconv.FormatUint(config.Verbosity, 10), + ) + sess, err := gexec.Start(cmd, os.Stdout, os.Stderr) + if err != nil { + return nil, fmt.Errorf("could not start op-geth session: %w", err) + } + matcher := gbytes.Say("HTTP server started\\s*endpoint=127.0.0.1:") + var enginePort, httpPort int + for enginePort == 0 || httpPort == 0 { + match, err := matcher.Match(sess.Err) + if err != nil { + return nil, fmt.Errorf("could not execute matcher") + } + if !match { + if sess.Err.Closed() { + return nil, fmt.Errorf("op-geth exited before announcing http ports") + } + // Wait for a bit more output, then try again + time.Sleep(10 * time.Millisecond) + continue + } + var authString string + var port int + fmt.Fscanf(sess.Err, "%d %s", &port, &authString) + switch authString { + case "auth=true": + enginePort = port + case "auth=false": + httpPort = port + default: + return nil, fmt.Errorf("unexpected auth string %q", authString) + } + } + + return &gethSession{ + session: sess, + endpoints: &external.Endpoints{ + HTTPEndpoint: fmt.Sprintf("http://127.0.0.1:%d/", httpPort), + WSEndpoint: fmt.Sprintf("ws://127.0.0.1:%d/", httpPort), + HTTPAuthEndpoint: fmt.Sprintf("http://127.0.0.1:%d/", enginePort), + WSAuthEndpoint: fmt.Sprintf("ws://127.0.0.1:%d/", enginePort), + }, + }, nil +} diff --git a/op-e2e/external_geth/main_test.go b/op-e2e/external_geth/main_test.go new file mode 100644 index 000000000..b2eced560 --- /dev/null +++ b/op-e2e/external_geth/main_test.go @@ -0,0 +1,56 @@ +package main + +import ( + "net" + "net/url" + "os" + "os/exec" + "path/filepath" + "testing" + "time" + + "github.com/stretchr/testify/require" + + e2e "github.com/ethereum-optimism/optimism/op-e2e" + "github.com/ethereum-optimism/optimism/op-e2e/config" +) + +func TestShim(t *testing.T) { + shimPath, err := filepath.Abs("shim") + require.NoError(t, err) + cmd := exec.Command("go", "build", "-o", shimPath, ".") + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + err = cmd.Run() + require.NoError(t, err) + require.FileExists(t, "shim") + + opGethPath, err := filepath.Abs("op-geth") + require.NoError(t, err) + cmd = exec.Command("go", "build", "-o", opGethPath, "github.com/ethereum/go-ethereum/cmd/geth") + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + err = cmd.Run() + require.NoError(t, err) + require.FileExists(t, "op-geth") + + config.EthNodeVerbosity = 4 + + ec := (&e2e.ExternalRunner{ + Name: "TestShim", + BinPath: shimPath, + }).Run(t) + t.Cleanup(func() { _ = ec.Close }) + + for _, endpoint := range []string{ + ec.HTTPEndpoint(), + ec.HTTPAuthEndpoint(), + ec.WSEndpoint(), + ec.WSAuthEndpoint(), + } { + plainURL, err := url.ParseRequestURI(endpoint) + require.NoError(t, err) + _, err = net.DialTimeout("tcp", plainURL.Host, time.Second) + require.NoError(t, err, "could not connect to HTTP port") + } +} diff --git a/op-e2e/external_geth/test_parms.json b/op-e2e/external_geth/test_parms.json new file mode 100644 index 000000000..c00d87226 --- /dev/null +++ b/op-e2e/external_geth/test_parms.json @@ -0,0 +1,5 @@ +{ + "skip_tests":{ + "TestPendingGasLimit":"This test requires directly modifying go structures and cannot be implemented with flags" + } +} diff --git a/op-e2e/external_geth/tools.go b/op-e2e/external_geth/tools.go new file mode 100644 index 000000000..b78b4dd4a --- /dev/null +++ b/op-e2e/external_geth/tools.go @@ -0,0 +1,5 @@ +//go:build tools + +package main + +import _ "github.com/ethereum/go-ethereum/cmd/geth" diff --git a/op-e2e/helper.go b/op-e2e/helper.go index d9ef7e80f..04f5a4c0f 100644 --- a/op-e2e/helper.go +++ b/op-e2e/helper.go @@ -5,7 +5,7 @@ import ( "testing" ) -var enableParallelTesting bool = os.Getenv("E2E_DISABLE_PARALLEL") != "true" +var enableParallelTesting bool = os.Getenv("OP_E2E_DISABLE_PARALLEL") != "true" func InitParallel(t *testing.T) { t.Helper() diff --git a/op-e2e/kroma_geth_test.go b/op-e2e/kroma_geth_test.go deleted file mode 100644 index d6800923d..000000000 --- a/op-e2e/kroma_geth_test.go +++ /dev/null @@ -1,95 +0,0 @@ -package op_e2e - -import ( - "context" - "math/big" - "testing" - "time" - - "github.com/ethereum-optimism/optimism/op-service/eth" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/txpool" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/params" - "github.com/stretchr/testify/require" -) - -// TestMissingGasLimit tests that kroma-geth cannot build a block without gas limit while kroma is active in the chain config. -func TestMissingGasLimit(t *testing.T) { - InitParallel(t) - cfg := DefaultSystemConfig(t) - cfg.DeployConfig.FundDevAccounts = false - ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) - defer cancel() - kromaGeth, err := NewKromaGeth(t, ctx, &cfg) - require.NoError(t, err) - defer kromaGeth.Close() - - attrs, err := kromaGeth.CreatePayloadAttributes() - require.NoError(t, err) - // Remove the GasLimit from the otherwise valid attributes - attrs.GasLimit = nil - - res, err := kromaGeth.StartBlockBuilding(ctx, attrs) - require.ErrorIs(t, err, eth.InputError{}) - require.Equal(t, eth.InvalidPayloadAttributes, err.(eth.InputError).Code) - require.Nil(t, res) -} - -// TestTxGasSameAsBlockGasLimit tests that op-geth rejects transactions that attempt to use the full block gas limit. -// The L1 Info deposit always takes gas so the effective gas limit is lower than the full block gas limit. -func TestTxGasSameAsBlockGasLimit(t *testing.T) { - InitParallel(t) - cfg := DefaultSystemConfig(t) - sys, err := cfg.Start(t) - require.Nil(t, err, "Error starting up system") - defer sys.Close() - - ethPrivKey := sys.cfg.Secrets.Alice - tx := types.MustSignNewTx(ethPrivKey, types.LatestSignerForChainID(cfg.L2ChainIDBig()), &types.DynamicFeeTx{ - ChainID: cfg.L2ChainIDBig(), - Gas: 29_999_999, - }) - ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) - defer cancel() - l2Seq := sys.Clients["sequencer"] - err = l2Seq.SendTransaction(ctx, tx) - require.ErrorContains(t, err, txpool.ErrGasLimit.Error()) - -} - -// TestInvalidDepositInFCU runs an invalid deposit through a FCU/GetPayload/NewPayload/FCU set of calls. -// This tests that deposits must always allow the block to be built even if they are invalid. -func TestInvalidDepositInFCU(t *testing.T) { - InitParallel(t) - cfg := DefaultSystemConfig(t) - cfg.DeployConfig.FundDevAccounts = false - ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) - defer cancel() - kromaGeth, err := NewKromaGeth(t, ctx, &cfg) - require.NoError(t, err) - defer kromaGeth.Close() - - // Create a deposit from alice that will always fail (not enough funds) - fromAddr := cfg.Secrets.Addresses().Alice - balance, err := kromaGeth.L2Client.BalanceAt(ctx, fromAddr, nil) - require.Nil(t, err) - require.Equal(t, 0, balance.Cmp(common.Big0)) - - badDepositTx := types.NewTx(&types.DepositTx{ - From: fromAddr, - To: &fromAddr, // send it to ourselves - Value: big.NewInt(params.Ether), - Gas: 25000, - }) - - // We are inserting a block with an invalid deposit. - // The invalid deposit should still remain in the block. - _, err = kromaGeth.AddL2Block(ctx, badDepositTx) - require.NoError(t, err) - - // Deposit tx was included, but Alice still shouldn't have any ETH - balance, err = kromaGeth.L2Client.BalanceAt(ctx, fromAddr, nil) - require.Nil(t, err) - require.Equal(t, 0, balance.Cmp(common.Big0)) -} diff --git a/op-e2e/l2_gossip_test.go b/op-e2e/l2_gossip_test.go index b20107ca5..d8abfe89a 100644 --- a/op-e2e/l2_gossip_test.go +++ b/op-e2e/l2_gossip_test.go @@ -3,9 +3,10 @@ package op_e2e import ( "testing" - "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/geth" "github.com/ethereum/go-ethereum/common" "github.com/stretchr/testify/require" + + "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/geth" ) func TestTxGossip(t *testing.T) { diff --git a/op-e2e/kroma_geth.go b/op-e2e/op_geth.go similarity index 82% rename from op-e2e/kroma_geth.go rename to op-e2e/op_geth.go index fc5219ea7..43008cb51 100644 --- a/op-e2e/kroma_geth.go +++ b/op-e2e/op_geth.go @@ -17,7 +17,7 @@ import ( "github.com/ethereum/go-ethereum/rpc" "github.com/stretchr/testify/require" - "github.com/ethereum-optimism/optimism/op-chain-ops/genesis" + "github.com/ethereum-optimism/optimism/op-e2e/config" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/geth" "github.com/ethereum-optimism/optimism/op-node/rollup" @@ -26,6 +26,7 @@ import ( "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/sources" "github.com/ethereum-optimism/optimism/op-service/testlog" + "github.com/kroma-network/kroma/kroma-chain-ops/genesis" ) var ( @@ -35,9 +36,9 @@ var ( ErrNewPayloadNotValid = errors.New("newPayload status was not valid") ) -// KromaGeth is an actor that functions as a l2 kroma-geth node +// OpGeth is an actor that functions as a l2 op-geth node // It provides useful functions for advancing and querying the chain -type KromaGeth struct { +type OpGeth struct { node EthInstance l2Engine *sources.EngineClient L2Client *ethclient.Client @@ -49,13 +50,14 @@ type KromaGeth struct { sequenceNum uint64 } -func NewKromaGeth(t *testing.T, ctx context.Context, cfg *SystemConfig) (*KromaGeth, error) { +func NewOpGeth(t *testing.T, ctx context.Context, cfg *SystemConfig) (*OpGeth, error) { logger := testlog.Logger(t, log.LvlCrit) - l1Genesis, err := genesis.BuildL1DeveloperGenesis(cfg.DeployConfig) + + l1Genesis, err := genesis.BuildL1DeveloperGenesis(cfg.DeployConfig, config.L1Allocs, config.L1Deployments, true) require.Nil(t, err) l1Block := l1Genesis.ToBlock() - l2Genesis, err := genesis.BuildL2Genesis(cfg.DeployConfig, l1Block, true) + l2Genesis, err := genesis.BuildL2Genesis(cfg.DeployConfig, l1Block) require.Nil(t, err) l2GenesisBlock := l2Genesis.ToBlock() @@ -73,10 +75,20 @@ func NewKromaGeth(t *testing.T, ctx context.Context, cfg *SystemConfig) (*KromaG } var node EthInstance - gethNode, _, err := geth.InitL2("l2", big.NewInt(int64(cfg.DeployConfig.L2ChainID)), l2Genesis, cfg.JWTFilePath) - require.Nil(t, err) - require.Nil(t, gethNode.Start()) - node = gethNode + if cfg.ExternalL2Shim == "" { + gethNode, _, err := geth.InitL2("l2", big.NewInt(int64(cfg.DeployConfig.L2ChainID)), l2Genesis, cfg.JWTFilePath) + require.Nil(t, err) + require.Nil(t, gethNode.Start()) + node = gethNode + } else { + externalNode := (&ExternalRunner{ + Name: "l2", + BinPath: cfg.ExternalL2Shim, + Genesis: l2Genesis, + JWTPath: cfg.JWTFilePath, + }).Run(t) + node = externalNode + } auth := rpc.WithHTTPAuth(gn.NewJWTAuth(cfg.JWTSecret)) l2Node, err := client.NewRPC(ctx, logger, node.WSAuthEndpoint(), client.WithGethRPCOptions(auth)) @@ -97,7 +109,7 @@ func NewKromaGeth(t *testing.T, ctx context.Context, cfg *SystemConfig) (*KromaG genesisPayload, err := eth.BlockAsPayload(l2GenesisBlock) require.Nil(t, err) - return &KromaGeth{ + return &OpGeth{ node: node, L2Client: l2Client, l2Engine: l2Engine, @@ -109,7 +121,7 @@ func NewKromaGeth(t *testing.T, ctx context.Context, cfg *SystemConfig) (*KromaG }, nil } -func (d *KromaGeth) Close() { +func (d *OpGeth) Close() { _ = d.node.Close() d.l2Engine.Close() d.L2Client.Close() @@ -117,7 +129,7 @@ func (d *KromaGeth) Close() { // AddL2Block Appends a new L2 block to the current chain including the specified transactions // The L1Info transaction is automatically prepended to the created block -func (d *KromaGeth) AddL2Block(ctx context.Context, txs ...*types.Transaction) (*eth.ExecutionPayload, error) { +func (d *OpGeth) AddL2Block(ctx context.Context, txs ...*types.Transaction) (*eth.ExecutionPayload, error) { attrs, err := d.CreatePayloadAttributes(txs...) if err != nil { return nil, err @@ -162,7 +174,7 @@ func (d *KromaGeth) AddL2Block(ctx context.Context, txs ...*types.Transaction) ( // StartBlockBuilding begins block building for the specified PayloadAttributes by sending a engine_forkChoiceUpdated call. // The current L2Head is used as the parent of the new block. // ErrForkChoiceUpdatedNotValid is returned if the forkChoiceUpdate call returns a status other than valid. -func (d *KromaGeth) StartBlockBuilding(ctx context.Context, attrs *eth.PayloadAttributes) (*eth.ForkchoiceUpdatedResult, error) { +func (d *OpGeth) StartBlockBuilding(ctx context.Context, attrs *eth.PayloadAttributes) (*eth.ForkchoiceUpdatedResult, error) { fc := eth.ForkchoiceState{ HeadBlockHash: d.L2Head.BlockHash, SafeBlockHash: d.L2Head.BlockHash, @@ -181,9 +193,12 @@ func (d *KromaGeth) StartBlockBuilding(ctx context.Context, attrs *eth.PayloadAt } // CreatePayloadAttributes creates a valid PayloadAttributes containing a L1Info deposit transaction followed by the supplied transactions. -func (d *KromaGeth) CreatePayloadAttributes(txs ...*types.Transaction) (*eth.PayloadAttributes, error) { +func (d *OpGeth) CreatePayloadAttributes(txs ...*types.Transaction) (*eth.PayloadAttributes, error) { timestamp := d.L2Head.Timestamp + 2 - l1Info, err := derive.L1InfoDepositBytes(d.sequenceNum, d.L1Head, d.SystemConfig) + // [Kroma: START] + // regolith := d.L2ChainConfig.IsRegolith(uint64(timestamp)) + l1Info, err := derive.L1InfoDepositBytes(d.sequenceNum, d.L1Head, d.SystemConfig, true) + // [Kroma: END] if err != nil { return nil, err } diff --git a/op-e2e/op_geth_test.go b/op-e2e/op_geth_test.go new file mode 100644 index 000000000..7a250ba8c --- /dev/null +++ b/op-e2e/op_geth_test.go @@ -0,0 +1,758 @@ +package op_e2e + +import ( + "context" + "math/big" + "testing" + "time" + + "github.com/stretchr/testify/require" + + "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/txpool" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/params" + + "github.com/ethereum-optimism/optimism/op-node/rollup/derive" + "github.com/ethereum-optimism/optimism/op-service/eth" +) + +// TestMissingGasLimit tests that op-geth cannot build a block without gas limit while optimism is active in the chain config. +func TestMissingGasLimit(t *testing.T) { + InitParallel(t) + cfg := DefaultSystemConfig(t) + cfg.DeployConfig.FundDevAccounts = false + ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) + defer cancel() + opGeth, err := NewOpGeth(t, ctx, &cfg) + require.NoError(t, err) + defer opGeth.Close() + + attrs, err := opGeth.CreatePayloadAttributes() + require.NoError(t, err) + // Remove the GasLimit from the otherwise valid attributes + attrs.GasLimit = nil + + res, err := opGeth.StartBlockBuilding(ctx, attrs) + require.Error(t, err) + require.ErrorIs(t, err, eth.InputError{}) + require.Equal(t, eth.InvalidPayloadAttributes, err.(eth.InputError).Code) + require.Nil(t, res) +} + +// TestTxGasSameAsBlockGasLimit tests that op-geth rejects transactions that attempt to use the full block gas limit. +// The L1 Info deposit always takes gas so the effective gas limit is lower than the full block gas limit. +func TestTxGasSameAsBlockGasLimit(t *testing.T) { + InitParallel(t) + cfg := DefaultSystemConfig(t) + sys, err := cfg.Start(t) + require.Nil(t, err, "Error starting up system") + defer sys.Close() + + ethPrivKey := sys.cfg.Secrets.Alice + tx := types.MustSignNewTx(ethPrivKey, types.LatestSignerForChainID(cfg.L2ChainIDBig()), &types.DynamicFeeTx{ + ChainID: cfg.L2ChainIDBig(), + Gas: 29_999_999, + }) + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + defer cancel() + l2Seq := sys.Clients["sequencer"] + err = l2Seq.SendTransaction(ctx, tx) + require.ErrorContains(t, err, txpool.ErrGasLimit.Error()) + +} + +// TestInvalidDepositInFCU runs an invalid deposit through a FCU/GetPayload/NewPayload/FCU set of calls. +// This tests that deposits must always allow the block to be built even if they are invalid. +func TestInvalidDepositInFCU(t *testing.T) { + InitParallel(t) + cfg := DefaultSystemConfig(t) + cfg.DeployConfig.FundDevAccounts = false + ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) + defer cancel() + opGeth, err := NewOpGeth(t, ctx, &cfg) + require.NoError(t, err) + defer opGeth.Close() + + // Create a deposit from alice that will always fail (not enough funds) + fromAddr := cfg.Secrets.Addresses().Alice + balance, err := opGeth.L2Client.BalanceAt(ctx, fromAddr, nil) + require.Nil(t, err) + require.Equal(t, 0, balance.Cmp(common.Big0)) + + badDepositTx := types.NewTx(&types.DepositTx{ + From: fromAddr, + To: &fromAddr, // send it to ourselves + Value: big.NewInt(params.Ether), + Gas: 25000, + // [Kroma: START] + // IsSystemTransaction: false, + // [Kroma: END] + }) + + // We are inserting a block with an invalid deposit. + // The invalid deposit should still remain in the block. + _, err = opGeth.AddL2Block(ctx, badDepositTx) + require.NoError(t, err) + + // Deposit tx was included, but Alice still shouldn't have any ETH + balance, err = opGeth.L2Client.BalanceAt(ctx, fromAddr, nil) + require.Nil(t, err) + require.Equal(t, 0, balance.Cmp(common.Big0)) +} + +// TestGethOnlyPendingBlockIsLatest walks through an engine-API block building job, +// and asserts that the pending block is set to match the latest block at every stage, +// for stability and tx-privacy. +func TestGethOnlyPendingBlockIsLatest(t *testing.T) { + InitParallel(t) + cfg := DefaultSystemConfig(t) + cfg.DeployConfig.FundDevAccounts = true + ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) + defer cancel() + opGeth, err := NewOpGeth(t, ctx, &cfg) + require.NoError(t, err) + defer opGeth.Close() + + checkPending := func(stage string, number uint64) { + // TODO(CLI-4044): pending-block ID change + pendingBlock, err := opGeth.L2Client.BlockByNumber(ctx, big.NewInt(-1)) + require.NoError(t, err, "failed to fetch pending block at stage "+stage) + require.Equal(t, number, pendingBlock.NumberU64(), "pending block must have expected number") + latestBlock, err := opGeth.L2Client.BlockByNumber(ctx, nil) + require.NoError(t, err, "failed to fetch latest block at stage "+stage) + require.Equal(t, pendingBlock.Hash(), latestBlock.Hash(), "pending and latest do not match at stage "+stage) + } + + checkPending("genesis", 0) + + amount := big.NewInt(42) // send 42 wei + + aliceStartBalance, err := opGeth.L2Client.PendingBalanceAt(ctx, cfg.Secrets.Addresses().Alice) + require.NoError(t, err) + require.True(t, aliceStartBalance.Cmp(big.NewInt(0)) > 0, "alice must be funded") + + checkPendingBalance := func() { + pendingBalance, err := opGeth.L2Client.PendingBalanceAt(ctx, cfg.Secrets.Addresses().Alice) + require.NoError(t, err) + require.Equal(t, pendingBalance, aliceStartBalance, "pending balance must still be the same") + } + + startBlock, err := opGeth.L2Client.BlockByNumber(ctx, nil) + require.NoError(t, err) + + signer := types.LatestSigner(opGeth.L2ChainConfig) + tip := big.NewInt(7_000_000_000) // 7 gwei tip + tx := types.MustSignNewTx(cfg.Secrets.Alice, signer, &types.DynamicFeeTx{ + ChainID: big.NewInt(int64(cfg.DeployConfig.L2ChainID)), + Nonce: 0, + GasTipCap: tip, + GasFeeCap: new(big.Int).Add(startBlock.BaseFee(), tip), + Gas: 1_000_000, + To: &cfg.Secrets.Addresses().Bob, + Value: amount, + Data: nil, + }) + require.NoError(t, opGeth.L2Client.SendTransaction(ctx, tx), "send tx to make pending work different") + checkPending("prepared", 0) + + // Wait for tx to be in tx-pool, for it to be picked up in block building + var txPoolStatus struct { + Pending hexutil.Uint64 `json:"pending"` + } + for i := 0; i < 5; i++ { + require.NoError(t, opGeth.L2Client.Client().Call(&txPoolStatus, "txpool_status")) + if txPoolStatus.Pending == 0 { + time.Sleep(time.Second) + } else { + break + } + } + require.NotZero(t, txPoolStatus.Pending, "must have pending tx in pool") + + checkPending("in-pool", 0) + checkPendingBalance() + + // start building a block + attrs, err := opGeth.CreatePayloadAttributes() + require.NoError(t, err) + attrs.NoTxPool = false // we want to include a tx + fc := eth.ForkchoiceState{ + HeadBlockHash: opGeth.L2Head.BlockHash, + SafeBlockHash: opGeth.L2Head.BlockHash, + } + res, err := opGeth.l2Engine.ForkchoiceUpdate(ctx, &fc, attrs) + require.NoError(t, err) + + checkPending("building", 0) + checkPendingBalance() + + // Now we have to wait until the block-building job picks up the tx from the tx-pool. + // See go routine that spins up in buildPayload() func in payload_building.go in miner package. + // We can't check it, we don't want to finish block-building prematurely, and so we have to wait. + time.Sleep(time.Second * 4) // conservatively wait 4 seconds, CI might lag during block building. + + // retrieve the block + payload, err := opGeth.l2Engine.GetPayload(ctx, *res.PayloadID) + require.NoError(t, err) + checkPending("retrieved", 0) + require.Len(t, payload.Transactions, 2, "must include L1 info tx and tx from alice") + checkPendingBalance() + + // process the block + status, err := opGeth.l2Engine.NewPayload(ctx, payload) + require.NoError(t, err) + require.Equal(t, eth.ExecutionValid, status.Status) + checkPending("processed", 0) + checkPendingBalance() + + // make the block canonical + fc = eth.ForkchoiceState{ + HeadBlockHash: payload.BlockHash, + SafeBlockHash: payload.BlockHash, + } + res, err = opGeth.l2Engine.ForkchoiceUpdate(ctx, &fc, nil) + require.NoError(t, err) + require.Equal(t, eth.ExecutionValid, res.PayloadStatus.Status) + checkPending("canonical", 1) +} + +func TestPreregolith(t *testing.T) { + t.Skip("kroma does not support pre-regolith") + InitParallel(t) + futureTimestamp := hexutil.Uint64(4) + tests := []struct { + name string + regolithTime *hexutil.Uint64 + }{ + {name: "RegolithNotScheduled"}, + {name: "RegolithNotYetActive", regolithTime: &futureTimestamp}, + } + for _, test := range tests { + test := test + t.Run("GasUsed_"+test.name, func(t *testing.T) { + InitParallel(t) + // Setup an L2 EE and create a client connection to the engine. + // We also need to setup a L1 Genesis to create the rollup genesis. + cfg := DefaultSystemConfig(t) + cfg.DeployConfig.L2GenesisRegolithTimeOffset = test.regolithTime + + ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) + defer cancel() + + opGeth, err := NewOpGeth(t, ctx, &cfg) + require.NoError(t, err) + defer opGeth.Close() + + fromAddr := cfg.Secrets.Addresses().Alice + + oldBalance, err := opGeth.L2Client.BalanceAt(ctx, fromAddr, nil) + require.NoError(t, err) + + // Simple transfer deposit tx + depositTx := types.NewTx(&types.DepositTx{ + From: fromAddr, + To: &fromAddr, // send it to ourselves + Value: big.NewInt(params.Ether), + Gas: 25000, + // [Kroma: START] + // IsSystemTransaction: false, + // [Kroma: END] + }) + + block, err := opGeth.AddL2Block(ctx, depositTx) + require.NoError(t, err) + + // L1Info tx should report 0 gas used + infoTx, err := opGeth.L2Client.TransactionInBlock(ctx, block.BlockHash, 0) + require.NoError(t, err) + infoRcpt, err := opGeth.L2Client.TransactionReceipt(ctx, infoTx.Hash()) + require.NoError(t, err) + require.Zero(t, infoRcpt.GasUsed, "should use 0 gas for system tx") + + // Deposit tx should report all gas used + receipt, err := opGeth.L2Client.TransactionReceipt(ctx, depositTx.Hash()) + require.NoError(t, err) + require.Equal(t, depositTx.Gas(), receipt.GasUsed, "should report all gas used") + + // Should not refund ETH for unused gas + newBalance, err := opGeth.L2Client.BalanceAt(ctx, fromAddr, nil) + require.NoError(t, err) + require.Equal(t, oldBalance, newBalance, "should not repay sender for unused gas") + }) + + t.Run("DepositNonce_"+test.name, func(t *testing.T) { + InitParallel(t) + // Setup an L2 EE and create a client connection to the engine. + // We also need to setup a L1 Genesis to create the rollup genesis. + cfg := DefaultSystemConfig(t) + cfg.DeployConfig.L2GenesisRegolithTimeOffset = test.regolithTime + + ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) + defer cancel() + + opGeth, err := NewOpGeth(t, ctx, &cfg) + require.NoError(t, err) + defer opGeth.Close() + + fromAddr := cfg.Secrets.Addresses().Alice + // Include a tx just to ensure Alice's nonce isn't 0 + incrementNonceTx := types.NewTx(&types.DepositTx{ + From: fromAddr, + To: &fromAddr, + Value: big.NewInt(0), + Gas: 21_000, + // [Kroma: START] + // IsSystemTransaction: false, + // [Kroma: END] + }) + + // Contract creation deposit tx + contractCreateTx := types.NewTx(&types.DepositTx{ + From: fromAddr, + Value: big.NewInt(params.Ether), + Gas: 1000001, + Data: []byte{}, + // [Kroma: START] + // IsSystemTransaction: false, + // [Kroma: END] + }) + + _, err = opGeth.AddL2Block(ctx, incrementNonceTx, contractCreateTx) + require.NoError(t, err) + + expectedNonce := uint64(1) + incorrectContractAddress := crypto.CreateAddress(fromAddr, uint64(0)) + correctContractAddress := crypto.CreateAddress(fromAddr, expectedNonce) + createRcpt, err := opGeth.L2Client.TransactionReceipt(ctx, contractCreateTx.Hash()) + require.NoError(t, err) + require.Equal(t, types.ReceiptStatusSuccessful, createRcpt.Status, "create should succeed") + require.Nil(t, createRcpt.DepositNonce, "should not report deposit nonce") + require.Equal(t, incorrectContractAddress, createRcpt.ContractAddress, "should report correct contract address") + + contractBalance, err := opGeth.L2Client.BalanceAt(ctx, incorrectContractAddress, nil) + require.NoError(t, err) + require.Equal(t, uint64(0), contractBalance.Uint64(), "balance unchanged on incorrect contract address") + + contractBalance, err = opGeth.L2Client.BalanceAt(ctx, correctContractAddress, nil) + require.NoError(t, err) + require.Equal(t, uint64(params.Ether), contractBalance.Uint64(), "balance changed on correct contract address") + + // Check the actual transaction nonce is reported correctly when retrieving the tx from the API. + tx, _, err := opGeth.L2Client.TransactionByHash(ctx, contractCreateTx.Hash()) + require.NoError(t, err) + require.Zero(t, *tx.EffectiveNonce(), "should report 0 as tx nonce") + }) + + t.Run("UnusedGasConsumed_"+test.name, func(t *testing.T) { + InitParallel(t) + cfg := DefaultSystemConfig(t) + cfg.DeployConfig.L2GenesisRegolithTimeOffset = test.regolithTime + + ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) + defer cancel() + + opGeth, err := NewOpGeth(t, ctx, &cfg) + require.NoError(t, err) + defer opGeth.Close() + + fromAddr := cfg.Secrets.Addresses().Alice + + // Deposit TX with a high gas limit but using very little actual gas + depositTx := types.NewTx(&types.DepositTx{ + From: fromAddr, + To: &fromAddr, // send it to ourselves + Value: big.NewInt(params.Ether), + // SystemTx is assigned 1M gas limit + Gas: uint64(cfg.DeployConfig.L2GenesisBlockGasLimit) - 1_000_000, + // [Kroma: START] + // IsSystemTransaction: false, + // [Kroma: END] + }) + + signer := types.LatestSigner(opGeth.L2ChainConfig) + // Second tx with a gas limit that will fit in regolith but not bedrock + tx := types.MustSignNewTx(cfg.Secrets.Bob, signer, &types.DynamicFeeTx{ + ChainID: big.NewInt(int64(cfg.DeployConfig.L2ChainID)), + Nonce: 0, + GasTipCap: big.NewInt(100), + GasFeeCap: big.NewInt(100000), + Gas: 1_000_001, + To: &cfg.Secrets.Addresses().Alice, + Value: big.NewInt(0), + Data: nil, + }) + + _, err = opGeth.AddL2Block(ctx, depositTx, tx) + // Geth checks the gas limit usage of transactions as part of validating the payload attributes and refuses to even start building the block + require.ErrorContains(t, err, "Invalid payload attributes", "block should be invalid due to using too much gas") + }) + + t.Run("AllowSystemTx_"+test.name, func(t *testing.T) { + InitParallel(t) + cfg := DefaultSystemConfig(t) + cfg.DeployConfig.L2GenesisRegolithTimeOffset = test.regolithTime + + ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) + defer cancel() + + opGeth, err := NewOpGeth(t, ctx, &cfg) + require.NoError(t, err) + defer opGeth.Close() + + systemTx, err := derive.L1InfoDeposit(1, opGeth.L1Head, opGeth.SystemConfig, false) + // [Kroma: START] + // systemTx.IsSystemTransaction = true + // [Kroma: END] + require.NoError(t, err) + + _, err = opGeth.AddL2Block(ctx, types.NewTx(systemTx)) + require.NoError(t, err, "should allow blocks containing system tx") + }) + } +} + +func TestRegolith(t *testing.T) { + InitParallel(t) + tests := []struct { + name string + regolithTime hexutil.Uint64 + activateRegolith func(ctx context.Context, opGeth *OpGeth) + }{ + {name: "ActivateAtGenesis", regolithTime: 0, activateRegolith: func(ctx context.Context, opGeth *OpGeth) {}}, + {name: "ActivateAfterGenesis", regolithTime: 2, activateRegolith: func(ctx context.Context, opGeth *OpGeth) { + _, err := opGeth.AddL2Block(ctx) + require.NoError(t, err) + }}, + } + for _, test := range tests { + test := test + t.Run("GasUsedIsAccurate_"+test.name, func(t *testing.T) { + InitParallel(t) + // Setup an L2 EE and create a client connection to the engine. + // We also need to setup a L1 Genesis to create the rollup genesis. + cfg := DefaultSystemConfig(t) + cfg.DeployConfig.L2GenesisRegolithTimeOffset = &test.regolithTime + + ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) + defer cancel() + + opGeth, err := NewOpGeth(t, ctx, &cfg) + require.NoError(t, err) + defer opGeth.Close() + + test.activateRegolith(ctx, opGeth) + + fromAddr := cfg.Secrets.Addresses().Alice + + oldBalance, err := opGeth.L2Client.BalanceAt(ctx, fromAddr, nil) + require.NoError(t, err) + + // Simple transfer deposit tx + depositTx := types.NewTx(&types.DepositTx{ + From: fromAddr, + To: &fromAddr, // send it to ourselves + Value: big.NewInt(params.Ether), + Gas: 25000, + // [Kroma: START] + // IsSystemTransaction: false, + // [Kroma: END] + }) + + block, err := opGeth.AddL2Block(ctx, depositTx) + require.NoError(t, err) + + // L1Info tx should report actual gas used, not 0 or the tx gas limit + infoTx, err := opGeth.L2Client.TransactionInBlock(ctx, block.BlockHash, 0) + require.NoError(t, err) + infoRcpt, err := opGeth.L2Client.TransactionReceipt(ctx, infoTx.Hash()) + require.NoError(t, err) + require.NotZero(t, infoRcpt.GasUsed) + require.NotEqual(t, infoTx.Gas(), infoRcpt.GasUsed) + + // Deposit tx should report actual gas used (21,000 for a normal transfer) + receipt, err := opGeth.L2Client.TransactionReceipt(ctx, depositTx.Hash()) + require.NoError(t, err) + require.Equal(t, uint64(21_000), receipt.GasUsed, "should report actual gas used") + + // Should not refund ETH for unused gas + newBalance, err := opGeth.L2Client.BalanceAt(ctx, fromAddr, nil) + require.NoError(t, err) + require.Equal(t, oldBalance, newBalance, "should not repay sender for unused gas") + }) + + t.Run("DepositNonceCorrect_"+test.name, func(t *testing.T) { + InitParallel(t) + // Setup an L2 EE and create a client connection to the engine. + // We also need to setup a L1 Genesis to create the rollup genesis. + cfg := DefaultSystemConfig(t) + cfg.DeployConfig.L2GenesisRegolithTimeOffset = &test.regolithTime + + ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) + defer cancel() + + opGeth, err := NewOpGeth(t, ctx, &cfg) + require.NoError(t, err) + defer opGeth.Close() + + test.activateRegolith(ctx, opGeth) + + fromAddr := cfg.Secrets.Addresses().Alice + // Include a tx just to ensure Alice's nonce isn't 0 + incrementNonceTx := types.NewTx(&types.DepositTx{ + From: fromAddr, + To: &fromAddr, + Value: big.NewInt(0), + Gas: 21_000, + // [Kroma: START] + // IsSystemTransaction: false, + // [Kroma: END] + }) + + // Contract creation deposit tx + contractCreateTx := types.NewTx(&types.DepositTx{ + From: fromAddr, + Value: big.NewInt(params.Ether), + Gas: 1000001, + Data: []byte{}, + // [Kroma: START] + // IsSystemTransaction: false, + // [Kroma: END] + }) + + _, err = opGeth.AddL2Block(ctx, incrementNonceTx, contractCreateTx) + require.NoError(t, err) + + expectedNonce := uint64(1) + correctContractAddress := crypto.CreateAddress(fromAddr, expectedNonce) + createRcpt, err := opGeth.L2Client.TransactionReceipt(ctx, contractCreateTx.Hash()) + require.NoError(t, err) + require.Equal(t, types.ReceiptStatusSuccessful, createRcpt.Status, "create should succeed") + require.Equal(t, &expectedNonce, createRcpt.DepositNonce, "should report correct deposit nonce") + require.Equal(t, correctContractAddress, createRcpt.ContractAddress, "should report correct contract address") + + contractBalance, err := opGeth.L2Client.BalanceAt(ctx, createRcpt.ContractAddress, nil) + require.NoError(t, err) + require.Equal(t, uint64(params.Ether), contractBalance.Uint64(), "balance changed on correct contract address") + + // Check the actual transaction nonce is reported correctly when retrieving the tx from the API. + tx, _, err := opGeth.L2Client.TransactionByHash(ctx, contractCreateTx.Hash()) + require.NoError(t, err) + require.Equal(t, expectedNonce, *tx.EffectiveNonce(), "should report actual tx nonce") + + // Should be able to search for logs even though there are deposit transactions in blocks. + logs, err := opGeth.L2Client.FilterLogs(ctx, ethereum.FilterQuery{}) + require.NoError(t, err) + require.NotNil(t, logs) + require.Empty(t, logs) + }) + + t.Run("ReturnUnusedGasToPool_"+test.name, func(t *testing.T) { + if test.regolithTime != hexutil.Uint64(0) { + t.Skip("kroma does not support pre-regolith") + } + + InitParallel(t) + cfg := DefaultSystemConfig(t) + cfg.DeployConfig.L2GenesisRegolithTimeOffset = &test.regolithTime + + ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) + defer cancel() + + opGeth, err := NewOpGeth(t, ctx, &cfg) + require.NoError(t, err) + defer opGeth.Close() + + test.activateRegolith(ctx, opGeth) + + fromAddr := cfg.Secrets.Addresses().Alice + + // Deposit TX with a high gas limit but using very little actual gas + depositTx := types.NewTx(&types.DepositTx{ + From: fromAddr, + To: &fromAddr, // send it to ourselves + Value: big.NewInt(params.Ether), + // SystemTx is assigned 1M gas limit + Gas: uint64(cfg.DeployConfig.L2GenesisBlockGasLimit) - 1_000_000, + // [Kroma: START] + // IsSystemTransaction: false, + // [Kroma: END] + }) + + signer := types.LatestSigner(opGeth.L2ChainConfig) + // Second tx with a gas limit that will fit in regolith but not bedrock + tx := types.MustSignNewTx(cfg.Secrets.Bob, signer, &types.DynamicFeeTx{ + ChainID: big.NewInt(int64(cfg.DeployConfig.L2ChainID)), + Nonce: 0, + GasTipCap: big.NewInt(100), + GasFeeCap: big.NewInt(100000), + Gas: 1_000_001, + To: &cfg.Secrets.Addresses().Alice, + Value: big.NewInt(0), + Data: nil, + }) + + _, err = opGeth.AddL2Block(ctx, depositTx, tx) + require.NoError(t, err, "block should be valid as cumulativeGasUsed only tracks actual usage now") + }) + + t.Run("RejectSystemTx_"+test.name, func(t *testing.T) { + t.Skip("IsSystemTransaction does not exist in the kroma geth") + + InitParallel(t) + cfg := DefaultSystemConfig(t) + cfg.DeployConfig.L2GenesisRegolithTimeOffset = &test.regolithTime + + ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) + defer cancel() + + opGeth, err := NewOpGeth(t, ctx, &cfg) + require.NoError(t, err) + defer opGeth.Close() + + test.activateRegolith(ctx, opGeth) + + systemTx, err := derive.L1InfoDeposit(1, opGeth.L1Head, opGeth.SystemConfig, true) + // [Kroma: START] + // systemTx.IsSystemTransaction = true + // [Kroma: END] + require.NoError(t, err) + + _, err = opGeth.AddL2Block(ctx, types.NewTx(systemTx)) + require.ErrorIs(t, err, ErrNewPayloadNotValid, "should reject blocks containing system tx") + }) + + t.Run("IncludeGasRefunds_"+test.name, func(t *testing.T) { + InitParallel(t) + // Simple constructor that is prefixed to the actual contract code + // Results in the contract code being returned as the code for the new contract + deployPrefixSize := byte(16) + deployPrefix := []byte{ + // Copy input data after this prefix into memory starting at address 0x00 + // CODECOPY arg size + byte(vm.PUSH1), deployPrefixSize, + byte(vm.CODESIZE), + byte(vm.SUB), + // CODECOPY arg offset + byte(vm.PUSH1), deployPrefixSize, + // CODECOPY arg destOffset + byte(vm.PUSH1), 0x00, + byte(vm.CODECOPY), + + // Return code from memory + // RETURN arg size + byte(vm.PUSH1), deployPrefixSize, + byte(vm.CODESIZE), + byte(vm.SUB), + // RETURN arg offset + byte(vm.PUSH1), 0x00, + byte(vm.RETURN), + } + // Stores the first word from call data code to storage slot 0 + sstoreContract := []byte{ + // Load first word from call data + byte(vm.PUSH1), 0x00, + byte(vm.CALLDATALOAD), + + // Store it to slot 0 + byte(vm.PUSH1), 0x00, + byte(vm.SSTORE), + } + + deployData := append(deployPrefix, sstoreContract...) + + cfg := DefaultSystemConfig(t) + cfg.DeployConfig.L2GenesisRegolithTimeOffset = &test.regolithTime + + ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) + defer cancel() + + opGeth, err := NewOpGeth(t, ctx, &cfg) + require.NoError(t, err) + defer opGeth.Close() + + test.activateRegolith(ctx, opGeth) + fromAddr := cfg.Secrets.Addresses().Alice + storeContractAddr := crypto.CreateAddress(fromAddr, 0) + + // Deposit TX to deploy a contract that lets us store an arbitrary value + deployTx := types.NewTx(&types.DepositTx{ + From: fromAddr, + Value: common.Big0, + Data: deployData, + Gas: 1_000_000, + // [Kroma: START] + // IsSystemTransaction: false, + // [Kroma: END] + }) + + // Store a non-zero value + storeTx := types.NewTx(&types.DepositTx{ + From: fromAddr, + To: &storeContractAddr, + Value: common.Big0, + Data: []byte{0x06}, + Gas: 1_000_000, + // [Kroma: START] + // IsSystemTransaction: false, + // [Kroma: END] + }) + + // Store a non-zero value + zeroTx := types.NewTx(&types.DepositTx{ + From: fromAddr, + To: &storeContractAddr, + Value: common.Big0, + Data: []byte{0x00}, + Gas: 1_000_000, + // [Kroma: START] + // IsSystemTransaction: false, + // [Kroma: END] + }) + + // Store a non-zero value again + // Has same gas cost as zeroTx, except the first tx gets a gas refund for clearing the storage slot + rezeroTx := types.NewTx(&types.DepositTx{ + From: fromAddr, + To: &storeContractAddr, + Value: common.Big0, + Data: []byte{0x00}, + Gas: 1_000_001, + // [Kroma: START] + // IsSystemTransaction: false, + // [Kroma: END] + }) + + _, err = opGeth.AddL2Block(ctx, deployTx, storeTx, zeroTx, rezeroTx) + require.NoError(t, err) + + // Sanity check the contract code deployed correctly + code, err := opGeth.L2Client.CodeAt(ctx, storeContractAddr, nil) + require.NoError(t, err) + require.Equal(t, sstoreContract, code, "should create contract with expected code") + + deployReceipt, err := opGeth.L2Client.TransactionReceipt(ctx, deployTx.Hash()) + require.NoError(t, err) + require.Equal(t, types.ReceiptStatusSuccessful, deployReceipt.Status) + require.Equal(t, storeContractAddr, deployReceipt.ContractAddress, "should create contract at expected address") + + storeReceipt, err := opGeth.L2Client.TransactionReceipt(ctx, storeTx.Hash()) + require.NoError(t, err) + require.Equal(t, types.ReceiptStatusSuccessful, storeReceipt.Status, "setting storage value should succeed") + + zeroReceipt, err := opGeth.L2Client.TransactionReceipt(ctx, zeroTx.Hash()) + require.NoError(t, err) + require.Equal(t, types.ReceiptStatusSuccessful, zeroReceipt.Status, "zeroing storage value should succeed") + + rezeroReceipt, err := opGeth.L2Client.TransactionReceipt(ctx, rezeroTx.Hash()) + require.NoError(t, err) + require.Equal(t, types.ReceiptStatusSuccessful, rezeroReceipt.Status, "rezeroing storage value should succeed") + + require.Greater(t, rezeroReceipt.GasUsed, zeroReceipt.GasUsed, "rezero should use more gas due to not getting gas refund for clearing slot") + }) + } +} diff --git a/op-e2e/setup.go b/op-e2e/setup.go index 1bb08a4e0..2fddd0e17 100644 --- a/op-e2e/setup.go +++ b/op-e2e/setup.go @@ -39,9 +39,7 @@ import ( bss "github.com/ethereum-optimism/optimism/op-batcher/batcher" "github.com/ethereum-optimism/optimism/op-batcher/compressor" batchermetrics "github.com/ethereum-optimism/optimism/op-batcher/metrics" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" - "github.com/ethereum-optimism/optimism/op-bindings/predeploys" - "github.com/ethereum-optimism/optimism/op-chain-ops/genesis" + "github.com/ethereum-optimism/optimism/op-e2e/config" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/geth" "github.com/ethereum-optimism/optimism/op-e2e/testdata" @@ -60,11 +58,16 @@ import ( "github.com/ethereum-optimism/optimism/op-service/sources" "github.com/ethereum-optimism/optimism/op-service/testlog" "github.com/ethereum-optimism/optimism/op-service/txmgr" + "github.com/kroma-network/kroma/kroma-bindings/bindings" + "github.com/kroma-network/kroma/kroma-bindings/predeploys" + "github.com/kroma-network/kroma/kroma-chain-ops/genesis" "github.com/kroma-network/kroma/kroma-validator" validatormetrics "github.com/kroma-network/kroma/kroma-validator/metrics" ) -var testingJWTSecret = [32]byte{123} +var ( + testingJWTSecret = [32]byte{123} +) func newTxMgrConfig(l1Addr string, privKey *ecdsa.PrivateKey) txmgr.CLIConfig { return txmgr.CLIConfig{ @@ -82,95 +85,20 @@ func newTxMgrConfig(l1Addr string, privKey *ecdsa.PrivateKey) txmgr.CLIConfig { } func DefaultSystemConfig(t *testing.T) SystemConfig { + config.ExternalL2TestParms.SkipIfNecessary(t) + secrets, err := e2eutils.DefaultMnemonicConfig.Secrets() require.NoError(t, err) - addresses := secrets.Addresses() - - deployConfig := &genesis.DeployConfig{ - L1ChainID: 900, - L2ChainID: 901, - L2BlockTime: 1, - - FinalizationPeriodSeconds: 60 * 60 * 24, - MaxSequencerDrift: 10, - SequencerWindowSize: 30, - ChannelTimeout: 10, - P2PSequencerAddress: addresses.SequencerP2P, - BatchInboxAddress: common.Address{0: 0x52, 19: 0xff}, // tbd - BatchSenderAddress: addresses.Batcher, - - ValidatorPoolTrustedValidator: addresses.TrustedValidator, - ValidatorPoolRequiredBondAmount: uint642big(1), - ValidatorPoolMaxUnbond: 10, - ValidatorPoolRoundDuration: 2, - - L2OutputOracleSubmissionInterval: 4, - L2OutputOracleStartingTimestamp: -1, - - L1BlockTime: 2, - L1GenesisBlockNonce: 4660, - CliqueSignerAddress: common.Address{}, // op-e2e used to run Clique, but now uses fake Proof of Stake. - L1GenesisBlockTimestamp: hexutil.Uint64(time.Now().Unix()), - L1GenesisBlockGasLimit: 30_000_000, - L1GenesisBlockDifficulty: uint642big(1), - L1GenesisBlockMixHash: common.Hash{}, - L1GenesisBlockCoinbase: common.Address{}, - L1GenesisBlockNumber: 0, - L1GenesisBlockGasUsed: 0, - L1GenesisBlockParentHash: common.Hash{}, - L1GenesisBlockBaseFeePerGas: uint642big(7), - L1StartingBlockTag: &genesis.MarshalableRPCBlockNumberOrHash{ - BlockNumber: nil, - BlockHash: &common.Hash{}, - RequireCanonical: true, - }, - - L2GenesisBlockNonce: 0, - L2GenesisBlockGasLimit: 30_000_000, - L2GenesisBlockDifficulty: uint642big(1), - L2GenesisBlockMixHash: common.Hash{}, - L2GenesisBlockNumber: 0, - L2GenesisBlockGasUsed: 0, - L2GenesisBlockParentHash: common.Hash{}, - L2GenesisBlockBaseFeePerGas: uint642big(7), - - ColosseumCreationPeriodSeconds: 60 * 60 * 20, - ColosseumBisectionTimeout: 120, - ColosseumProvingTimeout: 480, - ColosseumDummyHash: common.HexToHash("0xa1235b834d6f1f78f78bc4db856fbc49302cce2c519921347600693021e087f7"), - ColosseumMaxTxs: 100, - ColosseumSegmentsLengths: "3,3", - - SecurityCouncilOwners: []common.Address{addresses.Challenger1, addresses.Alice, addresses.Bob, addresses.Mallory}, - - GasPriceOracleOverhead: 2100, - GasPriceOracleScalar: 1_000_000, - ValidatorRewardScalar: 5000, - - ProxyAdminOwner: addresses.ProxyAdminOwner, - ProtocolVaultRecipient: common.Address{19: 2}, - L1FeeVaultRecipient: common.Address{19: 3}, - - DeploymentWaitConfirmations: 1, + deployConfig := config.DeployConfig.Copy() + deployConfig.L1GenesisBlockTimestamp = hexutil.Uint64(time.Now().Unix()) + deployConfig.L2GenesisSpanBatchTimeOffset = e2eutils.SpanBatchTimeOffset() + require.NoError(t, deployConfig.Check(), "Deploy config is invalid, do you need to run make devnet-allocs?") + l1Deployments := config.L1Deployments.Copy() + require.NoError(t, l1Deployments.Check()) - EIP1559Elasticity: 2, - EIP1559Denominator: 8, - - FundDevAccounts: true, - - GovernorVotingDelayBlocks: 0, - GovernorVotingPeriodBlocks: 25, - GovernorProposalThreshold: 1, - GovernorVotesQuorumFractionPercent: 51, - TimeLockMinDelaySeconds: 1, - ZKVerifierHashScalar: (*hexutil.Big)(hexutil.MustDecodeBig("0x1545b1bf82c58ee35648bd877da9c5010193e82b036b16bf382acf31bc2ab576")), - ZKVerifierM56Px: (*hexutil.Big)(hexutil.MustDecodeBig("0x15ae1a8e3b993dd9aadc8f9086d1ea239d4cd5c09cfa445f337e1b60d7b3eb87")), - ZKVerifierM56Py: (*hexutil.Big)(hexutil.MustDecodeBig("0x2c702ede24f9db8c8c9a439975facd3872a888c5f84f58b3b5f5a5623bac945a")), - } - - if err := deployConfig.InitDeveloperDeployedAddresses(); err != nil { - panic(err) - } + require.Equal(t, secrets.Addresses().Batcher, deployConfig.BatchSenderAddress) + require.Equal(t, secrets.Addresses().SequencerP2P, deployConfig.P2PSequencerAddress) + require.Equal(t, secrets.Addresses().TrustedValidator, deployConfig.ValidatorPoolTrustedValidator) // Tests depend on premine being filled with secrets addresses premine := make(map[common.Address]*big.Int) @@ -182,6 +110,7 @@ func DefaultSystemConfig(t *testing.T) SystemConfig { Secrets: secrets, Premine: premine, DeployConfig: deployConfig, + L1Deployments: config.L1Deployments, L1InfoPredeployAddress: predeploys.L1BlockAddr, JWTFilePath: writeDefaultJWT(t), JWTSecret: testingJWTSecret, @@ -217,12 +146,13 @@ func DefaultSystemConfig(t *testing.T) SystemConfig { "verifier": testlog.Logger(t, log.LvlInfo).New("role", "verifier"), "sequencer": testlog.Logger(t, log.LvlInfo).New("role", "sequencer"), "batcher": testlog.Logger(t, log.LvlInfo).New("role", "batcher"), - "validator": testlog.Logger(t, log.LvlInfo).New("role", "validator"), - "challenger": testlog.Logger(t, log.LvlInfo).New("role", "challenger"), + "validator": testlog.Logger(t, log.LvlCrit).New("role", "validator"), + "challenger": testlog.Logger(t, log.LvlCrit).New("role", "challenger"), }, GethOptions: map[string][]geth.GethOption{}, P2PTopology: nil, // no P2P connectivity by default NonFinalizedOutputs: false, + ExternalL2Shim: config.ExternalL2Shim, BatcherTargetL1TxSizeBytes: 100_000, } } @@ -245,7 +175,8 @@ type SystemConfig struct { Secrets *e2eutils.Secrets L1InfoPredeployAddress common.Address - DeployConfig *genesis.DeployConfig + DeployConfig *genesis.DeployConfig + L1Deployments *genesis.L1Deployments JWTFilePath string JWTSecret [32]byte @@ -257,6 +188,8 @@ type SystemConfig struct { ValidatorLogger log.Logger BatcherLogger log.Logger + ExternalL2Shim string + // map of outbound connections to other nodes. Node names prefixed with "~" are unconnected but linked. // A nil map disables P2P completely. // Any node name not in the topology will not have p2p enabled. @@ -438,7 +371,11 @@ func (cfg SystemConfig) Start(t *testing.T, _opts ...SystemConfigOption) (*Syste c = sys.TimeTravelClock } - l1Genesis, err := genesis.BuildL1DeveloperGenesis(cfg.DeployConfig) + if err := cfg.DeployConfig.Check(); err != nil { + return nil, err + } + + l1Genesis, err := genesis.BuildL1DeveloperGenesis(cfg.DeployConfig, config.L1Allocs, config.L1Deployments, true) if err != nil { return nil, err } @@ -460,7 +397,7 @@ func (cfg SystemConfig) Start(t *testing.T, _opts ...SystemConfigOption) (*Syste } l1Block := l1Genesis.ToBlock() - l2Genesis, err := genesis.BuildL2Genesis(cfg.DeployConfig, l1Block, true) + l2Genesis, err := genesis.BuildL2Genesis(cfg.DeployConfig, l1Block) if err != nil { return nil, err } @@ -502,8 +439,10 @@ func (cfg SystemConfig) Start(t *testing.T, _opts ...SystemConfigOption) (*Syste L1ChainID: cfg.L1ChainIDBig(), L2ChainID: cfg.L2ChainIDBig(), BatchInboxAddress: cfg.DeployConfig.BatchInboxAddress, - DepositContractAddress: predeploys.DevKromaPortalAddr, - L1SystemConfigAddress: predeploys.DevSystemConfigAddr, + DepositContractAddress: cfg.DeployConfig.KromaPortalProxy, + L1SystemConfigAddress: cfg.DeployConfig.SystemConfigProxy, + RegolithTime: cfg.DeployConfig.RegolithTime(uint64(cfg.DeployConfig.L1GenesisBlockTimestamp)), + SpanBatchTime: cfg.DeployConfig.SpanBatchTime(uint64(cfg.DeployConfig.L1GenesisBlockTimestamp)), } } defaultConfig := makeRollupConfig() @@ -529,20 +468,32 @@ func (cfg SystemConfig) Start(t *testing.T, _opts ...SystemConfigOption) (*Syste for name := range cfg.Nodes { var ethClient EthInstance - node, backend, err := geth.InitL2(name, big.NewInt(int64(cfg.DeployConfig.L2ChainID)), l2Genesis, cfg.JWTFilePath, cfg.GethOptions[name]...) - if err != nil { - return nil, err - } - gethInst := &GethInstance{ - Backend: backend, - Node: node, - } - err = gethInst.Node.Start() - if err != nil { - didErrAfterStart = true - return nil, err + if cfg.ExternalL2Shim == "" { + node, backend, err := geth.InitL2(name, big.NewInt(int64(cfg.DeployConfig.L2ChainID)), l2Genesis, cfg.JWTFilePath, cfg.GethOptions[name]...) + if err != nil { + return nil, err + } + gethInst := &GethInstance{ + Backend: backend, + Node: node, + } + err = gethInst.Node.Start() + if err != nil { + didErrAfterStart = true + return nil, err + } + ethClient = gethInst + } else { + if len(cfg.GethOptions[name]) > 0 { + t.Skip("External L2 nodes do not support configuration through GethOptions") + } + ethClient = (&ExternalRunner{ + Name: name, + BinPath: cfg.ExternalL2Shim, + Genesis: l2Genesis, + JWTPath: cfg.JWTFilePath, + }).Run(t) } - ethClient = gethInst sys.EthInstances[name] = ethClient } @@ -718,14 +669,19 @@ func (cfg SystemConfig) Start(t *testing.T, _opts ...SystemConfigOption) (*Syste } } + // Don't start batch submitter and proposer if there's no sequencer. + if sys.RollupNodes["sequencer"] == nil { + return sys, nil + } + // Run validator node (L2 Output Submitter, Asserter) validatorCliCfg := validator.CLIConfig{ L1EthRpc: sys.EthInstances["l1"].WSEndpoint(), L2EthRpc: sys.EthInstances["sequencer"].HTTPEndpoint(), RollupRpc: sys.RollupNodes["sequencer"].HTTPEndpoint(), - L2OOAddress: predeploys.DevL2OutputOracleAddr.String(), - ColosseumAddress: predeploys.DevColosseumAddr.String(), - ValPoolAddress: predeploys.DevValidatorPoolAddr.String(), + L2OOAddress: config.L1Deployments.L2OutputOracleProxy.Hex(), + ColosseumAddress: config.L1Deployments.ColosseumProxy.Hex(), + ValPoolAddress: config.L1Deployments.ValidatorPoolProxy.Hex(), ChallengerPollInterval: 500 * time.Millisecond, TxMgrConfig: newTxMgrConfig(sys.EthInstances["l1"].WSEndpoint(), cfg.Secrets.TrustedValidator), AllowNonFinalized: cfg.NonFinalizedOutputs, @@ -734,7 +690,7 @@ func (cfg SystemConfig) Start(t *testing.T, _opts ...SystemConfigOption) (*Syste ChallengerEnabled: false, OutputSubmitterEnabled: true, OutputSubmitterAllowPublicRound: true, - SecurityCouncilAddress: predeploys.DevSecurityCouncilAddr.String(), + SecurityCouncilAddress: config.L1Deployments.SecurityCouncilProxy.Hex(), LogConfig: oplog.CLIConfig{ Level: log.LvlInfo, Format: oplog.FormatText, @@ -781,15 +737,15 @@ func (cfg SystemConfig) Start(t *testing.T, _opts ...SystemConfigOption) (*Syste L1EthRpc: sys.EthInstances["l1"].WSEndpoint(), L2EthRpc: sys.EthInstances["sequencer"].HTTPEndpoint(), RollupRpc: sys.RollupNodes["sequencer"].HTTPEndpoint(), - L2OOAddress: predeploys.DevL2OutputOracleAddr.String(), - ColosseumAddress: predeploys.DevColosseumAddr.String(), - ValPoolAddress: predeploys.DevValidatorPoolAddr.String(), + L2OOAddress: config.L1Deployments.L2OutputOracleProxy.Hex(), + ColosseumAddress: config.L1Deployments.ColosseumProxy.Hex(), + ValPoolAddress: config.L1Deployments.ValidatorPoolProxy.Hex(), ChallengerPollInterval: 500 * time.Millisecond, ProverRPC: "http://0.0.0.0:0", TxMgrConfig: newTxMgrConfig(sys.EthInstances["l1"].WSEndpoint(), cfg.Secrets.Challenger1), OutputSubmitterEnabled: false, ChallengerEnabled: true, - SecurityCouncilAddress: predeploys.DevSecurityCouncilAddr.String(), + SecurityCouncilAddress: config.L1Deployments.SecurityCouncilProxy.Hex(), GuardianEnabled: cfg.EnableGuardian, LogConfig: oplog.CLIConfig{ Level: log.LvlInfo, @@ -956,7 +912,7 @@ func (cfg SystemConfig) L2ChainIDBig() *big.Int { } func (cfg SystemConfig) DepositValidatorPool(l1Client *ethclient.Client, priv *ecdsa.PrivateKey, value *big.Int) error { - valpoolContract, err := bindings.NewValidatorPool(predeploys.DevValidatorPoolAddr, l1Client) + valpoolContract, err := bindings.NewValidatorPool(config.L1Deployments.ValidatorPoolProxy, l1Client) if err != nil { return fmt.Errorf("unable to create ValidatorPool instance: %w", err) } diff --git a/op-e2e/system_adminrpc_test.go b/op-e2e/system_adminrpc_test.go new file mode 100644 index 000000000..99a4dbf3c --- /dev/null +++ b/op-e2e/system_adminrpc_test.go @@ -0,0 +1,180 @@ +package op_e2e + +import ( + "context" + "testing" + "time" + + "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/wait" + "github.com/ethereum-optimism/optimism/op-node/node" + "github.com/ethereum-optimism/optimism/op-service/client" + "github.com/ethereum-optimism/optimism/op-service/sources" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/rpc" + "github.com/stretchr/testify/require" +) + +func TestStopStartSequencer(t *testing.T) { + InitParallel(t) + + cfg := DefaultSystemConfig(t) + sys, err := cfg.Start(t) + require.Nil(t, err, "Error starting up system") + defer sys.Close() + + l2Seq := sys.Clients["sequencer"] + rollupNode := sys.RollupNodes["sequencer"] + + nodeRPC, err := rpc.DialContext(context.Background(), rollupNode.HTTPEndpoint()) + require.Nil(t, err, "Error dialing node") + rollupClient := sources.NewRollupClient(client.NewBaseRPCClient(nodeRPC)) + + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + active, err := rollupClient.SequencerActive(ctx) + require.NoError(t, err) + require.True(t, active, "sequencer should be active") + + require.NoError( + t, + wait.ForNextBlock(ctx, l2Seq), + "Chain did not advance after starting sequencer", + ) + + ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + blockHash, err := rollupClient.StopSequencer(ctx) + require.Nil(t, err, "Error stopping sequencer") + + ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + active, err = rollupClient.SequencerActive(ctx) + require.NoError(t, err) + require.False(t, active, "sequencer should be inactive") + + blockBefore := latestBlock(t, l2Seq) + time.Sleep(time.Duration(cfg.DeployConfig.L2BlockTime+1) * time.Second) + blockAfter := latestBlock(t, l2Seq) + require.Equal(t, blockAfter, blockBefore, "Chain advanced after stopping sequencer") + + ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + err = rollupClient.StartSequencer(ctx, blockHash) + require.Nil(t, err, "Error starting sequencer") + + ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + active, err = rollupClient.SequencerActive(ctx) + require.NoError(t, err) + require.True(t, active, "sequencer should be active again") + + require.NoError( + t, + wait.ForNextBlock(ctx, l2Seq), + "Chain did not advance after starting sequencer", + ) +} + +func TestPersistSequencerStateWhenChanged(t *testing.T) { + InitParallel(t) + ctx := context.Background() + dir := t.TempDir() + stateFile := dir + "/state.json" + + cfg := DefaultSystemConfig(t) + // We don't need a verifier - just the sequencer is enough + delete(cfg.Nodes, "verifier") + cfg.Nodes["sequencer"].ConfigPersistence = node.NewConfigPersistence(stateFile) + + sys, err := cfg.Start(t) + require.NoError(t, err) + defer sys.Close() + + assertPersistedSequencerState(t, stateFile, node.StateStarted) + + rollupRPCClient, err := rpc.DialContext(ctx, sys.RollupNodes["sequencer"].HTTPEndpoint()) + require.Nil(t, err) + rollupClient := sources.NewRollupClient(client.NewBaseRPCClient(rollupRPCClient)) + + err = rollupClient.StartSequencer(ctx, common.Hash{0xaa}) + require.ErrorContains(t, err, "sequencer already running") + + head, err := rollupClient.StopSequencer(ctx) + require.NoError(t, err) + require.NotEqual(t, common.Hash{}, head) + assertPersistedSequencerState(t, stateFile, node.StateStopped) +} + +func TestLoadSequencerStateOnStarted_Stopped(t *testing.T) { + InitParallel(t) + ctx := context.Background() + dir := t.TempDir() + stateFile := dir + "/state.json" + + // Prepare the persisted state file with sequencer stopped + configReader := node.NewConfigPersistence(stateFile) + require.NoError(t, configReader.SequencerStopped()) + + cfg := DefaultSystemConfig(t) + // We don't need a verifier - just the sequencer is enough + delete(cfg.Nodes, "verifier") + seqCfg := cfg.Nodes["sequencer"] + seqCfg.ConfigPersistence = node.NewConfigPersistence(stateFile) + + sys, err := cfg.Start(t) + require.NoError(t, err) + defer sys.Close() + + rollupRPCClient, err := rpc.DialContext(ctx, sys.RollupNodes["sequencer"].HTTPEndpoint()) + require.Nil(t, err) + rollupClient := sources.NewRollupClient(client.NewBaseRPCClient(rollupRPCClient)) + + // Still persisted as stopped after startup + assertPersistedSequencerState(t, stateFile, node.StateStopped) + + // Sequencer is really stopped + _, err = rollupClient.StopSequencer(ctx) + require.ErrorContains(t, err, "sequencer not running") + assertPersistedSequencerState(t, stateFile, node.StateStopped) +} + +func TestLoadSequencerStateOnStarted_Started(t *testing.T) { + InitParallel(t) + ctx := context.Background() + dir := t.TempDir() + stateFile := dir + "/state.json" + + // Prepare the persisted state file with sequencer stopped + configReader := node.NewConfigPersistence(stateFile) + require.NoError(t, configReader.SequencerStarted()) + + cfg := DefaultSystemConfig(t) + // We don't need a verifier - just the sequencer is enough + delete(cfg.Nodes, "verifier") + seqCfg := cfg.Nodes["sequencer"] + seqCfg.Driver.SequencerStopped = true + seqCfg.ConfigPersistence = node.NewConfigPersistence(stateFile) + + sys, err := cfg.Start(t) + require.NoError(t, err) + defer sys.Close() + + rollupRPCClient, err := rpc.DialContext(ctx, sys.RollupNodes["sequencer"].HTTPEndpoint()) + require.Nil(t, err) + rollupClient := sources.NewRollupClient(client.NewBaseRPCClient(rollupRPCClient)) + + // Still persisted as stopped after startup + assertPersistedSequencerState(t, stateFile, node.StateStarted) + + // Sequencer is really stopped + err = rollupClient.StartSequencer(ctx, common.Hash{}) + require.ErrorContains(t, err, "sequencer already running") + assertPersistedSequencerState(t, stateFile, node.StateStarted) +} + +func assertPersistedSequencerState(t *testing.T, stateFile string, expected node.RunningState) { + configReader := node.NewConfigPersistence(stateFile) + state, err := configReader.SequencerState() + require.NoError(t, err) + require.Equalf(t, expected, state, "expected sequencer state %v but was %v", expected, state) +} diff --git a/op-e2e/system_test.go b/op-e2e/system_test.go index fa12cbaf1..465ca20f7 100644 --- a/op-e2e/system_test.go +++ b/op-e2e/system_test.go @@ -26,8 +26,7 @@ import ( "github.com/stretchr/testify/require" "golang.org/x/exp/slices" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" - "github.com/ethereum-optimism/optimism/op-bindings/predeploys" + "github.com/ethereum-optimism/optimism/op-e2e/config" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/geth" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/wait" "github.com/ethereum-optimism/optimism/op-e2e/testdata" @@ -42,20 +41,24 @@ import ( "github.com/ethereum-optimism/optimism/op-service/retry" "github.com/ethereum-optimism/optimism/op-service/sources" "github.com/ethereum-optimism/optimism/op-service/testlog" + "github.com/kroma-network/kroma/kroma-bindings/bindings" + "github.com/kroma-network/kroma/kroma-bindings/predeploys" val "github.com/kroma-network/kroma/kroma-validator" chal "github.com/kroma-network/kroma/kroma-validator/challenge" ) func TestMain(m *testing.M) { - fmt.Println("Running tests with external L2 process adapter") - // As these are integration tests which launch many other processes, the - // default parallelism makes the tests flaky. This change aims to - // reduce the flakiness of these tests. - maxProcs := runtime.NumCPU() / 4 - if maxProcs == 0 { - maxProcs = 1 + if config.ExternalL2Shim != "" { + fmt.Println("Running tests with external L2 process adapter at ", config.ExternalL2Shim) + // As these are integration tests which launch many other processes, the + // default parallelism makes the tests flaky. This change aims to + // reduce the flakiness of these tests. + maxProcs := runtime.NumCPU() / 4 + if maxProcs == 0 { + maxProcs = 1 + } + runtime.GOMAXPROCS(maxProcs) } - runtime.GOMAXPROCS(maxProcs) os.Exit(m.Run()) } @@ -76,8 +79,8 @@ func TestL2OutputSubmitter(t *testing.T) { require.Nil(t, err) rollupClient := sources.NewRollupClient(client.NewBaseRPCClient(rollupRPCClient)) - // OutputOracle is already deployed - l2OutputOracle, err := bindings.NewL2OutputOracleCaller(predeploys.DevL2OutputOracleAddr, l1Client) + // OutputOracle is already deployed + l2OutputOracle, err := bindings.NewL2OutputOracleCaller(cfg.L1Deployments.L2OutputOracleProxy, l1Client) require.Nil(t, err) initialOutputBlockNumber, err := l2OutputOracle.LatestBlockNumber(&bind.CallOpts{}) @@ -87,7 +90,7 @@ func TestL2OutputSubmitter(t *testing.T) { // unsafe portion of the chain which gets reorged on startup. The sequencer has an out of date view // when it creates it's first block and uses and old L1 Origin. It then does not submit a batch // for that block and subsequently reorgs to match what the verifier derives when running the - // reconciliation process. + // reconcillation process. l2Verif := sys.Clients["verifier"] _, err = geth.WaitForBlock(big.NewInt(6), l2Verif, 10*time.Duration(cfg.DeployConfig.L2BlockTime)*time.Second) require.Nil(t, err) @@ -133,10 +136,7 @@ func TestValidationReward(t *testing.T) { InitParallel(t) cfg := DefaultSystemConfig(t) - cfg.DeployConfig.FinalizationPeriodSeconds = 32 - cfg.DeployConfig.L2OutputOracleSubmissionInterval = 16 - cfg.DeployConfig.ColosseumSegmentsLengths = "5,5" - cfg.DeployConfig.ValidatorPoolRoundDuration = 16 + cfg.DeployConfig.ValidatorPoolRoundDuration = cfg.DeployConfig.L2OutputOracleSubmissionInterval / 2 sys, err := cfg.Start(t) require.NoError(t, err, "Error starting up system") @@ -161,7 +161,7 @@ func TestValidationReward(t *testing.T) { require.NoError(t, err) defer rewardedSub.Unsubscribe() - timeout := time.Minute * 2 + timeout := time.Duration(cfg.DeployConfig.FinalizationPeriodSeconds+30) * time.Second ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() for { @@ -1124,7 +1124,9 @@ func TestFees(t *testing.T) { cfg := DefaultSystemConfig(t) // This test only works with these config values modified - //cfg.DeployConfig.L2GenesisRegolithTimeOffset = nil + // [Kroma: START] + // cfg.DeployConfig.L2GenesisRegolithTimeOffset = nil + // [Kroma: END] cfg.DeployConfig.L1GenesisBlockBaseFeePerGas = (*hexutil.Big)(big.NewInt(7)) sys, err := cfg.Start(t) @@ -1135,25 +1137,30 @@ func TestFees(t *testing.T) { l2Verif := sys.Clients["verifier"] l1 := sys.Clients["l1"] - //TODO read + // TODO read config := ¶ms.ChainConfig{ Kroma: ¶ms.KromaConfig{ EIP1559Elasticity: cfg.DeployConfig.EIP1559Elasticity, EIP1559Denominator: cfg.DeployConfig.EIP1559Denominator, }, - //BedrockBlock: big.NewInt(0), + // BedrockBlock: big.NewInt(0), } + sga := &stateGetterAdapter{ ctx: context.Background(), t: t, client: l2Seq, } + l1CostFn := types.NewL1CostFunc(config, sga) // Transactor Account ethPrivKey := cfg.Secrets.Alice fromAddr := crypto.PubkeyToAddress(ethPrivKey.PublicKey) + // require.NotEqual(t, cfg.DeployConfig.L2OutputOracleProposer, fromAddr) + require.NotEqual(t, cfg.DeployConfig.BatchSenderAddress, fromAddr) + // Find gaspriceoracle contract gpoContract, err := bindings.NewGasPriceOracle(predeploys.GasPriceOracleAddr, l2Seq) require.Nil(t, err) @@ -1374,15 +1381,15 @@ func TestChallenge(t *testing.T) { require.NoError(t, err, "Error challenger deposit to ValidatorPool") // OutputOracle is already deployed - l2OutputOracle, err := bindings.NewL2OutputOracleCaller(predeploys.DevL2OutputOracleAddr, l1Client) + l2OutputOracle, err := bindings.NewL2OutputOracleCaller(cfg.L1Deployments.L2OutputOracleProxy, l1Client) require.NoError(t, err) // Colosseum is already deployed - colosseum, err := bindings.NewColosseumCaller(predeploys.DevColosseumAddr, l1Client) + colosseum, err := bindings.NewColosseumCaller(cfg.L1Deployments.ColosseumProxy, l1Client) require.NoError(t, err) // SecurityCouncil is already deployed - securityCouncil, err := bindings.NewSecurityCouncilCaller(predeploys.DevSecurityCouncilAddr, l1Client) + securityCouncil, err := bindings.NewSecurityCouncilCaller(cfg.L1Deployments.SecurityCouncilProxy, l1Client) require.NoError(t, err) targetOutputOracleIndex := uint64(math.Ceil(float64(testdata.TargetBlockNumber) / float64(cfg.DeployConfig.L2OutputOracleSubmissionInterval))) @@ -1571,12 +1578,14 @@ func TestRuntimeConfigReload(t *testing.T) { l1 := sys.Clients["l1"] // Change the system-config via L1 - sysCfgContract, err := bindings.NewSystemConfig(cfg.DeployConfig.SystemConfigProxy, l1) + sysCfgContract, err := bindings.NewSystemConfig(cfg.L1Deployments.SystemConfigProxy, l1) require.NoError(t, err) newUnsafeBlocksSigner := common.Address{0x12, 0x23, 0x45} require.NotEqual(t, initialRuntimeConfig.P2PSequencerAddress(), newUnsafeBlocksSigner, "changing to a different address") - opts, err := bind.NewKeyedTransactorWithChainID(cfg.Secrets.ProxyAdminOwner, cfg.L1ChainIDBig()) + opts, err := bind.NewKeyedTransactorWithChainID(cfg.Secrets.CliqueSigner, cfg.L1ChainIDBig()) require.Nil(t, err) + owner, _ := sysCfgContract.Owner(nil) + fmt.Printf("system config owner address: %s\n", owner) // the unsafe signer address is part of the runtime config tx, err := sysCfgContract.SetUnsafeBlockSigner(opts, newUnsafeBlocksSigner) require.NoError(t, err) @@ -1595,3 +1604,118 @@ func TestRuntimeConfigReload(t *testing.T) { }) require.NoError(t, err) } + +// func TestRecommendedProtocolVersionChange(t *testing.T) { +// InitParallel(t) +// +// cfg := DefaultSystemConfig(t) +// require.NotEqual(t, common.Address{}, cfg.L1Deployments.ProtocolVersions, "need ProtocolVersions contract deployment") +// // to speed up the test, make it reload the config more often, and do not impose a long conf depth +// cfg.Nodes["verifier"].RuntimeConfigReloadInterval = time.Second * 5 +// cfg.Nodes["verifier"].Driver.VerifierConfDepth = 1 +// +// sys, err := cfg.Start(t) +// require.Nil(t, err, "Error starting up system") +// defer sys.Close() +// runtimeConfig := sys.RollupNodes["verifier"].RuntimeConfig() +// +// // Change the superchain-config via L1 +// l1 := sys.Clients["l1"] +// +// _, build, major, minor, patch, preRelease := params.OPStackSupport.Parse() +// newRecommendedProtocolVersion := params.ProtocolVersionV0{Build: build, Major: major + 1, Minor: minor, Patch: patch, PreRelease: preRelease}.Encode() +// require.NotEqual(t, runtimeConfig.RecommendedProtocolVersion(), newRecommendedProtocolVersion, "changing to a different protocol version") +// +// protVersions, err := bindings.NewProtocolVersions(cfg.L1Deployments.ProtocolVersionsProxy, l1) +// require.NoError(t, err) +// +// // ProtocolVersions contract is owned by same key as SystemConfig in devnet +// opts, err := bind.NewKeyedTransactorWithChainID(cfg.Secrets.SysCfgOwner, cfg.L1ChainIDBig()) +// require.NoError(t, err) +// +// // Change recommended protocol version +// tx, err := protVersions.SetRecommended(opts, new(big.Int).SetBytes(newRecommendedProtocolVersion[:])) +// require.NoError(t, err) +// +// // wait for the change to confirm +// _, err = wait.ForReceiptOK(context.Background(), l1, tx.Hash()) +// require.NoError(t, err) +// +// // wait for the recommended protocol version to change +// _, err = retry.Do(context.Background(), 10, retry.Fixed(time.Second*10), func() (struct{}, error) { +// v := sys.RollupNodes["verifier"].RuntimeConfig().RecommendedProtocolVersion() +// if v == newRecommendedProtocolVersion { +// return struct{}{}, nil +// } +// return struct{}{}, fmt.Errorf("no change yet, seeing %s but looking for %s", v, newRecommendedProtocolVersion) +// }) +// require.NoError(t, err) +// } +// +// func TestRequiredProtocolVersionChangeAndHalt(t *testing.T) { +// InitParallel(t) +// +// cfg := DefaultSystemConfig(t) +// // to speed up the test, make it reload the config more often, and do not impose a long conf depth +// cfg.Nodes["verifier"].RuntimeConfigReloadInterval = time.Second * 5 +// cfg.Nodes["verifier"].Driver.VerifierConfDepth = 1 +// // configure halt in verifier op-node +// cfg.Nodes["verifier"].RollupHalt = "major" +// // configure halt in verifier op-geth node +// cfg.GethOptions["verifier"] = append(cfg.GethOptions["verifier"], []geth.GethOption{ +// func(ethCfg *ethconfig.Config, nodeCfg *node.Config) error { +// ethCfg.RollupHaltOnIncompatibleProtocolVersion = "major" +// return nil +// }, +// }...) +// +// sys, err := cfg.Start(t) +// require.Nil(t, err, "Error starting up system") +// defer sys.Close() +// runtimeConfig := sys.RollupNodes["verifier"].RuntimeConfig() +// +// // Change the superchain-config via L1 +// l1 := sys.Clients["l1"] +// +// _, build, major, minor, patch, preRelease := params.OPStackSupport.Parse() +// newRequiredProtocolVersion := params.ProtocolVersionV0{Build: build, Major: major + 1, Minor: minor, Patch: patch, PreRelease: preRelease}.Encode() +// require.NotEqual(t, runtimeConfig.RequiredProtocolVersion(), newRequiredProtocolVersion, "changing to a different protocol version") +// +// protVersions, err := bindings.NewProtocolVersions(cfg.L1Deployments.ProtocolVersionsProxy, l1) +// require.NoError(t, err) +// +// // ProtocolVersions contract is owned by same key as SystemConfig in devnet +// opts, err := bind.NewKeyedTransactorWithChainID(cfg.Secrets.SysCfgOwner, cfg.L1ChainIDBig()) +// require.NoError(t, err) +// +// // Change required protocol version +// tx, err := protVersions.SetRequired(opts, new(big.Int).SetBytes(newRequiredProtocolVersion[:])) +// require.NoError(t, err) +// +// // wait for the change to confirm +// _, err = wait.ForReceiptOK(context.Background(), l1, tx.Hash()) +// require.NoError(t, err) +// +// // wait for the required protocol version to take effect by halting the verifier that opted in, and halting the op-geth node that opted in. +// _, err = retry.Do(context.Background(), 10, retry.Fixed(time.Second*10), func() (struct{}, error) { +// if !sys.RollupNodes["verifier"].Stopped() { +// return struct{}{}, errors.New("verifier rollup node is not closed yet") +// } +// return struct{}{}, nil +// }) +// require.NoError(t, err) +// t.Log("verified that op-node closed!") +// // Checking if the engine is down is not trivial in op-e2e. +// // In op-geth we have halting tests covering the Engine API, in op-e2e we instead check if the API stops. +// _, err = retry.Do(context.Background(), 10, retry.Fixed(time.Second*10), func() (struct{}, error) { +// ctx, cancel := context.WithTimeout(context.Background(), time.Second*10) +// _, err := sys.Clients["verifier"].ChainID(ctx) +// cancel() +// if err != nil && !errors.Is(err, ctx.Err()) { // waiting for client to stop responding to chainID requests +// return struct{}{}, nil +// } +// return struct{}{}, errors.New("verifier rollup node is not closed yet") +// }) +// require.NoError(t, err) +// t.Log("verified that op-geth closed!") +// } diff --git a/op-e2e/system_tob_test.go b/op-e2e/system_tob_test.go index f706a6e58..d111bff41 100644 --- a/op-e2e/system_tob_test.go +++ b/op-e2e/system_tob_test.go @@ -23,14 +23,14 @@ import ( fuzz "github.com/google/gofuzz" "github.com/stretchr/testify/require" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" - "github.com/ethereum-optimism/optimism/op-bindings/predeploys" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/geth" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/wait" "github.com/ethereum-optimism/optimism/op-node/withdrawals" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/testutils/fuzzerutils" + "github.com/kroma-network/kroma/kroma-bindings/bindings" + "github.com/kroma-network/kroma/kroma-bindings/predeploys" ) // TestGasPriceOracleFeeUpdates checks that the gas price oracle cannot be locked by mis-configuring parameters. @@ -52,10 +52,10 @@ func TestGasPriceOracleFeeUpdates(t *testing.T) { l1Client := sys.Clients["l1"] l2Seq := sys.Clients["sequencer"] // l2Verif := sys.Clients["verifier"] - ethPrivKey := cfg.Secrets.ProxyAdminOwner + ethPrivKey := cfg.Secrets.SysCfgOwner // Bind to the SystemConfig & GasPriceOracle contracts - sysconfig, err := bindings.NewSystemConfig(predeploys.DevSystemConfigAddr, l1Client) + sysconfig, err := bindings.NewSystemConfig(cfg.L1Deployments.SystemConfigProxy, l1Client) require.Nil(t, err) gpoContract, err := bindings.NewGasPriceOracleCaller(predeploys.GasPriceOracleAddr, l2Seq) require.Nil(t, err) @@ -400,7 +400,8 @@ func TestMixedWithdrawalValidity(t *testing.T) { // Create our system configuration, funding all accounts we created for L1/L2, and start it cfg := DefaultSystemConfig(t) cfg.DeployConfig.L2BlockTime = 2 - cfg.DeployConfig.FinalizationPeriodSeconds = 6 + cfg.DeployConfig.ValidatorPoolRoundDuration = cfg.DeployConfig.L2OutputOracleSubmissionInterval + require.LessOrEqual(t, cfg.DeployConfig.FinalizationPeriodSeconds, uint64(600)) require.Equal(t, cfg.DeployConfig.FundDevAccounts, true) sys, err := cfg.Start(t) require.NoError(t, err, "error starting up system") @@ -412,19 +413,37 @@ func TestMixedWithdrawalValidity(t *testing.T) { l2Verif := sys.Clients["verifier"] require.NoError(t, err) + systemConfig, err := bindings.NewSystemConfigCaller(cfg.L1Deployments.SystemConfigProxy, l1Client) + require.NoError(t, err) + unsafeBlockSigner, err := systemConfig.UnsafeBlockSigner(nil) + require.NoError(t, err) + require.Equal(t, cfg.DeployConfig.P2PSequencerAddress, unsafeBlockSigner) + // The batcher has balance on L1 batcherBalance, err := l1Client.BalanceAt(context.Background(), cfg.DeployConfig.BatchSenderAddress, nil) require.NoError(t, err) require.NotEqual(t, batcherBalance, big.NewInt(0)) + // The proposer has balance on L1 + proposerBalance, err := l1Client.BalanceAt(context.Background(), cfg.DeployConfig.ValidatorPoolTrustedValidator, nil) + require.NoError(t, err) + require.NotEqual(t, proposerBalance, big.NewInt(0)) + // Define our L1 transaction timeout duration. txTimeoutDuration := 10 * time.Duration(cfg.DeployConfig.L1BlockTime) * time.Second // Bind to the deposit contract - depositContract, err := bindings.NewKromaPortal(predeploys.DevKromaPortalAddr, l1Client) + depositContract, err := bindings.NewKromaPortal(cfg.L1Deployments.KromaPortalProxy, l1Client) _ = depositContract require.NoError(t, err) + l2OutputOracle, err := bindings.NewL2OutputOracleCaller(cfg.L1Deployments.L2OutputOracleProxy, l1Client) + require.NoError(t, err) + + finalizationPeriod, err := l2OutputOracle.FINALIZATIONPERIODSECONDS(nil) + require.NoError(t, err) + require.Equal(t, cfg.DeployConfig.FinalizationPeriodSeconds, finalizationPeriod.Uint64()) + // Create a struct used to track our transactors and their transactions sent. type TestAccountState struct { Account *TestAccount @@ -518,7 +537,8 @@ func TestMixedWithdrawalValidity(t *testing.T) { // Wait for the finalization period, then we can finalize this withdrawal. ctx, cancel = context.WithTimeout(context.Background(), 40*time.Duration(cfg.DeployConfig.L1BlockTime)*time.Second) - blockNumber, err := wait.ForOutputRootPublished(ctx, l1Client, predeploys.DevL2OutputOracleAddr, receipt.BlockNumber) + require.NotEqual(t, cfg.L1Deployments.L2OutputOracleProxy, common.Address{}) + blockNumber, err := wait.ForOutputRootPublished(ctx, l1Client, cfg.L1Deployments.L2OutputOracleProxy, receipt.BlockNumber) cancel() require.Nil(t, err) @@ -532,13 +552,6 @@ func TestMixedWithdrawalValidity(t *testing.T) { cancel() require.Nil(t, err) - l2OutputOracle, err := bindings.NewL2OutputOracleCaller(predeploys.DevL2OutputOracleAddr, l1Client) - require.Nil(t, err) - - finalizationPeriod, err := l2OutputOracle.FINALIZATIONPERIODSECONDS(nil) - require.NoError(t, err) - require.Equal(t, cfg.DeployConfig.FinalizationPeriodSeconds, finalizationPeriod.Uint64()) - rpcClient, err := rpc.Dial(sys.EthInstances["verifier"].WSEndpoint()) require.Nil(t, err) proofCl := gethclient.New(rpcClient) @@ -657,9 +670,11 @@ func TestMixedWithdrawalValidity(t *testing.T) { require.Equal(t, types.ReceiptStatusSuccessful, proveReceipt.Status) // Wait for finalization and then create the Finalized Withdrawal Transaction - ctx, cancel = context.WithTimeout(context.Background(), 45*time.Duration(cfg.DeployConfig.L1BlockTime)*time.Second) + // [Kroma: START] + ctx, cancel = context.WithTimeout(context.Background(), 5*time.Minute) + // [Kroma: END] defer cancel() - err = wait.ForFinalizationPeriod(ctx, l1Client, header.Number, predeploys.DevL2OutputOracleAddr) ////// + err = wait.ForFinalizationPeriod(ctx, l1Client, header.Number, cfg.L1Deployments.L2OutputOracleProxy) require.Nil(t, err) // Finalize withdrawal diff --git a/op-e2e/testdata/challenge_test_data.go b/op-e2e/testdata/challenge_test_data.go index cd05a88c9..c9a50f12d 100644 --- a/op-e2e/testdata/challenge_test_data.go +++ b/op-e2e/testdata/challenge_test_data.go @@ -8,9 +8,9 @@ import ( "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-service/eth" + "github.com/kroma-network/kroma/kroma-bindings/bindings" ) var ( diff --git a/op-e2e/tx_helper.go b/op-e2e/tx_helper.go index 6cce1e1fb..98ac03cd9 100644 --- a/op-e2e/tx_helper.go +++ b/op-e2e/tx_helper.go @@ -13,11 +13,10 @@ import ( "github.com/ethereum/go-ethereum/ethclient" "github.com/stretchr/testify/require" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" - "github.com/ethereum-optimism/optimism/op-bindings/predeploys" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/geth" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/transactions" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" + "github.com/kroma-network/kroma/kroma-bindings/bindings" ) // SendDepositTx creates and sends a deposit transaction. @@ -30,7 +29,7 @@ func SendDepositTx(t *testing.T, cfg SystemConfig, l1Client *ethclient.Client, l applyL2Opts(l2Opts) // Find deposit contract - depositContract, err := bindings.NewKromaPortal(predeploys.DevKromaPortalAddr, l1Client) + depositContract, err := bindings.NewKromaPortal(cfg.L1Deployments.KromaPortalProxy, l1Client) require.Nil(t, err) // Finally send TX diff --git a/op-e2e/withdrawal_helper.go b/op-e2e/withdrawal_helper.go index 967368db4..808209e87 100644 --- a/op-e2e/withdrawal_helper.go +++ b/op-e2e/withdrawal_helper.go @@ -15,11 +15,12 @@ import ( "github.com/ethereum/go-ethereum/rpc" "github.com/stretchr/testify/require" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" - "github.com/ethereum-optimism/optimism/op-bindings/predeploys" + "github.com/ethereum-optimism/optimism/op-e2e/config" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/geth" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/wait" "github.com/ethereum-optimism/optimism/op-node/withdrawals" + "github.com/kroma-network/kroma/kroma-bindings/bindings" + "github.com/kroma-network/kroma/kroma-bindings/predeploys" ) func SendWithdrawal(t *testing.T, cfg SystemConfig, l2Client *ethclient.Client, privKey *ecdsa.PrivateKey, applyOpts WithdrawalTxOptsFn) (*types.Transaction, *types.Receipt) { @@ -90,7 +91,7 @@ func ProveWithdrawal(t *testing.T, version [32]byte, cfg SystemConfig, l1Client ctx, cancel := context.WithTimeout(context.Background(), 40*time.Duration(cfg.DeployConfig.L1BlockTime)*time.Second) defer cancel() - blockNumber, err := wait.ForOutputRootPublished(ctx, l1Client, predeploys.DevL2OutputOracleAddr, l2WithdrawalReceipt.BlockNumber) + blockNumber, err := wait.ForOutputRootPublished(ctx, l1Client, config.L1Deployments.L2OutputOracleProxy, l2WithdrawalReceipt.BlockNumber) require.Nil(t, err) rpcClient, err := rpc.Dial(l2Node.WSEndpoint()) @@ -109,13 +110,13 @@ func ProveWithdrawal(t *testing.T, version [32]byte, cfg SystemConfig, l1Client require.Nil(t, err) // Now create withdrawal - oracle, err := bindings.NewL2OutputOracleCaller(predeploys.DevL2OutputOracleAddr, l1Client) + oracle, err := bindings.NewL2OutputOracleCaller(config.L1Deployments.L2OutputOracleProxy, l1Client) require.Nil(t, err) params, err := withdrawals.ProveWithdrawalParameters(context.Background(), version, proofCl, receiptCl, l2WithdrawalReceipt.TxHash, header, nextHeader, oracle) require.Nil(t, err) - portal, err := bindings.NewKromaPortal(predeploys.DevKromaPortalAddr, l1Client) + portal, err := bindings.NewKromaPortal(cfg.L1Deployments.KromaPortalProxy, l1Client) require.Nil(t, err) opts, err := bind.NewKeyedTransactorWithChainID(ethPrivKey, cfg.L1ChainIDBig()) @@ -147,15 +148,17 @@ func ProveWithdrawal(t *testing.T, version [32]byte, cfg SystemConfig, l1Client func FinalizeWithdrawal(t *testing.T, cfg SystemConfig, l1Client *ethclient.Client, privKey *ecdsa.PrivateKey, withdrawalProofReceipt *types.Receipt, params withdrawals.ProvenWithdrawalParameters) *types.Receipt { // Wait for finalization and then create the Finalized Withdrawal Transaction - ctx, cancel := context.WithTimeout(context.Background(), 30*time.Duration(cfg.DeployConfig.L1BlockTime)*time.Second) + // [Kroma: START] + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute) + // [Kroma: END] defer cancel() - err := wait.ForFinalizationPeriod(ctx, l1Client, withdrawalProofReceipt.BlockNumber, predeploys.DevL2OutputOracleAddr) + err := wait.ForFinalizationPeriod(ctx, l1Client, withdrawalProofReceipt.BlockNumber, config.L1Deployments.L2OutputOracleProxy) require.Nil(t, err) opts, err := bind.NewKeyedTransactorWithChainID(privKey, cfg.L1ChainIDBig()) require.Nil(t, err) - portal, err := bindings.NewKromaPortal(predeploys.DevKromaPortalAddr, l1Client) + portal, err := bindings.NewKromaPortal(config.L1Deployments.KromaPortalProxy, l1Client) require.Nil(t, err) // Finalize withdrawal tx, err := portal.FinalizeWithdrawalTransaction( diff --git a/op-node/cmd/genesis/cmd.go b/op-node/cmd/genesis/cmd.go index ba9da3948..4dc4ea184 100644 --- a/op-node/cmd/genesis/cmd.go +++ b/op-node/cmd/genesis/cmd.go @@ -11,35 +11,37 @@ import ( "github.com/urfave/cli/v2" + "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rpc" "github.com/ethereum-optimism/optimism/op-bindings/hardhat" - "github.com/ethereum-optimism/optimism/op-chain-ops/genesis" + "github.com/kroma-network/kroma/kroma-chain-ops/genesis" ) var Subcommands = cli.Commands{ { - Name: "devnet", - Usage: "Initialize new L1 and L2 genesis files and rollup config suitable for a local devnet", + Name: "l1", + Usage: "Generates a L1 genesis state file", Flags: []cli.Flag{ &cli.StringFlag{ - Name: "deploy-config", - Usage: "Path to hardhat deploy config file", + Name: "deploy-config", + Usage: "Path to hardhat deploy config file", + Required: true, }, &cli.StringFlag{ - Name: "outfile.l1", - Usage: "Path to L1 genesis output file", + Name: "l1-allocs", + Usage: "Path to L1 genesis state dump", }, &cli.StringFlag{ - Name: "outfile.l2", - Usage: "Path to L2 genesis output file", + Name: "l1-deployments", + Usage: "Path to L1 deployments file", }, &cli.StringFlag{ - Name: "outfile.rollup", - Usage: "Path to rollup output file", + Name: "outfile.l1", + Usage: "Path to L1 genesis output file", }, }, Action: func(ctx *cli.Context) error { @@ -49,39 +51,41 @@ var Subcommands = cli.Commands{ return err } - // Add the developer L1 addresses to the config - if err := config.InitDeveloperDeployedAddresses(); err != nil { - return err + var deployments *genesis.L1Deployments + if l1Deployments := ctx.String("l1-deployments"); l1Deployments != "" { + deployments, err = genesis.NewL1Deployments(l1Deployments) + if err != nil { + return err + } + } + + if deployments != nil { + config.SetDeployments(deployments) } if err := config.Check(); err != nil { - return err + return fmt.Errorf("deploy config at %s invalid: %w", deployConfig, err) } - l1Genesis, err := genesis.BuildL1DeveloperGenesis(config) - if err != nil { - return err + // Check the addresses after setting the deployments + if err := config.CheckAddresses(); err != nil { + return fmt.Errorf("deploy config at %s invalid: %w", deployConfig, err) } - l1StartBlock := l1Genesis.ToBlock() - l2Genesis, err := genesis.BuildL2Genesis(config, l1StartBlock, true) - if err != nil { - return err + var dump *state.Dump + if l1Allocs := ctx.String("l1-allocs"); l1Allocs != "" { + dump, err = genesis.NewStateDump(l1Allocs) + if err != nil { + return err + } } - l2GenesisBlock := l2Genesis.ToBlock() - rollupConfig, err := config.RollupConfig(l1StartBlock, l2GenesisBlock.Hash(), l2GenesisBlock.Number().Uint64()) + l1Genesis, err := genesis.BuildL1DeveloperGenesis(config, dump, deployments, true) if err != nil { return err } - if err := writeGenesisFile(ctx.String("outfile.l1"), l1Genesis); err != nil { - return err - } - if err := writeGenesisFile(ctx.String("outfile.l2"), l2Genesis); err != nil { - return err - } - return writeGenesisFile(ctx.String("outfile.rollup"), rollupConfig) + return writeGenesisFile(ctx.String("outfile.l1"), l1Genesis) }, }, { @@ -162,7 +166,7 @@ var Subcommands = cli.Commands{ log.Info("Using L1 Start Block", "number", l1StartBlock.Number(), "hash", l1StartBlock.Hash().Hex()) // Build the L2 genesis block - l2Genesis, err := genesis.BuildL2Genesis(config, l1StartBlock, true) + l2Genesis, err := genesis.BuildL2Genesis(config, l1StartBlock) if err != nil { return fmt.Errorf("error creating l2 genesis: %w", err) } diff --git a/op-node/cmd/main.go b/op-node/cmd/main.go index 0cc36392a..27f0c3481 100644 --- a/op-node/cmd/main.go +++ b/op-node/cmd/main.go @@ -5,9 +5,10 @@ import ( "fmt" "os" - "github.com/ethereum/go-ethereum/log" "github.com/urfave/cli/v2" + "github.com/ethereum/go-ethereum/log" + opnode "github.com/ethereum-optimism/optimism/op-node" "github.com/ethereum-optimism/optimism/op-node/chaincfg" "github.com/ethereum-optimism/optimism/op-node/cmd/doc" diff --git a/op-node/flags/flags.go b/op-node/flags/flags.go index fcffaa576..b7efe3524 100644 --- a/op-node/flags/flags.go +++ b/op-node/flags/flags.go @@ -237,28 +237,28 @@ var ( Value: false, } // [Kroma: START] - //BetaExtraNetworks = &cli.BoolFlag{ + // BetaExtraNetworks = &cli.BoolFlag{ // Name: "beta.extra-networks", // Usage: fmt.Sprintf("Beta feature: enable selection of a predefined-network from the superchain-registry. "+ // "The superchain-registry is experimental, and the availability of configurations may change."+ // "Available networks: %s", strings.Join(chaincfg.BetaAvailableNetworks(), ", ")), // EnvVars: prefixEnvVars("BETA_EXTRA_NETWORKS"), - //} - //RollupHalt = &cli.StringFlag{ + // } + // RollupHalt = &cli.StringFlag{ // Name: "rollup.halt", // Usage: "Opt-in option to halt on incompatible protocol version requirements of the given level (major/minor/patch/none), as signaled onchain in L1", // EnvVars: prefixEnvVars("ROLLUP_HALT"), - //} - //RollupLoadProtocolVersions = &cli.BoolFlag{ + // } + // RollupLoadProtocolVersions = &cli.BoolFlag{ // Name: "rollup.load-protocol-versions", // Usage: "Load protocol versions from the superchain L1 ProtocolVersions contract (if available), and report in logs and metrics", // EnvVars: prefixEnvVars("ROLLUP_LOAD_PROTOCOL_VERSIONS"), - //} - //CanyonOverrideFlag = &cli.Uint64Flag{ + // } + // CanyonOverrideFlag = &cli.Uint64Flag{ // Name: "override.canyon", // Usage: "Manually specify the Canyon fork timestamp, overriding the bundled setting", // Hidden: true, - //} + // } // [Kroma: END] ) diff --git a/op-node/node/api.go b/op-node/node/api.go index 6efa8aa2d..cd11faf1f 100644 --- a/op-node/node/api.go +++ b/op-node/node/api.go @@ -10,13 +10,13 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" - "github.com/ethereum-optimism/optimism/op-bindings/predeploys" "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/version" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/metrics" "github.com/ethereum-optimism/optimism/op-service/rpc" + "github.com/kroma-network/kroma/kroma-bindings/bindings" + "github.com/kroma-network/kroma/kroma-bindings/predeploys" ) type l2EthClient interface { @@ -129,7 +129,7 @@ func (n *nodeAPI) Version(ctx context.Context) (string, error) { } func (n *nodeAPI) OutputWithProofAtBlock(ctx context.Context, number hexutil.Uint64) (*eth.OutputResponse, error) { - recordDur := n.m.RecordRPCServerRequest("optimism_outputWithProofAtBlock") + recordDur := n.m.RecordRPCServerRequest("kroma_outputWithProofAtBlock") defer recordDur() output, err := n.fetchOutputAtBlock(ctx, number) diff --git a/op-node/node/server.go b/op-node/node/server.go index 55a8cda77..8ef8360df 100644 --- a/op-node/node/server.go +++ b/op-node/node/server.go @@ -7,11 +7,12 @@ import ( "net/http" "strconv" - ophttp "github.com/ethereum-optimism/optimism/op-service/httputil" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/rpc" + ophttp "github.com/ethereum-optimism/optimism/op-service/httputil" + "github.com/ethereum-optimism/optimism/op-node/metrics" "github.com/ethereum-optimism/optimism/op-node/p2p" "github.com/ethereum-optimism/optimism/op-node/rollup" diff --git a/op-node/node/server_test.go b/op-node/node/server_test.go index a857a9626..667a4728a 100644 --- a/op-node/node/server_test.go +++ b/op-node/node/server_test.go @@ -14,7 +14,6 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" - "github.com/ethereum-optimism/optimism/op-bindings/predeploys" "github.com/ethereum-optimism/optimism/op-node/metrics" "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/version" @@ -22,6 +21,7 @@ import ( "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/testlog" "github.com/ethereum-optimism/optimism/op-service/testutils" + "github.com/kroma-network/kroma/kroma-bindings/predeploys" ) func TestOutputAtBlock(t *testing.T) { @@ -140,7 +140,7 @@ func TestOutputAtBlock(t *testing.T) { require.NoError(t, err) var out *eth.OutputResponse - err = client.CallContext(context.Background(), &out, "kroma_outputAtBlock", "0xdcdc89") + err = client.CallContext(context.Background(), &out, "optimism_outputAtBlock", "0xdcdc89") require.NoError(t, err) require.Equal(t, "0x0000000000000000000000000000000000000000000000000000000000000000", out.Version.String()) @@ -175,10 +175,6 @@ func TestVersion(t *testing.T) { err = client.CallContext(context.Background(), &out, "optimism_version") assert.NoError(t, err) assert.Equal(t, version.Version+"-"+version.Meta, out) - - err = client.CallContext(context.Background(), &out, "kroma_version") - assert.NoError(t, err) - assert.Equal(t, version.Version+"-"+version.Meta, out) } func randomSyncStatus(rng *rand.Rand) *eth.SyncStatus { @@ -220,7 +216,7 @@ func TestSyncStatus(t *testing.T) { assert.NoError(t, err) var out *eth.SyncStatus - err = client.CallContext(context.Background(), &out, "kroma_syncStatus") + err = client.CallContext(context.Background(), &out, "optimism_syncStatus") assert.NoError(t, err) assert.Equal(t, status, out) } diff --git a/op-node/p2p/gossip.go b/op-node/p2p/gossip.go index b96e90e4e..96b723dd8 100644 --- a/op-node/p2p/gossip.go +++ b/op-node/p2p/gossip.go @@ -10,9 +10,6 @@ import ( "sync" "time" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/log" "github.com/golang/snappy" lru "github.com/hashicorp/golang-lru/v2" pubsub "github.com/libp2p/go-libp2p-pubsub" @@ -20,6 +17,10 @@ import ( "github.com/libp2p/go-libp2p/core/host" "github.com/libp2p/go-libp2p/core/peer" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-service/eth" ) @@ -47,8 +48,10 @@ const ( // Message domains, the msg id function uncompresses to keep data monomorphic, // but invalid compressed data will need a unique different id. -var MessageDomainInvalidSnappy = [4]byte{0, 0, 0, 0} -var MessageDomainValidSnappy = [4]byte{1, 0, 0, 0} +var ( + MessageDomainInvalidSnappy = [4]byte{0, 0, 0, 0} + MessageDomainValidSnappy = [4]byte{1, 0, 0, 0} +) type GossipSetupConfigurables interface { PeerScoringParams() *ScoringParams @@ -239,7 +242,6 @@ func (sb *seenBlocks) markSeen(h common.Hash) { } func BuildBlocksValidator(log log.Logger, cfg *rollup.Config, runCfg GossipRuntimeConfig) pubsub.ValidatorEx { - // Seen block hashes per block height // uint64 -> *seenBlocks blockHeightLRU, err := lru.New[uint64, *seenBlocks](1000) @@ -479,8 +481,10 @@ func JoinGossip(self peer.ID, ps *pubsub.PubSub, log log.Logger, cfg *rollup.Con }, nil } -type TopicSubscriber func(ctx context.Context, sub *pubsub.Subscription) -type MessageHandler func(ctx context.Context, from peer.ID, msg any) error +type ( + TopicSubscriber func(ctx context.Context, sub *pubsub.Subscription) + MessageHandler func(ctx context.Context, from peer.ID, msg any) error +) func BlocksHandler(onBlock func(ctx context.Context, from peer.ID, msg *eth.ExecutionPayload) error) MessageHandler { return func(ctx context.Context, from peer.ID, msg any) error { diff --git a/op-node/rollup/derive/attributes.go b/op-node/rollup/derive/attributes.go index 15b21b71e..ddec4e43e 100644 --- a/op-node/rollup/derive/attributes.go +++ b/op-node/rollup/derive/attributes.go @@ -99,7 +99,7 @@ func (ba *FetchingAttributesBuilder) PreparePayloadAttributes(ctx context.Contex l2Parent, nextL2Time, eth.ToBlockID(l1Info), l1Info.Time())) } - l1InfoTx, err := L1InfoDepositBytes(seqNumber, l1Info, sysConfig) + l1InfoTx, err := L1InfoDepositBytes(seqNumber, l1Info, sysConfig, ba.cfg.IsRegolith(nextL2Time)) if err != nil { return nil, NewCriticalError(fmt.Errorf("failed to create l1InfoTx: %w", err)) } diff --git a/op-node/rollup/derive/attributes_queue_test.go b/op-node/rollup/derive/attributes_queue_test.go index f887121ab..d781e534f 100644 --- a/op-node/rollup/derive/attributes_queue_test.go +++ b/op-node/rollup/derive/attributes_queue_test.go @@ -67,7 +67,7 @@ func TestAttributesQueue(t *testing.T) { l2Fetcher := &testutils.MockL2Client{} l2Fetcher.ExpectSystemConfigByL2Hash(safeHead.Hash, parentL1Cfg, nil) - l1InfoTx, err := L1InfoDepositBytes(safeHead.SequenceNumber+1, l1Info, expectedL1Cfg) + l1InfoTx, err := L1InfoDepositBytes(safeHead.SequenceNumber+1, l1Info, expectedL1Cfg, false) require.NoError(t, err) attrs := eth.PayloadAttributes{ Timestamp: eth.Uint64Quantity(safeHead.Time + cfg.BlockTime), diff --git a/op-node/rollup/derive/attributes_test.go b/op-node/rollup/derive/attributes_test.go index ee5a9ff45..db67c0fc1 100644 --- a/op-node/rollup/derive/attributes_test.go +++ b/op-node/rollup/derive/attributes_test.go @@ -112,7 +112,7 @@ func TestPreparePayloadAttributes(t *testing.T) { l1Info.InfoParentHash = l2Parent.L1Origin.Hash l1Info.InfoNum = l2Parent.L1Origin.Number + 1 epoch := l1Info.ID() - l1InfoTx, err := L1InfoDepositBytes(0, l1Info, testSysCfg) + l1InfoTx, err := L1InfoDepositBytes(0, l1Info, testSysCfg, false) require.NoError(t, err) l1Fetcher.ExpectFetchReceipts(epoch.Hash, l1Info, nil, nil) attrBuilder := NewFetchingAttributesBuilder(cfg, l1Fetcher, l1CfgFetcher) @@ -149,7 +149,7 @@ func TestPreparePayloadAttributes(t *testing.T) { require.NoError(t, err) epoch := l1Info.ID() - l1InfoTx, err := L1InfoDepositBytes(0, l1Info, testSysCfg) + l1InfoTx, err := L1InfoDepositBytes(0, l1Info, testSysCfg, false) require.NoError(t, err) l2Txs := append(append(make([]eth.Data, 0), l1InfoTx), usedDepositTxs...) @@ -179,7 +179,7 @@ func TestPreparePayloadAttributes(t *testing.T) { l1Info.InfoNum = l2Parent.L1Origin.Number epoch := l1Info.ID() - l1InfoTx, err := L1InfoDepositBytes(l2Parent.SequenceNumber+1, l1Info, testSysCfg) + l1InfoTx, err := L1InfoDepositBytes(l2Parent.SequenceNumber+1, l1Info, testSysCfg, false) require.NoError(t, err) l1Fetcher.ExpectInfoByHash(epoch.Hash, l1Info, nil) @@ -194,6 +194,53 @@ func TestPreparePayloadAttributes(t *testing.T) { require.Equal(t, l1InfoTx, []byte(attrs.Transactions[0])) require.True(t, attrs.NoTxPool) }) + // Test that the payload attributes builder changes the deposit format based on L2-time-based regolith activation + t.Run("regolith", func(t *testing.T) { + testCases := []struct { + name string + l1Time uint64 + l2ParentTime uint64 + regolithTime uint64 + regolith bool + }{ + {"exactly", 900, 1000 - cfg.BlockTime, 1000, true}, + {"almost", 900, 1000 - cfg.BlockTime - 1, 1000, false}, + {"inactive", 700, 700, 1000, false}, + {"l1 time before regolith", 1000, 1001, 1001, true}, + {"l1 time way before regolith", 1000, 2000, 2000, true}, + {"l1 time before regoltih and l2 after", 1000, 3000, 2000, true}, + } + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + cfgCopy := *cfg // copy, we are making regolith config modifications + cfg := &cfgCopy + rng := rand.New(rand.NewSource(1234)) + l1Fetcher := &testutils.MockL1Source{} + defer l1Fetcher.AssertExpectations(t) + l2Parent := testutils.RandomL2BlockRef(rng) + cfg.RegolithTime = &tc.regolithTime + l2Parent.Time = tc.l2ParentTime + + l1CfgFetcher := &testutils.MockL2Client{} + l1CfgFetcher.ExpectSystemConfigByL2Hash(l2Parent.Hash, testSysCfg, nil) + defer l1CfgFetcher.AssertExpectations(t) + + l1Info := testutils.RandomBlockInfo(rng) + l1Info.InfoParentHash = l2Parent.L1Origin.Hash + l1Info.InfoNum = l2Parent.L1Origin.Number + 1 + l1Info.InfoTime = tc.l1Time + + epoch := l1Info.ID() + l1InfoTx, err := L1InfoDepositBytes(0, l1Info, testSysCfg, tc.regolith) + require.NoError(t, err) + l1Fetcher.ExpectFetchReceipts(epoch.Hash, l1Info, nil, nil) + attrBuilder := NewFetchingAttributesBuilder(cfg, l1Fetcher, l1CfgFetcher) + attrs, err := attrBuilder.PreparePayloadAttributes(context.Background(), l2Parent, epoch) + require.NoError(t, err) + require.Equal(t, l1InfoTx, []byte(attrs.Transactions[0])) + }) + } + }) } func encodeDeposits(deposits []*types.DepositTx) (out []eth.Data, err error) { diff --git a/op-node/rollup/derive/deposit_log_tob_test.go b/op-node/rollup/derive/deposit_log_tob_test.go index 18e6e5932..3cb1429a2 100644 --- a/op-node/rollup/derive/deposit_log_tob_test.go +++ b/op-node/rollup/derive/deposit_log_tob_test.go @@ -4,12 +4,13 @@ import ( "math/big" "testing" - "github.com/ethereum-optimism/optimism/op-service/testutils" - "github.com/ethereum-optimism/optimism/op-service/testutils/fuzzerutils" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" fuzz "github.com/google/gofuzz" "github.com/stretchr/testify/require" + + "github.com/ethereum-optimism/optimism/op-service/testutils" + "github.com/ethereum-optimism/optimism/op-service/testutils/fuzzerutils" ) // fuzzReceipts is similar to makeReceipts except it uses the fuzzer to populate DepositTx fields. diff --git a/op-node/rollup/derive/engine_queue_test.go b/op-node/rollup/derive/engine_queue_test.go index 306f894b4..19b6cdbc3 100644 --- a/op-node/rollup/derive/engine_queue_test.go +++ b/op-node/rollup/derive/engine_queue_test.go @@ -8,11 +8,12 @@ import ( "math/rand" "testing" + "github.com/holiman/uint256" + "github.com/stretchr/testify/require" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" - "github.com/holiman/uint256" - "github.com/stretchr/testify/require" "github.com/ethereum-optimism/optimism/op-node/metrics" "github.com/ethereum-optimism/optimism/op-node/rollup" @@ -274,6 +275,7 @@ func TestEngineQueue_Finalize(t *testing.T) { l1F.AssertExpectations(t) eng.AssertExpectations(t) } + func TestEngineQueue_ResetWhenUnsafeOriginNotCanonical(t *testing.T) { logger := testlog.Logger(t, log.LvlInfo) @@ -961,7 +963,7 @@ func TestBlockBuildingRace(t *testing.T) { InfoGasLimit: 0, InfoBloom: types.Bloom{}, InfoExtra: []byte{}, - }, cfg.Genesis.SystemConfig) + }, cfg.Genesis.SystemConfig, false) require.NoError(t, err) payloadA1 := ð.ExecutionPayload{ diff --git a/op-node/rollup/derive/fuzz_parsers_test.go b/op-node/rollup/derive/fuzz_parsers_test.go index 291a51369..c8d456a13 100644 --- a/op-node/rollup/derive/fuzz_parsers_test.go +++ b/op-node/rollup/derive/fuzz_parsers_test.go @@ -17,9 +17,9 @@ import ( "github.com/ethereum/go-ethereum/core/vm/runtime" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/testutils" + "github.com/kroma-network/kroma/kroma-bindings/bindings" ) var ( diff --git a/op-node/rollup/derive/l1_block_info.go b/op-node/rollup/derive/l1_block_info.go index 068e3c326..147d5e16e 100644 --- a/op-node/rollup/derive/l1_block_info.go +++ b/op-node/rollup/derive/l1_block_info.go @@ -10,16 +10,15 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum-optimism/optimism/op-bindings/predeploys" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/solabi" + "github.com/kroma-network/kroma/kroma-bindings/predeploys" ) const ( L1InfoFuncSignature = "setL1BlockValues(uint64,uint64,uint256,bytes32,uint64,bytes32,uint256,uint256,uint256)" L1InfoArguments = 9 L1InfoLen = 4 + 32*L1InfoArguments - SystemTxGas = 1_000_000 // (OP 150_000_000) ) var ( @@ -28,6 +27,10 @@ var ( L1BlockAddress = predeploys.L1BlockAddr ) +const ( + RegolithSystemTxGas = 1_000_000 +) + // L1BlockInfo presents the information stored in a L1Block.setL1BlockValues call type L1BlockInfo struct { Number uint64 @@ -149,7 +152,7 @@ func L1InfoDepositTxData(data []byte) (L1BlockInfo, error) { // L1InfoDeposit creates a L1 Info deposit transaction based on the L1 block, // and the L2 block-height difference with the start of the epoch. -func L1InfoDeposit(seqNumber uint64, block eth.BlockInfo, sysCfg eth.SystemConfig) (*types.DepositTx, error) { +func L1InfoDeposit(seqNumber uint64, block eth.BlockInfo, sysCfg eth.SystemConfig, regolith bool) (*types.DepositTx, error) { infoDat := L1BlockInfo{ Number: block.NumberU64(), Time: block.Time(), @@ -170,25 +173,33 @@ func L1InfoDeposit(seqNumber uint64, block eth.BlockInfo, sysCfg eth.SystemConfi L1BlockHash: block.Hash(), SeqNumber: seqNumber, } - // Set a very large gas limit with to ensure + // Set a very large gas limit with `IsSystemTransaction` to ensure // that the L1 Attributes Transaction does not run out of gas. - return &types.DepositTx{ + out := &types.DepositTx{ SourceHash: source.SourceHash(), From: L1InfoDepositerAddress, To: &L1BlockAddress, Mint: nil, Value: big.NewInt(0), - Gas: SystemTxGas, + Gas: 150_000_000, // [Kroma: START] // IsSystemTransaction: true, // [Kroma: END] Data: data, - }, nil + } + // With the regolith fork we disable the IsSystemTx functionality, and allocate real gas + if regolith { + // [Kroma: START] + // IsSystemTransaction: false, + // [Kroma: END] + out.Gas = RegolithSystemTxGas + } + return out, nil } // L1InfoDepositBytes returns a serialized L1-info attributes transaction. -func L1InfoDepositBytes(seqNumber uint64, l1Info eth.BlockInfo, sysCfg eth.SystemConfig) ([]byte, error) { - dep, err := L1InfoDeposit(seqNumber, l1Info, sysCfg) +func L1InfoDepositBytes(seqNumber uint64, l1Info eth.BlockInfo, sysCfg eth.SystemConfig, regolith bool) ([]byte, error) { + dep, err := L1InfoDeposit(seqNumber, l1Info, sysCfg, regolith) if err != nil { return nil, fmt.Errorf("failed to create L1 info tx: %w", err) } diff --git a/op-node/rollup/derive/l1_block_info_test.go b/op-node/rollup/derive/l1_block_info_test.go index 7fd87e606..6211317cc 100644 --- a/op-node/rollup/derive/l1_block_info_test.go +++ b/op-node/rollup/derive/l1_block_info_test.go @@ -67,7 +67,7 @@ func TestParseL1InfoDepositTxData(t *testing.T) { info := testCase.mkInfo(rng) l1Cfg := testCase.mkL1Cfg(rng, info) seqNr := testCase.seqNr(rng) - depTx, err := L1InfoDeposit(seqNr, info, l1Cfg) + depTx, err := L1InfoDeposit(seqNr, info, l1Cfg, false) require.NoError(t, err) res, err := L1InfoDepositTxData(depTx.Data) require.NoError(t, err, "expected valid deposit info") @@ -98,18 +98,21 @@ func TestParseL1InfoDepositTxData(t *testing.T) { t.Run("invalid selector", func(t *testing.T) { rng := rand.New(rand.NewSource(1234)) info := testutils.MakeBlockInfo(nil)(rng) - depTx, err := L1InfoDeposit(randomSeqNr(rng), info, randomL1Cfg(rng, info)) + depTx, err := L1InfoDeposit(randomSeqNr(rng), info, randomL1Cfg(rng, info), false) require.NoError(t, err) _, err = crand.Read(depTx.Data[0:4]) require.NoError(t, err) _, err = L1InfoDepositTxData(depTx.Data) require.ErrorContains(t, err, "function signature") }) - t.Run("valid", func(t *testing.T) { + t.Run("regolith", func(t *testing.T) { rng := rand.New(rand.NewSource(1234)) info := testutils.MakeBlockInfo(nil)(rng) - depTx, err := L1InfoDeposit(randomSeqNr(rng), info, randomL1Cfg(rng, info)) + depTx, err := L1InfoDeposit(randomSeqNr(rng), info, randomL1Cfg(rng, info), true) require.NoError(t, err) - require.Equal(t, depTx.Gas, uint64(SystemTxGas)) + // [Kroma: START] + // require.False(t, depTx.IsSystemTransaction) + // [Kroma: END] + require.Equal(t, depTx.Gas, uint64(RegolithSystemTxGas)) }) } diff --git a/op-node/rollup/derive/l1_block_info_tob_test.go b/op-node/rollup/derive/l1_block_info_tob_test.go index d5c0caaaf..c98318282 100644 --- a/op-node/rollup/derive/l1_block_info_tob_test.go +++ b/op-node/rollup/derive/l1_block_info_tob_test.go @@ -3,11 +3,12 @@ package derive import ( "testing" + fuzz "github.com/google/gofuzz" + "github.com/stretchr/testify/require" + "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/testutils" "github.com/ethereum-optimism/optimism/op-service/testutils/fuzzerutils" - fuzz "github.com/google/gofuzz" - "github.com/stretchr/testify/require" ) // FuzzParseL1InfoDepositTxDataValid is a fuzz test built from TestParseL1InfoDepositTxData, which constructs random @@ -27,7 +28,7 @@ func FuzzParseL1InfoDepositTxDataValid(f *testing.F) { typeProvider.Fuzz(&sysCfg) // Create our deposit tx from our info - depTx, err := L1InfoDeposit(seqNr, &l1Info, sysCfg) + depTx, err := L1InfoDeposit(seqNr, &l1Info, sysCfg, false) require.NoError(t, err, "error creating deposit tx from L1 info") // Get our info from out deposit tx @@ -73,7 +74,7 @@ func FuzzDecodeDepositTxDataToL1Info(f *testing.F) { ValidatorRewardScalar: res.ValidatorRewardScalar, } - depTx, err := L1InfoDeposit(res.SequenceNumber, &l1Info, sysCfg) + depTx, err := L1InfoDeposit(res.SequenceNumber, &l1Info, sysCfg, false) require.NoError(t, err, "error creating deposit tx from L1 info") require.Equal(t, depTx.Data, fuzzedData) }) diff --git a/op-node/rollup/derive/test/random.go b/op-node/rollup/derive/test/random.go index 1f610c6f3..ad836b362 100644 --- a/op-node/rollup/derive/test/random.go +++ b/op-node/rollup/derive/test/random.go @@ -3,11 +3,12 @@ package test import ( "math/rand" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/trie" + "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/testutils" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/trie" ) // RandomL2Block returns a random block whose first transaction is a random @@ -15,7 +16,7 @@ import ( func RandomL2Block(rng *rand.Rand, txCount int) (*types.Block, []*types.Receipt) { l1Block := types.NewBlock(testutils.RandomHeader(rng), nil, nil, nil, trie.NewStackTrie(nil)) - l1InfoTx, err := derive.L1InfoDeposit(0, eth.BlockToInfo(l1Block), eth.SystemConfig{}) + l1InfoTx, err := derive.L1InfoDeposit(0, eth.BlockToInfo(l1Block), eth.SystemConfig{}, testutils.RandomBool(rng)) if err != nil { panic("L1InfoDeposit: " + err.Error()) } diff --git a/op-node/rollup/driver/sequencer_test.go b/op-node/rollup/driver/sequencer_test.go index 060dff42a..1b1dd2e3d 100644 --- a/op-node/rollup/driver/sequencer_test.go +++ b/op-node/rollup/driver/sequencer_test.go @@ -258,7 +258,7 @@ func TestSequencerChaosMonkey(t *testing.T) { InfoBloom: types.Bloom{}, InfoExtra: []byte{}, } - infoDep, err := derive.L1InfoDepositBytes(seqNr, l1Info, cfg.Genesis.SystemConfig) + infoDep, err := derive.L1InfoDepositBytes(seqNr, l1Info, cfg.Genesis.SystemConfig, false) require.NoError(t, err) testGasLimit := eth.Uint64Quantity(10_000_000) diff --git a/op-node/rollup/output_root.go b/op-node/rollup/output_root.go index 73718cb13..93ceeb92f 100644 --- a/op-node/rollup/output_root.go +++ b/op-node/rollup/output_root.go @@ -3,8 +3,9 @@ package rollup import ( "errors" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" "github.com/ethereum-optimism/optimism/op-service/eth" + + "github.com/kroma-network/kroma/kroma-bindings/bindings" ) var ( diff --git a/op-node/rollup/types.go b/op-node/rollup/types.go index a29aee2e3..23c772d2e 100644 --- a/op-node/rollup/types.go +++ b/op-node/rollup/types.go @@ -69,19 +69,17 @@ type Config struct { // Required to identify the L2 network and create p2p signatures unique for this chain. L2ChainID *big.Int `json:"l2_chain_id"` - // [Kroma: START] // RegolithTime sets the activation time of the Regolith network-upgrade: // a pre-mainnet Bedrock change that addresses findings of the Sherlock contest related to deposit attributes. // "Regolith" is the loose deposited rock that sits on top of Bedrock. // Active if RegolithTime != nil && L2 block timestamp >= *RegolithTime, inactive otherwise. - //RegolithTime *uint64 `json:"regolith_time,omitempty"` - // + RegolithTime *uint64 `json:"regolith_time,omitempty"` + // CanyonTime sets the activation time of the next network upgrade. // Active if CanyonTime != nil && L2 block timestamp >= *CanyonTime, inactive otherwise. - //CanyonTime *uint64 `json:"canyon_time,omitempty"` - // - //SpanBatchTime *uint64 `json:"span_batch_time,omitempty"` - // [Kroma: END] + CanyonTime *uint64 `json:"canyon_time,omitempty"` + + SpanBatchTime *uint64 `json:"span_batch_time,omitempty"` // Note: below addresses are part of the block-derivation process, // and required to be the same network-wide to stay in consensus. @@ -120,6 +118,7 @@ func (cfg *Config) ValidateL2Config(ctx context.Context, client L2Client) error if err := cfg.CheckL2ChainID(ctx, client); err != nil { return err } + // Validate the Rollup L2 Genesis Blockhash if err := cfg.CheckL2GenesisBlockHash(ctx, client); err != nil { return err @@ -263,8 +262,18 @@ func (c *Config) L1Signer() types.Signer { return types.NewLondonSigner(c.L1ChainID) } -func (c *Config) ComputeTimestamp(blockNum uint64) uint64 { - return c.Genesis.L2Time + blockNum*c.BlockTime +// IsRegolith returns true if the Regolith hardfork is active at or past the given timestamp. +func (c *Config) IsRegolith(timestamp uint64) bool { + return c.RegolithTime != nil && timestamp >= *c.RegolithTime +} + +// IsCanyon returns true if the Canyon hardfork is active at or past the given timestamp. +func (c *Config) IsCanyon(timestamp uint64) bool { + return c.CanyonTime != nil && timestamp >= *c.CanyonTime +} + +func (c *Config) IsSpanBatch(timestamp uint64) bool { + return c.SpanBatchTime != nil && timestamp >= *c.SpanBatchTime } // Description outputs a banner describing the important parts of rollup configuration in a human-readable form. @@ -287,10 +296,15 @@ func (c *Config) Description(l2Chains map[string]string) string { banner += fmt.Sprintf("L2 Chain ID: %v (%s)\n", c.L2ChainID, networkL2) banner += fmt.Sprintf("L1 Chain ID: %v (%s)\n", c.L1ChainID, networkL1) // Report the genesis configuration - banner += "Kroma starting point:\n" + banner += "Bedrock starting point:\n" banner += fmt.Sprintf(" L2 starting time: %d ~ %s\n", c.Genesis.L2Time, fmtTime(c.Genesis.L2Time)) banner += fmt.Sprintf(" L2 block: %s %d\n", c.Genesis.L2.Hash, c.Genesis.L2.Number) banner += fmt.Sprintf(" L1 block: %s %d\n", c.Genesis.L1.Hash, c.Genesis.L1.Number) + // Report the upgrade configuration + banner += "Post-Bedrock Network Upgrades (timestamp based):\n" + banner += fmt.Sprintf(" - Regolith: %s\n", fmtForkTimeOrUnset(c.RegolithTime)) + banner += fmt.Sprintf(" - Canyon: %s\n", fmtForkTimeOrUnset(c.CanyonTime)) + banner += fmt.Sprintf(" - SpanBatch: %s\n", fmtForkTimeOrUnset(c.SpanBatchTime)) return banner } @@ -313,7 +327,10 @@ func (c *Config) LogDescription(log log.Logger, l2Chains map[string]string) { log.Info("Rollup Config", "l2_chain_id", c.L2ChainID, "l2_network", networkL2, "l1_chain_id", c.L1ChainID, "l1_network", networkL1, "l2_start_time", c.Genesis.L2Time, "l2_block_hash", c.Genesis.L2.Hash.String(), "l2_block_number", c.Genesis.L2.Number, "l1_block_hash", c.Genesis.L1.Hash.String(), - "l1_block_number", c.Genesis.L1.Number) + "l1_block_number", c.Genesis.L1.Number, "regolith_time", fmtForkTimeOrUnset(c.RegolithTime), + "canyon_time", fmtForkTimeOrUnset(c.CanyonTime), + "span_batch_time", fmtForkTimeOrUnset(c.SpanBatchTime), + ) } func fmtForkTimeOrUnset(v *uint64) string { diff --git a/op-node/rollup/types_test.go b/op-node/rollup/types_test.go index 14bc5d564..b7abdfd9b 100644 --- a/op-node/rollup/types_test.go +++ b/op-node/rollup/types_test.go @@ -3,6 +3,7 @@ package rollup import ( "context" "encoding/json" + "fmt" "math/big" "math/rand" "testing" @@ -157,6 +158,44 @@ func TestRandomConfigDescription(t *testing.T) { require.Contains(t, out, "(unknown L1)") require.Contains(t, out, "(unknown L2)") }) + t.Run("regolith unset", func(t *testing.T) { + config := randConfig() + config.RegolithTime = nil + out := config.Description(nil) + require.Contains(t, out, "Regolith: (not configured)") + }) + t.Run("regolith genesis", func(t *testing.T) { + config := randConfig() + config.RegolithTime = new(uint64) + out := config.Description(nil) + require.Contains(t, out, "Regolith: @ genesis") + }) + t.Run("regolith date", func(t *testing.T) { + config := randConfig() + x := uint64(1677119335) + config.RegolithTime = &x + out := config.Description(nil) + // Don't check human-readable part of the date, it's timezone-dependent. + // Don't make this test fail only in Australia :') + require.Contains(t, out, fmt.Sprintf("Regolith: @ %d ~ ", x)) + }) +} + +// TestRegolithActivation tests the activation condition of the Regolith upgrade. +func TestRegolithActivation(t *testing.T) { + config := randConfig() + config.RegolithTime = nil + require.False(t, config.IsRegolith(0), "false if nil time, even if checking 0") + require.False(t, config.IsRegolith(123456), "false if nil time") + config.RegolithTime = new(uint64) + require.True(t, config.IsRegolith(0), "true at zero") + require.True(t, config.IsRegolith(123456), "true for any") + x := uint64(123) + config.RegolithTime = &x + require.False(t, config.IsRegolith(0)) + require.False(t, config.IsRegolith(122)) + require.True(t, config.IsRegolith(123)) + require.True(t, config.IsRegolith(124)) } type mockL2Client struct { diff --git a/op-node/withdrawals/testdata/bridge-withdrawal.json b/op-node/withdrawals/testdata/bridge-withdrawal.json index 7ce9d0c33..aee441507 100644 --- a/op-node/withdrawals/testdata/bridge-withdrawal.json +++ b/op-node/withdrawals/testdata/bridge-withdrawal.json @@ -35,12 +35,12 @@ "removed": false }, { - "address": "0x4200000000000000000000000000000000000003", + "address": "0x4200000000000000000000000000000000000016", "topics": [ "0x02a52367d10742d8032712c1bb8e0144ff1ec5ffda1ed7d70bb05a2744955054", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000004200000000000000000000000000000000000004", - "0x0000000000000000000000006900000000000000000000000000000000000006" + "0x0000000000000000000000004200000000000000000000000000000000000007", + "0x0000000000000000000000006900000000000000000000000000000000000002" ], "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031b8000000000000000000000000000000000000000000000000000000000000000800d827f8148288e3a2466018f71b968ece4ea9f9e2a81c30da9bd46cce286828500000000000000000000000000000000000000000000000000000000000001e4d764ad0b0001000000000000000000000000000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000001000000000000000000000000069000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e40166a07a00000000000000000000000089d51be807d98fc974a0f41b2e67a8228d7846ef0000000000000000000000007c6b91d9be155a6db01f749217d76ff02a7227f2000000000000000000000000c20c5ec92fda6e611a08485123cdc0d5b84bd3a2000000000000000000000000c20c5ec92fda6e611a08485123cdc0d5b84bd3a200000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x36", @@ -51,7 +51,7 @@ "removed": false }, { - "address": "0x4200000000000000000000000000000000000003", + "address": "0x4200000000000000000000000000000000000016", "topics": [ "0xedd348f9c36ef1a5b0747bb5039752707059f0b934c8e508b3271e08fbd0122c", "0x0d827f8148288e3a2466018f71b968ece4ea9f9e2a81c30da9bd46cce2868285" @@ -65,7 +65,7 @@ "removed": false }, { - "address": "0x4200000000000000000000000000000000000004", + "address": "0x4200000000000000000000000000000000000007", "topics": [ "0xcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a", "0x0000000000000000000000006900000000000000000000000000000000000003" @@ -79,7 +79,7 @@ "removed": false }, { - "address": "0x4200000000000000000000000000000000000004", + "address": "0x4200000000000000000000000000000000000007", "topics": [ "0x8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d546", "0x0000000000000000000000004200000000000000000000000000000000000010" @@ -93,7 +93,7 @@ "removed": false }, { - "address": "0x4200000000000000000000000000000000000009", + "address": "0x4200000000000000000000000000000000000010", "topics": [ "0x7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf", "0x0000000000000000000000007c6b91d9be155a6db01f749217d76ff02a7227f2", @@ -109,7 +109,7 @@ "removed": false }, { - "address": "0x4200000000000000000000000000000000000009", + "address": "0x4200000000000000000000000000000000000010", "topics": [ "0x73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e", "0x00000000000000000000000089d51be807d98fc974a0f41b2e67a8228d7846ef", diff --git a/op-node/withdrawals/utils.go b/op-node/withdrawals/utils.go index 2a82fe1cc..f0929583d 100644 --- a/op-node/withdrawals/utils.go +++ b/op-node/withdrawals/utils.go @@ -14,8 +14,8 @@ import ( "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethclient/gethclient" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" - "github.com/ethereum-optimism/optimism/op-bindings/predeploys" + "github.com/kroma-network/kroma/kroma-bindings/bindings" + "github.com/kroma-network/kroma/kroma-bindings/predeploys" ) var MessagePassedTopic = crypto.Keccak256Hash([]byte("MessagePassed(uint256,address,address,uint256,uint256,bytes,bytes32)")) diff --git a/op-node/withdrawals/utils_test.go b/op-node/withdrawals/utils_test.go index 578829650..e626e41ea 100644 --- a/op-node/withdrawals/utils_test.go +++ b/op-node/withdrawals/utils_test.go @@ -12,9 +12,8 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/stretchr/testify/require" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" - "github.com/ethereum-optimism/optimism/op-bindings/predeploys" "github.com/ethereum-optimism/optimism/op-service/testutils" + "github.com/kroma-network/kroma/kroma-bindings/bindings" ) func TestParseMessagePassed(t *testing.T) { @@ -28,8 +27,8 @@ func TestParseMessagePassed(t *testing.T) { "bridge-withdrawal.json", &bindings.L2ToL1MessagePasserMessagePassed{ Nonce: new(big.Int), - Sender: common.HexToAddress(predeploys.L2CrossDomainMessenger), - Target: common.HexToAddress(predeploys.DevL1CrossDomainMessenger), + Sender: common.HexToAddress("0x4200000000000000000000000000000000000007"), + Target: common.HexToAddress("0x6900000000000000000000000000000000000002"), Value: new(big.Int), GasLimit: big.NewInt(203648), Data: hexutil.MustDecode( @@ -51,12 +50,12 @@ func TestParseMessagePassed(t *testing.T) { ), WithdrawalHash: common.HexToHash("0x0d827f8148288e3a2466018f71b968ece4ea9f9e2a81c30da9bd46cce2868285"), Raw: types.Log{ - Address: common.HexToAddress(predeploys.L2ToL1MessagePasser), + Address: common.HexToAddress("0x4200000000000000000000000000000000000016"), Topics: []common.Hash{ common.HexToHash("0x02a52367d10742d8032712c1bb8e0144ff1ec5ffda1ed7d70bb05a2744955054"), common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000"), - common.HexToHash(predeploys.L2CrossDomainMessenger), - common.HexToHash(predeploys.DevL1CrossDomainMessenger), + common.HexToHash("0x0000000000000000000000004200000000000000000000000000000000000007"), + common.HexToHash("0x0000000000000000000000006900000000000000000000000000000000000002"), }, Data: hexutil.MustDecode( "0x00000000000000000000000000000000000000000000000000000000000000" + diff --git a/op-service/client/l2/engineapi/test/l2_engine_api_tests.go b/op-service/client/l2/engineapi/test/l2_engine_api_tests.go index 70c34fa80..123bc219f 100644 --- a/op-service/client/l2/engineapi/test/l2_engine_api_tests.go +++ b/op-service/client/l2/engineapi/test/l2_engine_api_tests.go @@ -4,15 +4,16 @@ import ( "context" "testing" - "github.com/ethereum-optimism/optimism/op-node/rollup/derive" - "github.com/ethereum-optimism/optimism/op-service/client/l2/engineapi" - "github.com/ethereum-optimism/optimism/op-service/eth" - "github.com/ethereum-optimism/optimism/op-service/testlog" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" "github.com/stretchr/testify/require" + + "github.com/ethereum-optimism/optimism/op-node/rollup/derive" + "github.com/ethereum-optimism/optimism/op-service/client/l2/engineapi" + "github.com/ethereum-optimism/optimism/op-service/eth" + "github.com/ethereum-optimism/optimism/op-service/testlog" ) var gasLimit = eth.Uint64Quantity(30_000_000) @@ -30,7 +31,7 @@ func RunEngineAPITests(t *testing.T, createBackend func(t *testing.T) engineapi. api := newTestHelper(t, createBackend) genesis := api.backend.CurrentHeader() - txData, err := derive.L1InfoDeposit(1, eth.HeaderBlockInfo(genesis), eth.SystemConfig{}) + txData, err := derive.L1InfoDeposit(1, eth.HeaderBlockInfo(genesis), eth.SystemConfig{}, true) api.assert.NoError(err) tx := types.NewTx(txData) block := api.addBlock(tx) @@ -48,7 +49,7 @@ func RunEngineAPITests(t *testing.T, createBackend func(t *testing.T) engineapi. api := newTestHelper(t, createBackend) genesis := api.backend.CurrentHeader() - txData, err := derive.L1InfoDeposit(1, eth.HeaderBlockInfo(genesis), eth.SystemConfig{}) + txData, err := derive.L1InfoDeposit(1, eth.HeaderBlockInfo(genesis), eth.SystemConfig{}, true) api.assert.NoError(err) txData.Gas = uint64(gasLimit + 1) tx := types.NewTx(txData) diff --git a/op-service/eth/output.go b/op-service/eth/output.go index c586f0d50..6af903630 100644 --- a/op-service/eth/output.go +++ b/op-service/eth/output.go @@ -10,7 +10,7 @@ import ( "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/rlp" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" + "github.com/kroma-network/kroma/kroma-bindings/bindings" ) // [Kroma: START] diff --git a/op-service/sources/l2_client.go b/op-service/sources/l2_client.go index 9764902a3..9ba8bb78c 100644 --- a/op-service/sources/l2_client.go +++ b/op-service/sources/l2_client.go @@ -10,12 +10,12 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" - "github.com/ethereum-optimism/optimism/op-bindings/predeploys" "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-service/client" "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/sources/caching" + "github.com/kroma-network/kroma/kroma-bindings/predeploys" ) type L2ClientConfig struct { @@ -166,6 +166,7 @@ func (s *L2Client) SystemConfigByL2Hash(ctx context.Context, hash common.Hash) ( s.systemConfigsCache.Add(hash, cfg) return cfg, nil } + func (s *L2Client) OutputV0AtBlock(ctx context.Context, blockHash common.Hash) (*eth.OutputV0, error) { head, err := s.InfoByHash(ctx, blockHash) if err != nil { diff --git a/op-service/sources/rollupclient.go b/op-service/sources/rollupclient.go index 55518952e..4184b6b22 100644 --- a/op-service/sources/rollupclient.go +++ b/op-service/sources/rollupclient.go @@ -22,31 +22,25 @@ func NewRollupClient(rpc client.RPC) *RollupClient { func (r *RollupClient) OutputAtBlock(ctx context.Context, blockNum uint64) (*eth.OutputResponse, error) { var output *eth.OutputResponse - err := r.rpc.CallContext(ctx, &output, "kroma_outputAtBlock", hexutil.Uint64(blockNum)) - return output, err -} - -func (r *RollupClient) OutputWithProofAtBlock(ctx context.Context, blockNum uint64) (*eth.OutputResponse, error) { - var output *eth.OutputResponse - err := r.rpc.CallContext(ctx, &output, "kroma_outputWithProofAtBlock", hexutil.Uint64(blockNum)) + err := r.rpc.CallContext(ctx, &output, "optimism_outputAtBlock", hexutil.Uint64(blockNum)) return output, err } func (r *RollupClient) SyncStatus(ctx context.Context) (*eth.SyncStatus, error) { var output *eth.SyncStatus - err := r.rpc.CallContext(ctx, &output, "kroma_syncStatus") + err := r.rpc.CallContext(ctx, &output, "optimism_syncStatus") return output, err } func (r *RollupClient) RollupConfig(ctx context.Context) (*rollup.Config, error) { var output *rollup.Config - err := r.rpc.CallContext(ctx, &output, "kroma_rollupConfig") + err := r.rpc.CallContext(ctx, &output, "optimism_rollupConfig") return output, err } func (r *RollupClient) Version(ctx context.Context) (string, error) { var output string - err := r.rpc.CallContext(ctx, &output, "kroma_version") + err := r.rpc.CallContext(ctx, &output, "optimism_version") return output, err } @@ -69,3 +63,12 @@ func (r *RollupClient) SequencerActive(ctx context.Context) (bool, error) { func (r *RollupClient) SetLogLevel(ctx context.Context, lvl log.Lvl) error { return r.rpc.CallContext(ctx, nil, "admin_setLogLevel", lvl.String()) } + +// [Kroma: START] +func (r *RollupClient) OutputWithProofAtBlock(ctx context.Context, blockNum uint64) (*eth.OutputResponse, error) { + var output *eth.OutputResponse + err := r.rpc.CallContext(ctx, &output, "kroma_outputWithProofAtBlock", hexutil.Uint64(blockNum)) + return output, err +} + +// [Kroma: END] diff --git a/op-service/txmgr/buffered_txmgr.go b/op-service/txmgr/buffered_txmgr.go index d25a082f4..994cd4fde 100644 --- a/op-service/txmgr/buffered_txmgr.go +++ b/op-service/txmgr/buffered_txmgr.go @@ -6,9 +6,10 @@ import ( "fmt" "sync" - "github.com/ethereum-optimism/optimism/op-service/txmgr/metrics" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" + + "github.com/ethereum-optimism/optimism/op-service/txmgr/metrics" ) type BufferedTxManager struct { @@ -42,7 +43,7 @@ func NewBufferedTxManager(name string, l log.Logger, m metrics.TxMetricer, cfg C } func (m *BufferedTxManager) Start(ctx context.Context) error { - m.txRequestChan = make(chan *TxRequest, m.TxBufferSize) + m.txRequestChan = make(chan *TxRequest, m.Config.TxBufferSize) m.ctx, m.cancel = context.WithCancel(ctx) m.wg.Add(1) go m.listen(m.ctx) diff --git a/op-service/txmgr/cli.go b/op-service/txmgr/cli.go index 6a58b2819..eea9cd3af 100644 --- a/op-service/txmgr/cli.go +++ b/op-service/txmgr/cli.go @@ -7,13 +7,14 @@ import ( "math/big" "time" - opservice "github.com/ethereum-optimism/optimism/op-service" - opcrypto "github.com/ethereum-optimism/optimism/op-service/crypto" - opsigner "github.com/ethereum-optimism/optimism/op-service/signer" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/log" "github.com/urfave/cli/v2" + + opservice "github.com/ethereum-optimism/optimism/op-service" + opcrypto "github.com/ethereum-optimism/optimism/op-service/crypto" + opsigner "github.com/ethereum-optimism/optimism/op-service/signer" ) const ( @@ -36,6 +37,21 @@ const ( // [Kroma: END] ) +var ( + SequencerHDPathFlag = &cli.StringFlag{ + Name: "sequencer-hd-path", + Usage: "DEPRECATED: The HD path used to derive the sequencer wallet from the " + + "mnemonic. The mnemonic flag must also be set.", + EnvVars: []string{"OP_BATCHER_SEQUENCER_HD_PATH"}, + } + L2OutputHDPathFlag = &cli.StringFlag{ + Name: "l2-output-hd-path", + Usage: "DEPRECATED:The HD path used to derive the l2output wallet from the " + + "mnemonic. The mnemonic flag must also be set.", + EnvVars: []string{"OP_PROPOSER_L2_OUTPUT_HD_PATH"}, + } +) + type DefaultFlagValues struct { NumConfirmations uint64 SafeAbortNonceTooLowCount uint64 @@ -58,6 +74,17 @@ var ( ReceiptQueryInterval: 12 * time.Second, TxBufferSize: uint64(10), } + // [Kroma: START] + // DefaultChallengerFlagValues = DefaultFlagValues{ + // NumConfirmations: uint64(3), + // SafeAbortNonceTooLowCount: uint64(3), + // ResubmissionTimeout: 24 * time.Second, + // NetworkTimeout: 10 * time.Second, + // TxSendTimeout: 2 * time.Minute, + // TxNotInMempoolTimeout: 1 * time.Minute, + // ReceiptQueryInterval: 12 * time.Second, + // } + // [Kroma: END] ) func CLIFlags(envPrefix string) []cli.Flag { @@ -136,13 +163,11 @@ func CLIFlagsWithDefaults(envPrefix string, defaults DefaultFlagValues) []cli.Fl } type CLIConfig struct { - L1RPCURL string - Mnemonic string - HDPath string - // [Kroma: START] - // SequencerHDPath string - // L2OutputHDPath string - // [Kroma: END] + L1RPCURL string + Mnemonic string + HDPath string + SequencerHDPath string + L2OutputHDPath string PrivateKey string SignerCLIConfig opsigner.CLIConfig NumConfirmations uint64 @@ -206,6 +231,8 @@ func ReadCLIConfig(ctx *cli.Context) CLIConfig { L1RPCURL: ctx.String(L1RPCFlagName), Mnemonic: ctx.String(MnemonicFlagName), HDPath: ctx.String(HDPathFlagName), + SequencerHDPath: ctx.String(SequencerHDPathFlag.Name), + L2OutputHDPath: ctx.String(L2OutputHDPathFlag.Name), PrivateKey: ctx.String(PrivateKeyFlagName), SignerCLIConfig: opsigner.ReadCLIConfig(ctx), NumConfirmations: ctx.Uint64(NumConfirmationsFlagName), @@ -238,7 +265,15 @@ func NewConfig(cfg CLIConfig, l log.Logger) (Config, error) { return Config{}, fmt.Errorf("could not dial fetch L1 chain ID: %w", err) } - signerFactory, from, err := opcrypto.SignerFactoryFromConfig(l, cfg.PrivateKey, cfg.Mnemonic, cfg.HDPath, cfg.SignerCLIConfig) + // Allow backwards compatible ways of specifying the HD path + hdPath := cfg.HDPath + if hdPath == "" && cfg.SequencerHDPath != "" { + hdPath = cfg.SequencerHDPath + } else if hdPath == "" && cfg.L2OutputHDPath != "" { + hdPath = cfg.L2OutputHDPath + } + + signerFactory, from, err := opcrypto.SignerFactoryFromConfig(l, cfg.PrivateKey, cfg.Mnemonic, hdPath, cfg.SignerCLIConfig) if err != nil { return Config{}, fmt.Errorf("could not init signer: %w", err) } diff --git a/op-service/txmgr/queue_test.go b/op-service/txmgr/queue_test.go index 2e0b7a096..61c14f61e 100644 --- a/op-service/txmgr/queue_test.go +++ b/op-service/txmgr/queue_test.go @@ -7,14 +7,15 @@ import ( "testing" "time" - "github.com/ethereum-optimism/optimism/op-service/testlog" - "github.com/ethereum-optimism/optimism/op-service/txmgr/metrics" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" "github.com/stretchr/testify/require" "golang.org/x/exp/slices" + + "github.com/ethereum-optimism/optimism/op-service/testlog" + "github.com/ethereum-optimism/optimism/op-service/txmgr/metrics" ) type queueFunc func(id int, candidate TxCandidate, receiptCh chan TxReceipt[int], q *Queue[int]) bool diff --git a/op-service/txmgr/txmgr.go b/op-service/txmgr/txmgr.go index 43e6c6a8a..595d7c8fe 100644 --- a/op-service/txmgr/txmgr.go +++ b/op-service/txmgr/txmgr.go @@ -124,9 +124,9 @@ func NewSimpleTxManagerFromConfig(name string, l log.Logger, m metrics.TxMetrice return nil, fmt.Errorf("invalid config: %w", err) } return &SimpleTxManager{ + Config: conf, chainID: conf.ChainID, name: name, - Config: conf, backend: conf.Backend, l: l.New("service", name), metr: m, @@ -187,9 +187,9 @@ func (m *SimpleTxManager) Call(ctx context.Context, msg ethereum.CallMsg, blockN // send performs the actual transaction creation and sending. func (m *SimpleTxManager) send(ctx context.Context, candidate TxCandidate) (*types.Receipt, error) { - if m.TxSendTimeout != 0 { + if m.Config.TxSendTimeout != 0 { var cancel context.CancelFunc - ctx, cancel = context.WithTimeout(ctx, m.TxSendTimeout) + ctx, cancel = context.WithTimeout(ctx, m.Config.TxSendTimeout) defer cancel() } tx, err := retry.Do(ctx, 30, retry.Fixed(2*time.Second), func() (*types.Transaction, error) { @@ -231,7 +231,7 @@ func (m *SimpleTxManager) craftTx(ctx context.Context, candidate TxCandidate) (* AccessList: candidate.AccessList, } - m.l.Info("Creating tx", "to", rawTx.To, "from", m.From()) + m.l.Info("Creating tx", "to", rawTx.To, "from", m.Config.From) // If the gas limit is set, we can use that as the gas if candidate.GasLimit != 0 { @@ -259,9 +259,9 @@ func (m *SimpleTxManager) craftTx(ctx context.Context, candidate TxCandidate) (* } rawTx.Nonce = nonce - ctx, cancel := context.WithTimeout(ctx, m.NetworkTimeout) + ctx, cancel := context.WithTimeout(ctx, m.Config.NetworkTimeout) defer cancel() - return m.Signer(ctx, m.Config.From, types.NewTx(rawTx)) + return m.Config.Signer(ctx, m.Config.From, types.NewTx(rawTx)) } // nextNonce returns a nonce to use for the next transaction. It uses @@ -274,7 +274,7 @@ func (m *SimpleTxManager) nextNonce(ctx context.Context) (uint64, error) { if m.nonce == nil { // Fetch the sender's nonce from the latest known block (nil `blockNumber`) - childCtx, cancel := context.WithTimeout(ctx, m.NetworkTimeout) + childCtx, cancel := context.WithTimeout(ctx, m.Config.NetworkTimeout) defer cancel() nonce, err := m.backend.NonceAt(childCtx, m.Config.From, nil) if err != nil { @@ -306,7 +306,7 @@ func (m *SimpleTxManager) sendTx(ctx context.Context, tx *types.Transaction) (*t ctx, cancel := context.WithCancel(ctx) defer cancel() - sendState := NewSendState(m.SafeAbortNonceTooLowCount, m.TxNotInMempoolTimeout) + sendState := NewSendState(m.Config.SafeAbortNonceTooLowCount, m.Config.TxNotInMempoolTimeout) receiptChan := make(chan *types.Receipt, 1) sendTxAsync := func(tx *types.Transaction) { defer wg.Done() @@ -317,7 +317,7 @@ func (m *SimpleTxManager) sendTx(ctx context.Context, tx *types.Transaction) (*t wg.Add(1) go sendTxAsync(tx) - ticker := time.NewTicker(m.ResubmissionTimeout) + ticker := time.NewTicker(m.Config.ResubmissionTimeout) defer ticker.Stop() bumpCounter := 0 @@ -372,7 +372,7 @@ func (m *SimpleTxManager) publishAndWaitForTx(ctx context.Context, tx *types.Tra log := m.l.New("hash", tx.Hash(), "nonce", tx.Nonce(), "gasTipCap", tx.GasTipCap(), "gasFeeCap", tx.GasFeeCap()) log.Info("Publishing transaction") - cCtx, cancel := context.WithTimeout(ctx, m.NetworkTimeout) + cCtx, cancel := context.WithTimeout(ctx, m.Config.NetworkTimeout) defer cancel() t := time.Now() err := m.backend.SendTransaction(cCtx, tx) @@ -424,7 +424,7 @@ func (m *SimpleTxManager) publishAndWaitForTx(ctx context.Context, tx *types.Tra // waitMined waits for the transaction to be mined or for the context to be cancelled. func (m *SimpleTxManager) waitMined(ctx context.Context, tx *types.Transaction, sendState *SendState) (*types.Receipt, error) { txHash := tx.Hash() - queryTicker := time.NewTicker(m.ReceiptQueryInterval) + queryTicker := time.NewTicker(m.Config.ReceiptQueryInterval) defer queryTicker.Stop() for { select { @@ -440,7 +440,7 @@ func (m *SimpleTxManager) waitMined(ctx context.Context, tx *types.Transaction, // queryReceipt queries for the receipt and returns the receipt if it has passed the confirmation depth func (m *SimpleTxManager) queryReceipt(ctx context.Context, txHash common.Hash, sendState *SendState) *types.Receipt { - ctx, cancel := context.WithTimeout(ctx, m.NetworkTimeout) + ctx, cancel := context.WithTimeout(ctx, m.Config.NetworkTimeout) defer cancel() receipt, err := m.backend.TransactionReceipt(ctx, txHash) if errors.Is(err, ethereum.NotFound) { @@ -468,7 +468,7 @@ func (m *SimpleTxManager) queryReceipt(ctx context.Context, txHash common.Hash, } m.l.Debug("Transaction mined, checking confirmations", "hash", txHash, "txHeight", txHeight, - "tipHeight", tipHeight, "numConfirmations", m.NumConfirmations) + "tipHeight", tipHeight, "numConfirmations", m.Config.NumConfirmations) // The transaction is considered confirmed when // txHeight+numConfirmations-1 <= tipHeight. Note that the -1 is @@ -477,13 +477,13 @@ func (m *SimpleTxManager) queryReceipt(ctx context.Context, txHash common.Hash, // transaction should be confirmed when txHeight is equal to // tipHeight. The equation is rewritten in this form to avoid // underflows. - if txHeight+m.NumConfirmations <= tipHeight+1 { + if txHeight+m.Config.NumConfirmations <= tipHeight+1 { m.l.Info("Transaction confirmed", "hash", txHash) return receipt } // Safe to subtract since we know the LHS above is greater. - confsRemaining := (txHeight + m.NumConfirmations) - (tipHeight + 1) + confsRemaining := (txHeight + m.Config.NumConfirmations) - (tipHeight + 1) m.l.Debug("Transaction not yet confirmed", "hash", txHash, "confsRemaining", confsRemaining) return nil } @@ -526,7 +526,7 @@ func (m *SimpleTxManager) increaseGasPrice(ctx context.Context, tx *types.Transa // Re-estimate gaslimit in case things have changed or a previous gaslimit estimate was wrong gas, err := m.backend.EstimateGas(ctx, ethereum.CallMsg{ - From: m.From(), + From: m.Config.From, To: rawTx.To, GasFeeCap: bumpedTip, GasTipCap: bumpedFee, @@ -545,9 +545,9 @@ func (m *SimpleTxManager) increaseGasPrice(ctx context.Context, tx *types.Transa } rawTx.Gas = gas - ctx, cancel := context.WithTimeout(ctx, m.NetworkTimeout) + ctx, cancel := context.WithTimeout(ctx, m.Config.NetworkTimeout) defer cancel() - newTx, err := m.Signer(ctx, m.Config.From, types.NewTx(rawTx)) + newTx, err := m.Config.Signer(ctx, m.Config.From, types.NewTx(rawTx)) if err != nil { m.l.Warn("failed to sign new transaction", "err", err) return tx, nil @@ -557,7 +557,7 @@ func (m *SimpleTxManager) increaseGasPrice(ctx context.Context, tx *types.Transa // SuggestGasPriceCaps suggests what the new tip & new basefee should be based on the current L1 conditions func (m *SimpleTxManager) SuggestGasPriceCaps(ctx context.Context) (*big.Int, *big.Int, error) { - cCtx, cancel := context.WithTimeout(ctx, m.NetworkTimeout) + cCtx, cancel := context.WithTimeout(ctx, m.Config.NetworkTimeout) defer cancel() tip, err := m.backend.SuggestGasTipCap(cCtx) if err != nil { @@ -566,7 +566,7 @@ func (m *SimpleTxManager) SuggestGasPriceCaps(ctx context.Context) (*big.Int, *b } else if tip == nil { return nil, nil, errors.New("the suggested tip was nil") } - cCtx, cancel = context.WithTimeout(ctx, m.NetworkTimeout) + cCtx, cancel = context.WithTimeout(ctx, m.Config.NetworkTimeout) defer cancel() head, err := m.backend.HeaderByNumber(cCtx, nil) if err != nil { diff --git a/op-service/watcher/contract.go b/op-service/watcher/contract.go index 089a44e09..87269956c 100644 --- a/op-service/watcher/contract.go +++ b/op-service/watcher/contract.go @@ -4,12 +4,13 @@ import ( "context" "time" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/log" + + "github.com/kroma-network/kroma/kroma-bindings/bindings" ) type ContractWatcher struct { diff --git a/ops/scripts/newer-file.sh b/ops/scripts/newer-file.sh new file mode 100644 index 000000000..c2bf7f695 --- /dev/null +++ b/ops/scripts/newer-file.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +# Returns 0 if the first file is newer than the second file +# Works on files or directories + +if [[ ! -e "$1" ]]; then exit 1; fi +if [[ ! -e "$2" ]]; then exit 1; fi + +if uname | grep -q "Darwin"; then + MOD_TIME_FMT="-f %m" +else + MOD_TIME_FMT="-c %Y" +fi + +FILE_1_AGE=$(stat $MOD_TIME_FMT "$1") +FILE_2_AGE=$(stat $MOD_TIME_FMT "$2") + +if [ "$FILE_1_AGE" -gt "$FILE_2_AGE" ]; then + exit 0 +fi + +exit 1 \ No newline at end of file diff --git a/packages/contracts/.gitignore b/packages/contracts/.gitignore index 8ad70c6cb..d82f192d9 100644 --- a/packages/contracts/.gitignore +++ b/packages/contracts/.gitignore @@ -1,15 +1,31 @@ +# Artifacts and Cache artifacts forge-artifacts cache -typechain -coverage.json -.deps broadcast -genesis.json -src/contract-artifacts.ts -tmp-artifacts -deployments/mainnet-forked -deploy-config/mainnet-forked.json -test-case-generator/fuzz +typechain + +# Metrics +coverage.out .resource-metering.csv + +# Tests +test-case-generator/fuzz + +# Scripts scripts/differential-testing/differential-testing + +# Environment Variables +.envrc +!.envrc.example + +# Deployments +deployments/900 +deployments/901 +deployments/hardhat +deployments/getting-started +deployments/*/.deploy +deployments/1337 + +# Devnet config which changes with each 'make devnet-up' +deploy-config/devnetL1.json diff --git a/packages/contracts/contracts/governance/GovernanceToken.sol b/packages/contracts/contracts/governance/GovernanceToken.sol new file mode 100644 index 000000000..13a10096a --- /dev/null +++ b/packages/contracts/contracts/governance/GovernanceToken.sol @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; +import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol"; +import "@openzeppelin/contracts/access/Ownable.sol"; + +/// @custom:predeploy 0x4200000000000000000000000000000000000010 +/// @title GovernanceToken +/// @notice The Kroma token used in governance and supporting voting and delegation. Implements +/// EIP 2612 allowing signed approvals. Contract is "owned" by a `MintManager` instance with +/// permission to the `mint` function only, for the purposes of enforcing the token +/// inflation schedule. +contract GovernanceToken is ERC20Burnable, ERC20Votes, Ownable { + /// @notice Constructs the GovernanceToken contract. + constructor() ERC20("Kroma", "KRO") ERC20Permit("Kroma") { } + + /// @notice Allows the owner to mint tokens. + /// @param _account The account receiving minted tokens. + /// @param _amount The amount of tokens to mint. + function mint(address _account, uint256 _amount) public onlyOwner { + _mint(_account, _amount); + } + + /// @notice Callback called after a token transfer. + /// @param from The account sending tokens. + /// @param to The account receiving tokens. + /// @param amount The amount of tokens being transfered. + function _afterTokenTransfer(address from, address to, uint256 amount) internal override(ERC20, ERC20Votes) { + super._afterTokenTransfer(from, to, amount); + } + + /// @notice Internal mint function. + /// @param to The account receiving minted tokens. + /// @param amount The amount of tokens to mint. + function _mint(address to, uint256 amount) internal override(ERC20, ERC20Votes) { + super._mint(to, amount); + } + + /// @notice Internal burn function. + /// @param account The account that tokens will be burned from. + /// @param amount The amount of tokens that will be burned. + function _burn(address account, uint256 amount) internal override(ERC20, ERC20Votes) { + super._burn(account, amount); + } +} diff --git a/packages/contracts/contracts/governance/MintManager.sol b/packages/contracts/contracts/governance/MintManager.sol new file mode 100644 index 000000000..d9feae71d --- /dev/null +++ b/packages/contracts/contracts/governance/MintManager.sol @@ -0,0 +1,63 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +import "@openzeppelin/contracts/access/Ownable.sol"; +import "./GovernanceToken.sol"; + +/// @title MintManager +/// @notice Set as `owner` of the governance token and responsible for the token inflation +/// schedule. Contract acts as the token "mint manager" with permission to the `mint` +/// function only. Currently permitted to mint once per year of up to 2% of the total +/// token supply. Upgradable to allow changes in the inflation schedule. +contract MintManager is Ownable { + /// @notice The GovernanceToken that the MintManager can mint tokens + GovernanceToken public immutable governanceToken; + + /// @notice The amount of tokens that can be minted per year. + /// The value is a fixed point number with 4 decimals. + uint256 public constant MINT_CAP = 20; // 2% + + /// @notice The number of decimals for the MINT_CAP. + uint256 public constant DENOMINATOR = 1000; + + /// @notice The amount of time that must pass before the MINT_CAP number of tokens can + /// be minted again. + uint256 public constant MINT_PERIOD = 365 days; + + /// @notice Tracks the time of last mint. + uint256 public mintPermittedAfter; + + /// @notice Constructs the MintManager contract. + /// @param _upgrader The owner of this contract. + /// @param _governanceToken The governance token this contract can mint tokens of. + constructor(address _upgrader, address _governanceToken) { + transferOwnership(_upgrader); + governanceToken = GovernanceToken(_governanceToken); + } + + /// @notice Only the token owner is allowed to mint a certain amount of the + /// governance token per year. + /// @param _account The account receiving minted tokens. + /// @param _amount The amount of tokens to mint. + function mint(address _account, uint256 _amount) public onlyOwner { + if (mintPermittedAfter > 0) { + require(mintPermittedAfter <= block.timestamp, "MintManager: minting not permitted yet"); + + require( + _amount <= (governanceToken.totalSupply() * MINT_CAP) / DENOMINATOR, + "MintManager: mint amount exceeds cap" + ); + } + + mintPermittedAfter = block.timestamp + MINT_PERIOD; + governanceToken.mint(_account, _amount); + } + + /// @notice Upgrade the owner of the governance token to a new MintManager. + /// @param _newMintManager The MintManager to upgrade to. + function upgrade(address _newMintManager) public onlyOwner { + require(_newMintManager != address(0), "MintManager: mint manager cannot be the zero address"); + + governanceToken.transferOwnership(_newMintManager); + } +} diff --git a/packages/contracts/deploy-config/devnetL1.json b/packages/contracts/deploy-config/devnetL1-template.json similarity index 51% rename from packages/contracts/deploy-config/devnetL1.json rename to packages/contracts/deploy-config/devnetL1-template.json index 415dd7ea7..521688ce3 100644 --- a/packages/contracts/deploy-config/devnetL1.json +++ b/packages/contracts/deploy-config/devnetL1-template.json @@ -4,49 +4,59 @@ "l2BlockTime": 2, "l1StartingBlockTag": "earliest", "maxSequencerDrift": 300, - "sequencerWindowSize": 15, - "channelTimeout": 40, + "sequencerWindowSize": 200, + "channelTimeout": 120, "p2pSequencerAddress": "0x9965507D1a55bcC2695C58ba16FB37d819B0A4dc", "batchInboxAddress": "0xff00000000000000000000000000000000000000", "batchSenderAddress": "0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC", - "validatorPoolTrustedValidator": "0x70997970C51812dc3A010C7d01b50e0d17dc79C8", - "validatorPoolRequiredBondAmount": "0x1", - "validatorPoolMaxUnbond": 10, - "validatorPoolRoundDuration": 60, - "l2OutputOracleSubmissionInterval": 60, + "l2OutputOracleSubmissionInterval": 4, "l2OutputOracleStartingTimestamp": -1, "l2GenesisBlockGasLimit": "0x1c9c380", "l1BlockTime": 3, "l1UseClique": true, - "cliqueSignerAddress": "0xca062b0fd91172d89bcd4bb084ac4e21972cc467", - "protocolVaultRecipient": "0xBcd4042DE499D14e55001CcbB24a551F3b954096", - "l1FeeVaultRecipient": "0x71bE63f3384f5fb98995898A86B02Fb2426c5788", - "proxyAdminOwner": "0xBcd4042DE499D14e55001CcbB24a551F3b954096", - "finalizationPeriodSeconds": 600, + "cliqueSignerAddress": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "protocolVaultRecipient": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "l1FeeVaultRecipient": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "proxyAdminOwner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "finalizationPeriodSeconds": 120, "deploymentWaitConfirmations": 1, "fundDevAccounts": true, - "l2GenesisBlockBaseFeePerGas": "0x3B9ACA00", + "l2GenesisBlockBaseFeePerGas": "0x1", "gasPriceOracleOverhead": 2100, - "gasPriceOracleScalar": 1500000, - "eip1559Denominator": 8, - "eip1559Elasticity": 2, - "l1GenesisBlockTimestamp": "0x638a4554", - "colosseumCreationPeriodSeconds": 500, - "colosseumBisectionTimeout": 120, - "colosseumProvingTimeout": 480, - "colosseumDummyHash": "0xa1235b834d6f1f78f78bc4db856fbc49302cce2c519921347600693021e087f7", - "colosseumMaxTxs": 100, - "colosseumSegmentsLengths": "4,3,6,3", + "gasPriceOracleScalar": 1000000, + "enableGovernance": true, + "governanceTokenSymbol": "KRO", + "governanceTokenName": "Kroma", + "governanceTokenOwner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "eip1559Denominator": 50, + "eip1559Elasticity": 6, + "l1GenesisBlockTimestamp": "0x64c811bf", + "l2GenesisRegolithTimeOffset": "0x0", + "l2GenesisSpanBatchTimeOffset": "0x0", + + "validatorRewardScalar": 5000, + "validatorPoolTrustedValidator": "0x70997970C51812dc3A010C7d01b50e0d17dc79C8", + "validatorPoolRequiredBondAmount": "0x1", + "validatorPoolMaxUnbond": 10, + "validatorPoolRoundDuration": 16, "securityCouncilOwners": [ - "0x007D7e4391DCFdE47Dd7FD0B8E16091C5e0E1C7f", - "0x2A06Af6a4F325B1e0095a8AbD32888e0AbdCD04D", - "0xed92E7C40348A552822847384D722A6adB9AFeFA" + "0x70997970C51812dc3A010C7d01b50e0d17dc79C8", + "0x71bE63f3384f5fb98995898A86B02Fb2426c5788", + "0xFABB0ac9d68B0B445fB7357272Ff202C5651694a" ], "governorVotingDelayBlocks": 0, "governorVotingPeriodBlocks": 100, "governorProposalThreshold": 1, "governorVotesQuorumFractionPercent": 51, "timeLockMinDelaySeconds": 1, + "l2GovernorVotingPeriodBlocks": 150, + "l2TimeLockMinDelaySeconds": 300, + "colosseumCreationPeriodSeconds": 60, + "colosseumBisectionTimeout": 30, + "colosseumProvingTimeout": 30, + "colosseumDummyHash": "0xa1235b834d6f1f78f78bc4db856fbc49302cce2c519921347600693021e087f7", + "colosseumMaxTxs": 100, + "colosseumSegmentsLengths": "2,2,3,3", "zkVerifierHashScalar": "0x1545b1bf82c58ee35648bd877da9c5010193e82b036b16bf382acf31bc2ab576", "zkVerifierM56Px": "0x15ae1a8e3b993dd9aadc8f9086d1ea239d4cd5c09cfa445f337e1b60d7b3eb87", "zkVerifierM56Py": "0x2c702ede24f9db8c8c9a439975facd3872a888c5f84f58b3b5f5a5623bac945a" diff --git a/packages/contracts/deploy-config/devnetL1.ts b/packages/contracts/deploy-config/devnetL1.ts deleted file mode 100644 index 546ae4675..000000000 --- a/packages/contracts/deploy-config/devnetL1.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { DeployConfig } from '../src/deploy-config' -import config from './devnetL1.json' - -export default config satisfies DeployConfig diff --git a/packages/contracts/deploy-config/mainnet.ts b/packages/contracts/deploy-config/mainnet.ts deleted file mode 100644 index 5a8abac4c..000000000 --- a/packages/contracts/deploy-config/mainnet.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { DeployConfig } from '../src/deploy-config' -import config from './mainnet.json' - -export default config satisfies DeployConfig diff --git a/packages/contracts/deploy-config/sepolia.ts b/packages/contracts/deploy-config/sepolia.ts deleted file mode 100644 index 36d62e248..000000000 --- a/packages/contracts/deploy-config/sepolia.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { DeployConfig } from '../src/deploy-config' -import config from './sepolia.json' - -export default config satisfies DeployConfig diff --git a/packages/contracts/deploy/L1/001-Proxies.ts b/packages/contracts/deploy/L1/001-Proxies.ts index 419087dcf..2d52db565 100644 --- a/packages/contracts/deploy/L1/001-Proxies.ts +++ b/packages/contracts/deploy/L1/001-Proxies.ts @@ -1,6 +1,8 @@ import { DeployFunction } from 'hardhat-deploy/dist/types' import { deployProxy, getDeploymentAddress } from '../../src/deploy-utils' +import fs from 'fs' +import path from 'path' const PROXY_NAMES = [ 'SystemConfigProxy', diff --git a/packages/contracts/deploy/L1/013-SecurityCouncilToken.ts b/packages/contracts/deploy/L1/013-SecurityCouncilToken.ts index 7698d7d19..8361a1817 100644 --- a/packages/contracts/deploy/L1/013-SecurityCouncilToken.ts +++ b/packages/contracts/deploy/L1/013-SecurityCouncilToken.ts @@ -38,7 +38,10 @@ const deployFn: DeployFunction = async (hre) => { const balance = await token.balanceOf(guardian) if (balance.toNumber() === 0) { const res = `${index + 1}.png` - await token.safeMint(guardian, res) + const gas = await token.provider.estimateGas( + await token.populateTransaction.safeMint(guardian, res) + ) + await token.safeMint(guardian, res, { gasLimit: gas.mul(2) }) } } } diff --git a/packages/contracts/hardhat.config.ts b/packages/contracts/hardhat.config.ts index 7daffde9d..fbc4601fe 100644 --- a/packages/contracts/hardhat.config.ts +++ b/packages/contracts/hardhat.config.ts @@ -1,6 +1,6 @@ import dotenv from 'dotenv' -import { ethers } from 'ethers' -import { HardhatUserConfig } from 'hardhat/config' +import {ethers} from 'ethers' +import {HardhatUserConfig} from 'hardhat/config' // Hardhat plugins import '@foundry-rs/hardhat-forge' @@ -12,11 +12,12 @@ import 'hardhat-deploy' import './tasks' // Deploy configuration -import { deployConfigSpec } from './src/deploy-config' +import {deployConfigSpec} from './src/deploy-config' // Load environment variables dotenv.config() +// 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 const PRIVATE_KEY_DEPLOYER_DEVNET = 'ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80' @@ -71,11 +72,14 @@ const config: HardhatUserConfig = { live: false, url: 'http://localhost:8545', accounts: [PRIVATE_KEY_DEPLOYER_DEVNET], + saveDeployments: true, + deploy: ['./deploy/L1'], }, devnetL2: { live: false, url: process.env.RPC_URL || 'http://localhost:9545', accounts: [PRIVATE_KEY_DEPLOYER_DEVNET], + deploy: ['./deploy/L2'], }, }, foundry: { @@ -108,13 +112,19 @@ const config: HardhatUserConfig = { { version: '0.8.15', settings: { - optimizer: { enabled: true, runs: 10_000 }, + optimizer: { + enabled: true, + runs: 10_000, + }, }, }, { version: '0.5.17', // Required for WETH9 settings: { - optimizer: { enabled: true, runs: 10_000 }, + optimizer: { + enabled: true, + runs: 10_000, + }, }, }, ], diff --git a/packages/contracts/scripts/differential-testing/differential-testing.go b/packages/contracts/scripts/differential-testing/differential-testing.go index 7b14535f8..7d16dbb7b 100644 --- a/packages/contracts/scripts/differential-testing/differential-testing.go +++ b/packages/contracts/scripts/differential-testing/differential-testing.go @@ -1,6 +1,7 @@ package main import ( + "bytes" "fmt" "math/big" "os" @@ -15,10 +16,9 @@ import ( "github.com/ethereum/go-ethereum/trie" zkt "github.com/kroma-network/zktrie/types" - "bytes" - "github.com/ethereum-optimism/optimism/op-bindings/predeploys" - "github.com/ethereum-optimism/optimism/op-chain-ops/crossdomain" "github.com/ethereum-optimism/optimism/op-service/eth" + "github.com/kroma-network/kroma/kroma-bindings/predeploys" + "github.com/kroma-network/kroma/kroma-chain-ops/crossdomain" ) func init() { diff --git a/packages/contracts/scripts/differential-testing/utils.go b/packages/contracts/scripts/differential-testing/utils.go index 876c45433..9aa2abebc 100644 --- a/packages/contracts/scripts/differential-testing/utils.go +++ b/packages/contracts/scripts/differential-testing/utils.go @@ -8,13 +8,13 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum-optimism/optimism/op-bindings/bindings" "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" - "github.com/ethereum-optimism/optimism/op-chain-ops/crossdomain" + "github.com/kroma-network/kroma/kroma-bindings/bindings" + "github.com/kroma-network/kroma/kroma-chain-ops/crossdomain" ) -var ErrUnknownNonceVersion = errors.New("unknown nonce version") +var UnknownNonceVersion = errors.New("Unknown nonce version") // checkOk checks if ok is false, and panics if so. // Shorthand to ease go's god awful error handling @@ -42,7 +42,7 @@ func encodeCrossDomainMessage(nonce *big.Int, sender common.Address, target comm // Encode cross domain message V0 encoded, err = crossdomain.EncodeCrossDomainMessageV0(nonce, sender, target, value, gasLimit, data) } else { - return nil, ErrUnknownNonceVersion + return nil, UnknownNonceVersion } return encoded, err diff --git a/packages/contracts/src/contract-artifacts.ts b/packages/contracts/src/contract-artifacts.ts new file mode 100644 index 000000000..e6539063c --- /dev/null +++ b/packages/contracts/src/contract-artifacts.ts @@ -0,0 +1,496 @@ + + /* eslint-disable @typescript-eslint/no-var-requires, no-empty */ + /* + THIS FILE IS AUTOMATICALLY GENERATED. + DO NOT EDIT. + */ + + + let EchidnaFuzzAddressAliasing + try { + EchidnaFuzzAddressAliasing = require('../artifacts/contracts/echidna/FuzzAddressAliasing.sol/EchidnaFuzzAddressAliasing.json') + } catch {} + + + let EchidnaFuzzBurnEth + try { + EchidnaFuzzBurnEth = require('../artifacts/contracts/echidna/FuzzBurn.sol/EchidnaFuzzBurnEth.json') + } catch {} + + + let EchidnaFuzzBurnGas + try { + EchidnaFuzzBurnGas = require('../artifacts/contracts/echidna/FuzzBurn.sol/EchidnaFuzzBurnGas.json') + } catch {} + + + let EchidnaFuzzEncoding + try { + EchidnaFuzzEncoding = require('../artifacts/contracts/echidna/FuzzEncoding.sol/EchidnaFuzzEncoding.json') + } catch {} + + + let EchidnaFuzzHashing + try { + EchidnaFuzzHashing = require('../artifacts/contracts/echidna/FuzzHashing.sol/EchidnaFuzzHashing.json') + } catch {} + + + let EchidnaFuzzKromaPortal + try { + EchidnaFuzzKromaPortal = require('../artifacts/contracts/echidna/FuzzKromaPortal.sol/EchidnaFuzzKromaPortal.json') + } catch {} + + + let EchidnaFuzzResourceMetering + try { + EchidnaFuzzResourceMetering = require('../artifacts/contracts/echidna/FuzzResourceMetering.sol/EchidnaFuzzResourceMetering.json') + } catch {} + + + let GovernanceToken + try { + GovernanceToken = require('../artifacts/contracts/governance/GovernanceToken.sol/GovernanceToken.json') + } catch {} + + + let MintManager + try { + MintManager = require('../artifacts/contracts/governance/MintManager.sol/MintManager.json') + } catch {} + + + let SecurityCouncilToken + try { + SecurityCouncilToken = require('../artifacts/contracts/governance/SecurityCouncilToken.sol/SecurityCouncilToken.json') + } catch {} + + + let TimeLock + try { + TimeLock = require('../artifacts/contracts/governance/TimeLock.sol/TimeLock.json') + } catch {} + + + let UpgradeGovernor + try { + UpgradeGovernor = require('../artifacts/contracts/governance/UpgradeGovernor.sol/UpgradeGovernor.json') + } catch {} + + + let Colosseum + try { + Colosseum = require('../artifacts/contracts/L1/Colosseum.sol/Colosseum.json') + } catch {} + + + let IZKMerkleTrie + try { + IZKMerkleTrie = require('../artifacts/contracts/L1/IZKMerkleTrie.sol/IZKMerkleTrie.json') + } catch {} + + + let KromaPortal + try { + KromaPortal = require('../artifacts/contracts/L1/KromaPortal.sol/KromaPortal.json') + } catch {} + + + let L1CrossDomainMessenger + try { + L1CrossDomainMessenger = require('../artifacts/contracts/L1/L1CrossDomainMessenger.sol/L1CrossDomainMessenger.json') + } catch {} + + + let L1ERC721Bridge + try { + L1ERC721Bridge = require('../artifacts/contracts/L1/L1ERC721Bridge.sol/L1ERC721Bridge.json') + } catch {} + + + let L1StandardBridge + try { + L1StandardBridge = require('../artifacts/contracts/L1/L1StandardBridge.sol/L1StandardBridge.json') + } catch {} + + + let L2OutputOracle + try { + L2OutputOracle = require('../artifacts/contracts/L1/L2OutputOracle.sol/L2OutputOracle.json') + } catch {} + + + let ResourceMetering + try { + ResourceMetering = require('../artifacts/contracts/L1/ResourceMetering.sol/ResourceMetering.json') + } catch {} + + + let SecurityCouncil + try { + SecurityCouncil = require('../artifacts/contracts/L1/SecurityCouncil.sol/SecurityCouncil.json') + } catch {} + + + let SystemConfig + try { + SystemConfig = require('../artifacts/contracts/L1/SystemConfig.sol/SystemConfig.json') + } catch {} + + + let ValidatorPool + try { + ValidatorPool = require('../artifacts/contracts/L1/ValidatorPool.sol/ValidatorPool.json') + } catch {} + + + let ZKMerkleTrie + try { + ZKMerkleTrie = require('../artifacts/contracts/L1/ZKMerkleTrie.sol/ZKMerkleTrie.json') + } catch {} + + + let IPoseidon2 + try { + IPoseidon2 = require('../artifacts/contracts/L1/ZKTrieHasher.sol/IPoseidon2.json') + } catch {} + + + let ZKTrieHasher + try { + ZKTrieHasher = require('../artifacts/contracts/L1/ZKTrieHasher.sol/ZKTrieHasher.json') + } catch {} + + + let ZKVerifier + try { + ZKVerifier = require('../artifacts/contracts/L1/ZKVerifier.sol/ZKVerifier.json') + } catch {} + + + let CrossDomainOwnable + try { + CrossDomainOwnable = require('../artifacts/contracts/L2/CrossDomainOwnable.sol/CrossDomainOwnable.json') + } catch {} + + + let CrossDomainOwnable2 + try { + CrossDomainOwnable2 = require('../artifacts/contracts/L2/CrossDomainOwnable2.sol/CrossDomainOwnable2.json') + } catch {} + + + let CrossDomainOwnable3 + try { + CrossDomainOwnable3 = require('../artifacts/contracts/L2/CrossDomainOwnable3.sol/CrossDomainOwnable3.json') + } catch {} + + + let GasPriceOracle + try { + GasPriceOracle = require('../artifacts/contracts/L2/GasPriceOracle.sol/GasPriceOracle.json') + } catch {} + + + let L1Block + try { + L1Block = require('../artifacts/contracts/L2/L1Block.sol/L1Block.json') + } catch {} + + + let L2CrossDomainMessenger + try { + L2CrossDomainMessenger = require('../artifacts/contracts/L2/L2CrossDomainMessenger.sol/L2CrossDomainMessenger.json') + } catch {} + + + let L2ERC721Bridge + try { + L2ERC721Bridge = require('../artifacts/contracts/L2/L2ERC721Bridge.sol/L2ERC721Bridge.json') + } catch {} + + + let L2StandardBridge + try { + L2StandardBridge = require('../artifacts/contracts/L2/L2StandardBridge.sol/L2StandardBridge.json') + } catch {} + + + let L2ToL1MessagePasser + try { + L2ToL1MessagePasser = require('../artifacts/contracts/L2/L2ToL1MessagePasser.sol/L2ToL1MessagePasser.json') + } catch {} + + + let Arithmetic + try { + Arithmetic = require('../artifacts/contracts/libraries/Arithmetic.sol/Arithmetic.json') + } catch {} + + + let Burn + try { + Burn = require('../artifacts/contracts/libraries/Burn.sol/Burn.json') + } catch {} + + + let Bytes + try { + Bytes = require('../artifacts/contracts/libraries/Bytes.sol/Bytes.json') + } catch {} + + + let Bytes32 + try { + Bytes32 = require('../artifacts/contracts/libraries/Bytes32.sol/Bytes32.json') + } catch {} + + + let CodeDeployer + try { + CodeDeployer = require('../artifacts/contracts/libraries/CodeDeployer.sol/CodeDeployer.json') + } catch {} + + + let Constants + try { + Constants = require('../artifacts/contracts/libraries/Constants.sol/Constants.json') + } catch {} + + + let Encoding + try { + Encoding = require('../artifacts/contracts/libraries/Encoding.sol/Encoding.json') + } catch {} + + + let Hashing + try { + Hashing = require('../artifacts/contracts/libraries/Hashing.sol/Hashing.json') + } catch {} + + + let NodeReader + try { + NodeReader = require('../artifacts/contracts/libraries/NodeReader.sol/NodeReader.json') + } catch {} + + + let Predeploys + try { + Predeploys = require('../artifacts/contracts/libraries/Predeploys.sol/Predeploys.json') + } catch {} + + + let RLPWriter + try { + RLPWriter = require('../artifacts/contracts/libraries/rlp/RLPWriter.sol/RLPWriter.json') + } catch {} + + + let SafeCall + try { + SafeCall = require('../artifacts/contracts/libraries/SafeCall.sol/SafeCall.json') + } catch {} + + + let Types + try { + Types = require('../artifacts/contracts/libraries/Types.sol/Types.json') + } catch {} + + + let ColosseumTestData + try { + ColosseumTestData = require('../artifacts/contracts/test/testdata/ColosseumTestData.sol/ColosseumTestData.json') + } catch {} + + + let KromaToken + try { + KromaToken = require('../artifacts/contracts/token/KromaToken.sol/KromaToken.json') + } catch {} + + + let KromaTokenMinter + try { + KromaTokenMinter = require('../artifacts/contracts/token/KromaTokenMinter.sol/KromaTokenMinter.json') + } catch {} + + + let CrossDomainMessenger + try { + CrossDomainMessenger = require('../artifacts/contracts/universal/CrossDomainMessenger.sol/CrossDomainMessenger.json') + } catch {} + + + let ERC721Bridge + try { + ERC721Bridge = require('../artifacts/contracts/universal/ERC721Bridge.sol/ERC721Bridge.json') + } catch {} + + + let IKromaMintableERC20 + try { + IKromaMintableERC20 = require('../artifacts/contracts/universal/IKromaMintableERC20.sol/IKromaMintableERC20.json') + } catch {} + + + let IKromaMintableERC721 + try { + IKromaMintableERC721 = require('../artifacts/contracts/universal/IKromaMintableERC721.sol/IKromaMintableERC721.json') + } catch {} + + + let KromaMintableERC20 + try { + KromaMintableERC20 = require('../artifacts/contracts/universal/KromaMintableERC20.sol/KromaMintableERC20.json') + } catch {} + + + let KromaMintableERC20Factory + try { + KromaMintableERC20Factory = require('../artifacts/contracts/universal/KromaMintableERC20Factory.sol/KromaMintableERC20Factory.json') + } catch {} + + + let KromaMintableERC721 + try { + KromaMintableERC721 = require('../artifacts/contracts/universal/KromaMintableERC721.sol/KromaMintableERC721.json') + } catch {} + + + let KromaMintableERC721Factory + try { + KromaMintableERC721Factory = require('../artifacts/contracts/universal/KromaMintableERC721Factory.sol/KromaMintableERC721Factory.json') + } catch {} + + + let IERC5192 + try { + IERC5192 = require('../artifacts/contracts/universal/KromaSoulBoundERC721.sol/IERC5192.json') + } catch {} + + + let KromaSoulBoundERC721 + try { + KromaSoulBoundERC721 = require('../artifacts/contracts/universal/KromaSoulBoundERC721.sol/KromaSoulBoundERC721.json') + } catch {} + + + let Proxy + try { + Proxy = require('../artifacts/contracts/universal/Proxy.sol/Proxy.json') + } catch {} + + + let IStaticERC1967Proxy + try { + IStaticERC1967Proxy = require('../artifacts/contracts/universal/ProxyAdmin.sol/IStaticERC1967Proxy.json') + } catch {} + + + let ProxyAdmin + try { + ProxyAdmin = require('../artifacts/contracts/universal/ProxyAdmin.sol/ProxyAdmin.json') + } catch {} + + + let Semver + try { + Semver = require('../artifacts/contracts/universal/Semver.sol/Semver.json') + } catch {} + + + let StandardBridge + try { + StandardBridge = require('../artifacts/contracts/universal/StandardBridge.sol/StandardBridge.json') + } catch {} + + + let AddressAliasHelper + try { + AddressAliasHelper = require('../artifacts/contracts/vendor/AddressAliasHelper.sol/AddressAliasHelper.json') + } catch {} + + + let WETH9 + try { + WETH9 = require('../artifacts/contracts/vendor/WETH9.sol/WETH9.json') + } catch {} + + + export const getContractArtifact = (name: string): any => { + return { + EchidnaFuzzAddressAliasing, +EchidnaFuzzBurnEth, +EchidnaFuzzBurnGas, +EchidnaFuzzEncoding, +EchidnaFuzzHashing, +EchidnaFuzzKromaPortal, +EchidnaFuzzResourceMetering, +GovernanceToken, +MintManager, +SecurityCouncilToken, +TimeLock, +UpgradeGovernor, +Colosseum, +IZKMerkleTrie, +KromaPortal, +L1CrossDomainMessenger, +L1ERC721Bridge, +L1StandardBridge, +L2OutputOracle, +ResourceMetering, +SecurityCouncil, +SystemConfig, +ValidatorPool, +ZKMerkleTrie, +IPoseidon2, +ZKTrieHasher, +ZKVerifier, +CrossDomainOwnable, +CrossDomainOwnable2, +CrossDomainOwnable3, +GasPriceOracle, +L1Block, +L2CrossDomainMessenger, +L2ERC721Bridge, +L2StandardBridge, +L2ToL1MessagePasser, +Arithmetic, +Burn, +Bytes, +Bytes32, +CodeDeployer, +Constants, +Encoding, +Hashing, +NodeReader, +Predeploys, +RLPWriter, +SafeCall, +Types, +ColosseumTestData, +KromaToken, +KromaTokenMinter, +CrossDomainMessenger, +ERC721Bridge, +IKromaMintableERC20, +IKromaMintableERC721, +KromaMintableERC20, +KromaMintableERC20Factory, +KromaMintableERC721, +KromaMintableERC721Factory, +IERC5192, +KromaSoulBoundERC721, +Proxy, +IStaticERC1967Proxy, +ProxyAdmin, +Semver, +StandardBridge, +AddressAliasHelper, +WETH9 + }[name] + } + \ No newline at end of file diff --git a/packages/contracts/tasks/export-addresses.ts b/packages/contracts/tasks/export-addresses.ts new file mode 100644 index 000000000..e75c2c95c --- /dev/null +++ b/packages/contracts/tasks/export-addresses.ts @@ -0,0 +1,33 @@ +import fs from 'fs' +import path from 'path' + +import { task } from 'hardhat/config' +import { HardhatRuntimeEnvironment } from 'hardhat/types' + +task('export-addresses').setAction( + async (_, hre: HardhatRuntimeEnvironment) => { + const deploymentDir = path.join( + hre.config.paths.deployments, + hre.network.name + ) + const files = await fs.promises.readdir(deploymentDir) + + const exportData = {} + for (const file of files) { + if (file.endsWith('.json')) { + const data = await fs.promises.readFile( + path.join(deploymentDir, file), + 'utf8' + ) + const deployment = JSON.parse(data) + const name = file.slice(0, -5) + exportData[name] = deployment.address + } + } + + await fs.promises.writeFile( + path.join(deploymentDir, '.deploy'), + JSON.stringify(exportData, null, 4) + ) + } +) diff --git a/packages/contracts/tasks/index.ts b/packages/contracts/tasks/index.ts index 6146db8a3..b776b12b2 100644 --- a/packages/contracts/tasks/index.ts +++ b/packages/contracts/tasks/index.ts @@ -10,3 +10,4 @@ import './check-l2' import './generate-deploy-config' import './deployments-l2' import './transfer-ownership' +import './export-addresses' diff --git a/specs/rollup-node.md b/specs/rollup-node.md index bb723847e..178150056 100644 --- a/specs/rollup-node.md +++ b/specs/rollup-node.md @@ -59,7 +59,7 @@ For a complete specification of the L2 block derivation, refer to the [L2 block ## L2 Output RPC method -The Rollup node has its own RPC method, `kroma_outputAtBlock` which returns a 32 +The Rollup node has its own RPC method, `optimism_outputAtBlock` which returns a 32 byte hash corresponding to the [L2 output root](./validator.md#l2-output-commitment-construction). ### Output Method API @@ -68,7 +68,7 @@ The input and return types here are as defined by the [engine API specs][engine- [engine-structures]: https://github.com/ethereum/execution-apis/blob/main/src/engine/paris.md#structures -- method: `kroma_outputAtBlock` +- method: `optimism_outputAtBlock` - params: 1. `blockNumber`: `QUANTITY`, 64 bits - L2 integer block number
OR `String` - one of `"safe"`, `"latest"`, or `"pending"`.